[HN Gopher] Tailwind CSS v3.0 ___________________________________________________________________ Tailwind CSS v3.0 Author : pspeter3 Score : 411 points Date : 2021-12-09 18:33 UTC (4 hours ago) (HTM) web link (tailwindcss.com) (TXT) w3m dump (tailwindcss.com) | 1_player wrote: | Before you ask, as it happens in every Tailwind post, what is the | point of this when CSS "promotes" reuse and separation of | concerns, have a look at @ 5e92cb50239222b comment: | https://news.ycombinator.com/item?id=29501650 | | And let me repeat what every Tailwind fanboy (like me) states | every time this project is on HN: don't knock it till you've | tried it. Look at the animated example in the front page. You'll | never be able to iterate that quickly with CSS. | LouisSayers wrote: | Hmmm... as a non-tailwind user I just took a look. | | Maybe this shows my age, but it kinda looks like an extension | of <b></b> <i></i> - you know, that stuff that we moved away | from a long time ago... | | Isn't this losing the point of CSS - that our "content is | separate from its styling"? | | I know I know, we often have to adapt our HTML to allow the | styling to work properly, but this is only really true for | layouts, not for colors / padding / margin / fonts etc. | | I understand that we now have people writing React apps and | componentising everything, but if you litter your code with | styles such as "font-semibold" and "font-sans", isn't that just | going to mean you have a million places to change next time a | designer decides to give your webapp a makeover? | KarlKemp wrote: | Nobody said that it's a bad experience to use. People say that | it's _evil_. | | And, also, that it is made by and for the JS crowd that doesn't | understand CSS nor the document hierarchy it depends on, while | simultaneously considering it unworthy of any learning efforts | since it's a girly making-it-pretty addition to a markup | language, not a real professional STEM-grad-grade programming | language. | handrous wrote: | As much fondness as I have for the pure separation-of- | concerns CSS Zen Garden style, I have to admit I've yet to | actually see it leveraged on a real project. In 20 years of | working on the Web. I'm not sure I've ever seen a significant | re-working of CSS to re-theme a site without also changing | the markup substantially. | | In practice, maybe coupling the two doesn't actually do much | harm, provided _consistency of approach_ is maintained and it | doesn 't go quite as far as inlining CSS all over the place. | lghh wrote: | Why do you have the exact same tone and wording as this | comment from a different user above? | | https://news.ycombinator.com/item?id=29502044 | lhorie wrote: | Some technical thoughts as someone who could care less about | fanboyism: | | - One point where atomic CSS frameworks are supposed to shine | over conventional CSS is bundle size, since they (at least the | good ones) compile to only a single rule for any used value, | rather than potentially repeating rules for semantically | different classes. | | - Another point where atomic CSS frameworks shine is just sheer | volume of banging code out. When the bulk of your output is | visual, mastering tools based on shorthands like tailwind, | emmet, etc can feel very productive. | | - Purely atomic CSS frameworks can make some workflows more | difficult, e.g. by having too granular call sites and not | allowing "let's see what happens to the overall theme if I do | this design change" iterative style of work, or because | workflows that edit CSS on the fly via browser devtools can no | longer be used to limit impact within semantic lines (e.g. "I | want to change padding only on buttons, without breaking | everything else that happens to depend on the same padding | value"). There are both design-oriented and debugging-oriented | workflows that are affected in similar ways. | | - You generally don't get visual regressions at a distance w/ | atomic CSS. This matters at organizations where desire for | pixel precision and simultaneously fickle design teams are the | norm. But conversely, "can we just change the font size to be a | bit bigger across the site" can often run into issues of missed | spots. On a similar note, designs may become inconsistent | across a site over time due to the hyper local nature of atomic | CSS oriented development. | | - Custom rules may as well be written in APL[0]; they usually | aren't documented and it takes a "you-gotta-know-them-to-know- | them" sort of familiarity to be able to work with them (or get | back to them after a while). | | - There are some tools that mix and match atomic CSS with other | paradigms. For example, styletron[1] can output atomic CSS for | the bundling benefits, but looks like React styled components | from a devexp perspective, and has rendering modes that output | traditional-looking debug classes for chrome devtool oriented | workflows. | | The main theme to be aware of: proponents of atomic CSS rarely | talk of maintenance, so beware of honeymoon effect. Detractors | often omit that traditional CSS (especially at scale) also | requires a lot of diligence to maintain. So think about | maintenance and how AOP[2] vs hyperlocal development workflows | interact with your organization's design culture. | | [0] https://en.wikipedia.org/wiki/APL_(programming_language) | | [1] https://www.styletron.org/ | | [2] https://en.wikipedia.org/wiki/Aspect-oriented_programming | recursive wrote: | What animated example? You mean the youtube video? I didn't see | anything compelling in it over CSS. Stuff like "You can now | style print media!". The only reason you wouldn't have been | able to is because you were using tailwind. This new release is | probably an improvement over tailwind v2, but I don't see any | improvements over CSS. | | It's true that I haven't tried it. And I probably wouldn't, at | least until someone can formulate at least a hypothetical | advantage. | cercatrova wrote: | > animated example in the front page | | Not the blog post, the main landing page, ie | https://tailwindcss.com/ | zodiakzz wrote: | If you have a hammer... I am able to iterate orders of | magnitude faster in Adobe Photoshop. Back and forth feedback | with the customer and then the end result gets coded in non- | spaghetti reusable, themeable HTML/CSS. Seems you're iterating | at the wrong phase. | crate_barre wrote: | Depends. I've never used Tailwind, so I'll entertain your | aside. If you are mostly doing flat design, truthfully you | should be designing in HTML/CSS/JS. This is a failure of | setting expectations for designers. If you can get developers | to learn Leetcode, get designers to code their designs. | | Design in the browser with browser technology, it's just | boxes, gradients and shadows for industrial level web design | at the moment. You really shouldn't even be designing in a | tool like Photoshop or Figma given the current design | paradigms. | | You will not iterate faster than what I am suggesting. | | Edit: | | The reason why we are here, why something like Tailwind and | MUI exist, is mostly because we need an abstraction layer to | do what a designer does on a whim. You can flick a shadow on | and off on a Photoshop layer and mess with the subtlety of a | drop shadow with a slider. If a designer makes a fickle | change, the developer needs this abstraction to make the | fickle change as fickle as the thought that made it. That's | why you have all these quick utility methods. The designer is | one layer (no pun intended) removed. | | In 2021 (2022 really), it's shocking the amount of latitude | we give designers to still not be able to do CSS. A half | competent designer could have a modest style sheet that | mostly captures their design instincts, yet here we are, | unable to capture their whims and must now have an albatross | utility library to have manual laborers capture the | translation - all because ... they still won't learn basic | shit. | | And for what ultimately? These aren't baroque art pieces, it | is ultimately boxes with an aesthetic applied, all very | describable with semantic HTML and CSS. But alas, our | brilliant artists can't be bothered. Here, send me your | masterpiece so I can transform it for you. | | Take the bootcamp on web dev. You are literally the people I | want going there. Not the Classics major that needs money | because they picked a stupid major. It's you guys that need | it, and deserve it. | robertoandred wrote: | Nah, don't need designers passing along broken, useless CSS | that has to be redone anyway. | | Let designers focus on designing, developers on developing. | crate_barre wrote: | Lol, bro, making their typography and layout changes is | not really development. I'd much rather they just pick | that up already. | handrous wrote: | > Design in the browser with browser technology, it's just | boxes, gradients and shadows for industrial level web | design at the moment. You really shouldn't even be | designing in a tool like Photoshop or Figma given the | current design paradigms. | | This is why all but the very best flat designs (which does | _not_ always correlate positively with the size or | reputation of the firm turning them out--looking at you, | Google) look to me like something I 'd have turned out for | a quick feature demo circa '05, with everyone at the table | agreeing that, however nice the feature, a designer | _definitely_ needed to take a pass at it before it was | released. | Griffinsauce wrote: | > non-spaghetti reusable, themeable HTML/CSS | | The words of an open mind. | | Each of those adjectives are _very_ open to disagreement. | zodiakzz wrote: | Perhaps. But hard coded colors, hard coded layout (flexbox | etc), hard coded margins, paddings hard coded everything | right in the markup. Tailwind and those adjectives are | mutually exclusive. | | Does nobody remember themeing forums software like | vbulletin? Designers weren't allowed to touch the markup in | the slightest and yet so many amazing themes were made. | Why? Styling wasn't hard-coded in the markup. Hell, | remember the insanely customized old.reddit subreddits? | jf22 wrote: | We should be comparing Tailwind to modern alternatives, | not vBulletin CSS from 2004. | | FYI I'm a recent Tailwind convert so I agree that | Tailwind is good, but your comment is like saying Tesla | cars are great because they aren't horses. | zodiakzz wrote: | Whoosh. Well I prefer my "modern" alternatives to be | superior than the legacy ones, not the other way around. | jagger27 wrote: | All of the things you mention, including colours, are | configurable or at least overridable at compile time. | It's just not swapping a CSS file like the good ol' days. | | I won't argue if one is better than the other. | [deleted] | lijogdfljk wrote: | Any thoughts as to how Tailwind can handle dynamic plugins | using Tailwind? Ie it seems Tailwind relies on tree shaking to | produce sanely sized CSS. But if you have plugins which rely on | Tailwind, you'd have to either ship the full sized Tailwind CSS | _or_ they 'd have to duplicate CSS and ship with it. | | So far with this plugin/extension design i've not found a way | to use Tailwind and also retain nicely sized CSS. | cuddlecake wrote: | > Modern aspect ratio API -- no more padding hacks, well unless | you need to support Safari 14, which you probably do, but still. | | This is what makes me cry at night. | stevebmark wrote: | I'm not sure I get Tailwind still. Doing everything with utility | classes and OOCSS / BEM are things we stopped doing literally | decades ago. CSS modules still seem to solve every problem | Tailwind solves, and better. CSS modules combine the power of | global utility classes with locally styled components/locally | scoped classes, and compile to static stylesheets, a requirement | for performance. I'm not sure how Tailwind works, but any CSS | that's built at runtime and JS and inserted into the DOM | dynamically should be avoided, and is an example of favoring | developer experience over end user experience. It's always | surprising to me when the build process isn't front and center of | any CSS framework, since that's the most important performance | aspect. I'm not concerned about Tailwinds verbose CSS use since | that's gzipped away, but the static stylesheet compilation aspect | worries me if it's not front and center of the framework. | | CSS modules let you use the full power and control of vanilla | CSS, without having to worry about styles bleeding across | components. Sprinkle in your global utility classes for your | design system and you're good to go. Or sometimes even better, | abstract design into components like `<grid>` `<column>` etc and | not even worry about the classname implementation. | | I know I'm missing part of the picture, because of the hype and | joy that people report from Tailwind. What part(s) am I missing | that move folks from the power, beauty, and simplicity of CSS | modules, to all-utility-classes-all-the-time Tailwind? | freeopinion wrote: | I build tailwind exactly once and it gives me a static css file | with utility classes. I get local scoping from scope classes | ala Svelte. | wwweston wrote: | > CSS modules still seem to solve every problem Tailwind | solves, and better. | | I agree with most of what you're writing, but in arguing this | out with people who seem to be enthusiasts, what I think I've | discovered is that while there are existing (hell, | longstanding) unbundled _technical_ solutions fully capable of | solving the problems Tailwind does... they don 't solve the | practical problems of channeling a group into a good-enough | design system, and in fact many people who've been doing CSS | have never actually really used a design system (especially if | their experience is solely recent, and _definitely_ if their | experience is only incidental in the sense that they 're | application devs first). And many organizations don't have | roles where someone can focus on solving this problem. | | Just-add-Tailwind _may_ hit an interesting pit-of-success spot | for a lot of people in this position, where TW provides the | atoms of the design system to scatter in a just-in-time manner. | Sure, not elegantly, but practically. | | Personally, I'd prefer to work with people/orgs that don't see | this is an optimum, but I might accept it as a situational | local optimum. | reaperducer wrote: | I think this is not well understood. | | Tailwind is great if you're a startup, or someone who is a | webdev and also has to be the designer. But in a large | organization, with a company-wide style book, and a design | department, it's not a good fit. | | Tailwind works for "I see this control in my head, and I'm | going to code like this to make it happen." It's not really a | good match for "I see this control from the design | department, and I'm going to make it fit into the rest of the | site codebase like this." | tomnipotent wrote: | > Sure, not elegantly, but practically | | Let's be honest, there isn't much elegance to the non- | Tailwind solutions either. At the end of the day it's text | input used by a rendering engine to style layout, it and your | customers don't care how it got there. | zachrip wrote: | Based on what you've said, you're right, you don't understand | it...the things you're comparing it to don't really make sense. | Bem doesn't make sense to compare and neither do css modules. | Tailwind is a stylesheet with css classes that do atomic things | like changing border radius. It gives you a set of classes that | allow you to build just about anything you need with just | classes. When you compile an app that uses tailwind, it takes | just the styles you use and puts them into a single stylesheet. | So all of the things you claim to be wrong with tailwind aren't | true. Tailwind is very performant because you only use the | styles you need. It uses css variables for theming so there's | no need to implement it in userland. It also uses css variables | to do transforms which is very important because transforms are | not additive in css yet. Even if you don't end up liking | tailwind, the thing is executed really really well from the | ground up. | ksubedi wrote: | Seems like you are basing your opinions on some misconceptions. | Let me try to clear that for you. | | "CSS modules still seem to solve every problem Tailwind solves, | and better." | | - Not necessarily true. Unlike css modules, tailwind removes | the whole "think about a name for your class" mindset, reducing | friction from the development process. It also unifies some | base level design decisions like spacing and colors, which | developers would have to rely on "best practices" otherwise, | which don't necessarily get strictly enforced. | | "I'm not sure how Tailwind works, but any CSS that's built at | runtime and JS and inserted into the DOM dynamically should be | avoided, and is an example of favoring developer experience | over end user experience." | | - You are right, looks like you are not sure how Tailwind | works. Tailwind does not build anything at runtime, it all | happens at build time. Tailwind will compile only the things | you need (using the new JIT mode) into a css stylesheet which | is sent to the frontend. Not much different from how sass or | scss works. | | "CSS modules let you use the full power and control of vanilla | CSS, without having to worry about styles bleeding across | components." | | - Tailwind does not stop you from using vanilla css, but in | most cases you do not need to. As per their website, you can | think of it as an API to use parts of CSS, instead of CSS | replacement. I think you are confusing Tailwind as a | replacement for something like CSS Modules, but those two are | completely unrelated. You can still use CSS Modules while using | Tailwind. Think of it as an api to your design sytem just like | you could think of an ORM as an API to your database. | iruoy wrote: | JIT mode basically means it recompiles your styles before you | can press reload on your browser. | | Before they didn't have all colors enabled by default, | because generating classes like `bg-blue-500`, `text- | blue-500`, `border-blue-500`, etc. for all colors would | increase the resulting CSS way too much. They did the same | thing with variants. | | With the JIT none of that is necessary anymore. Plus you can | use arbitrary values because it's being compiled now. | aidos wrote: | And even that is less magic than it sounds. Unless it's | changed in v3, there's just a regex matching stuff that | could be a class name and building a rule for it. | /[^<>"'`\s]*[^<>"'`\s:]/g | robertwt7 wrote: | Aside from all of this. Try to use tailwind for 1 side | project. You'll see the difference of productivity when you | remember most of the tailwind classes as opposed to having to | open another css file, create a class, then reimport them. | | I just can't go back without tailwind. | tshaddox wrote: | I think Tailwind is multiple very different ideas in one | library. One thing that Tailwind is is a set of primitives and | design tokens that's just slightly higher level than CSS, but | still lower level than a component library. I think it's pretty | good at this. | | Another thing that Tailwind is is an opinionated delivery | mechanism for your styles, in this case, as utility classes | that can go straight into your HTML. This is probably a big | cause of Tailwind's popularity, not because any one person | necessarily loves using classes, but because it makes it | extremely easy for _everyone_ to start using Tailwind in nearly | any imaginable web project starting at plain static HTML files | and going up from there. This aspect of Tailwind is something | I'm not a huge fan of. To me it feels like a step back from a | lot of higher-level CSS tools (like many CSS-in-JS libraries) | to just go back to concatenating magic string literals into my | UI code. All the official Tailwind tooling (AFAIK) either just | watches your codebase looking for these magic string and | generating the appropriate raw CSS, or doing it in real-time | with their new JIT compiler (which I admittedly haven't | investigated yet). | laskdqflaksqdf wrote: | I agree with this. I think the "set of primitives" part is an | interesting, perhaps great, idea. Makes it easy to enforce | consistency across your codebase. But I don't like the | delivery mechanism--chucking all the styles in with the | markup feels like it makes everything hard to read: the | HTML/component declarations are harder to read both in code | and in the browser, the individual classnames are hard to | read (both because the names chosen are often gibberish and | because parsing a dozen of them in a row is difficult), and | the styles are annoying to debug in the browser (now you have | to scroll through a dozen different utility classes to figure | out what's going on). | | Personally I feel like a better approach is taking that same | philosophy of design system primitives and executing it via | something like SASS mixins, paired with single-file | components a la Vue or Svelte. Then you can use better names | (no need for brevity now), keep the styling separate from the | markup (but still paired with it), and have a better | experience debugging in the browser. | irrational wrote: | > Doing everything with utility classes and OOCSS / BEM are | things we stopped doing literally decades ago. | | I don't understand what you mean by this. Literally decades ago | would take us back to at least 2001. OOCSS, BEM, etc. were all | created after that year. Wouldn't it be correct to say "Doing | everything with utility classes and OOCSS / BEM are things we | hadn't even started doing literally decades ago."? | [deleted] | Vinnl wrote: | There's three things: | | 1. It removes a layer of abstraction that's redundant if you | use a component-based UI framework. | | 2. It provides constraints that act as guardrails against | introducing inconsistencies into a design. | | 3. Its tooling is not magic and does not have runtime impact. | | More detail at https://vincenttunru.com/why-tailwind/ | m0ngr31 wrote: | I'm in the same boat. Started using Vanilla Extract | (https://vanilla-extract.style) earlier this year and it's the | best CSS setup I've ever worked with. | aidos wrote: | Tailwind is global utility classes too. There's no runtime | aspect. It's literally just css classes. The nicest thing is | that all your variations exist, so you can do things like | hover:font-bold. So you can see the rules immediately like with | inline styles, but they're more flexible. | stefan_ wrote: | At least finally someone using the dirty word "inline | styles". It's like all the other comments here stepped right | over that point from the grandparent. Only it's not inline | styles, it's inline styles and you are Dennis fucking Ritchie | in 1970 and your fingers hurt from the teletype so you are | making up crude abbreviations for everything. | plesiv wrote: | With no disrespect to anyone, I think it'd be useful if people | bashing Tailwind would briefly list what their day to day | programming consists of. | | My impression is that most of the negative comments are coming | from people that don't code for Web often (I could be wrong). To | those folks: I'm not saying you don't know your stuff or that you | argue badly - since I was on that side myself a few months back. | | What I am saying is that the elegance and pragmatism of Tailwind | might not be easy to intuit just by reading about it. Try to | implement a simple landing page using Tailwind+TailwindUI and see | if any lightbulbs gets lit. | gedy wrote: | I really like Tailwind, and was excited to use it for a new | application at our company. However, I find the lack of standard | component classes (modal, card, button, wherever) pretty | limiting. | | This makes it difficult to have open source Tailwind components | that can be imported and themed differently for your apps. Even | after buying Tailwind UI, they are basically just code samples | that we'd have to copy into our own libraries and maintain. | | Again it's a really cool library, but feel the approach is | probably better for smaller apps and teams. | | Daisy UI might help with this, but seems pretty small at the | moment. https://daisyui.com/ | nomdep wrote: | There is a headless (meaning unstyled) set of components from | the same authors: https://headlessui.dev/ | hsbauauvhabzb wrote: | I like the idea of tailwind, I've dealt with raw css and | bootstrap before but I'm certainly no frontend developer. | | How can I learn tailwind enough to become proficient? Most of the | documentation I looked at seemed to lack any tutorial on how to | locate the correct classes I need, or any other sharp edges that | might exist, | Kaze404 wrote: | My process of learning Tailwind involved nothing but going to | https://tailwindcss.com/docs, pressing Ctrl+K to bring up the | search, and typing the class I'd use in "regular" CSS. Their | search is great at picking these up. | JasonCannon wrote: | Agreed. My team is doing this very process. If we run into | not knowing what class to use, we just look it up on the | docs. VSCode also has a great intellisense plugin for | tailwind as well (https://marketplace.visualstudio.com/items? | itemName=bradlc.v...). For the first day or two we used the | docs pretty heavily. Now, we just make a best guess, | intellisense generally tells us what the class name actually | is, and if we can't figure it out then we go to the docs. | fadikhadra wrote: | Congrats on the release, keep up the great work! | jlelse wrote: | Is it possible to use the JIT feature with Golang template files? | francislavoie wrote: | Yes, just make sure the `content` config will read your files: | https://tailwindcss.com/docs/configuration | jlelse wrote: | Which template languages are supported? I wasn't able to find | any information about that. | francislavoie wrote: | It's just regexes basically. All languages should be | supported. If something that looks like a tailwind class is | found, it'll add it to the list of ones it'll generate. | alberth wrote: | I inherently from a coworker who was terminated, a web app built | with Tailwind. | | The tailwind.config.js is missing. | | I can't even begin to describe all of the reverse engineering | I've tried to regenerate the config file with no luck and we're | royally screwed. | | Make sure you don't lose that file! | [deleted] | Yabood wrote: | Unless your coworker configured some plugins or extended some | classes, a vanilla tailwind config with JIT-enabled should be | all you need. | alberth wrote: | We have a customized theme (colors, fonts, etc), hence the | issue. | Yabood wrote: | We've been using Tailwind for over a year now. We use it with | Angular for our web application and with Gatsbyjs/React for our | production website. I have nothing but love for Tailwind. | lewantmontreal wrote: | Has there ever been a front-end library/product so polished? The | landing page and even this announcement and the video is just | wow. | notahacker wrote: | Ironically, I had the opposite opinion on clicking the link to | the blog. | | Sure, a Galaxy Fold is a pretty niche user device, but its | genuinely the worst first impression of a mobile website I've | ever seen, with everything weirdly scaled to sit in a narrow | portion of my screen (other dimensions linked to px values on | the video embeds maybe?). Had to load the link a few times to | confirm I hadn't just accidentally zoomed out, since if I do | zoom in it looks like a normal mobile stylesheet | https://pasteboard.co/V0Cy3etIngpY.jpg | 5cott0 wrote: | Been a fan since V1 and to this day all I ever use are @apply and | utility classes. | ___q wrote: | Arbitrary Properties (inline styles) can now use constraints (css | vars), media queries, and hover/focus states, the reasons | Tailwind said you should use their utility classes instead of | inline styles in the first place :) | | https://tailwindcss.com/docs/utility-first#why-not-just-use-... | | https://tailwindcss.com/docs/adding-custom-styles#arbitrary-... | asimpletune wrote: | Is there a link showing the delta between v2 and v3? | asimpletune wrote: | From reading the blog post, it looks like they took most of the | things that were experimental or first class plugins and | graduated then into being native. | yurishimo wrote: | Here is the Upgrade Guide[0] and the Changelog[1] | | 0: https://tailwindcss.com/docs/upgrade-guide | | 1: | https://github.com/tailwindlabs/tailwindcss/blob/master/CHAN... | d--b wrote: | Geez, every time I see stuff from Tailwind I get so jealous... | | Tailwind is fine, but how they pulled off making tons of people | pay for a css framework just blows my mind. | | I remember reading the "UI for developers" articles, and saw how | they built up the hype. This was so well done... | zackbloom wrote: | Having used it pre-release, the JIT compiler is really | incredible. It makes Tailwind a sea-change when compared to | Bootstrap and the other, similar, CSS toolkits. | bamboozled wrote: | Coming from someone who mostly does platform / service work and | usually avoids "the frontend", tailwind helped me to actually | understand CSS, it made sense to me and has saved me a lot of | time. The site I built looked professional very quickly and | without much effort. | | Thank you to the team and I look forward to using it more in the | future. | seanwilson wrote: | I used the JIT version recently on a new landing page with code | completion for class names in my IDE and found it great. The | distance between what I'm picturing in my head and what I have to | type to see that on the screen felt so much shorter and less | fatiguing than the standard CSS approach. | | With the regular way, to style something that's probably not | going to appear elsewhere, I'm having to: come up with class | names, annotate the HTML with them, repeat some of this | annotating in a CSS file, jump back and forth between files to | tweak the styles, use the web inspector to figure out which CSS | class is overriding another then jump to the right CSS file to | fix it etc. | | Tailwind classes are also faster to type and flip between when | you're experimenting (e.g. editing "mt-5" to "pb-3" vs "margin- | top: 4.25em" to "padding-bottom: 2.75em") and you get less | distracted because it has sensible defaults and helpful | guardrails (you rarely need all the possible attributes and range | of parameter values CSS has available). | | I also rarely had the super irritating and common CSS scenario | where you edit a style and it doesn't change and you have to go | investigate to find out why e.g. something is overriding | something, your selector is wrong, and even after all that maybe | you undo the edit because it doesn't look good. Plus you no | longer have the fear that tweaking a shared class to going to | break some completely different page. | | I feel that beyond some building blocks, trying to create | reusable CSS classes with cascading styles has similarities to | using excessive abstraction and deep OOP class hierarchies in | regular programming languages to avoid a little duplication. | | I also don't have a problem with styling stuff appearing in my | HTML files either as long as the right HTML tags are used around | the data. HTML files are already full of class annotations and | divs that are only there for styling yet this doesn't cause a | problem to e.g. browsers, screen readers or crawlers. | z3t4 wrote: | The trick with CSS is to write semantic HTML and avoid div, | span and css classes. You can of course inline css too (used | mostly for optimization to prevent layout shift, but is also | fine for elements/classes that are not repeated, such as the | top menu, top banner/intro and header/footer) | seanwilson wrote: | > The trick with CSS is to write semantic HTML and avoid div, | span and css classes | | This experiment has failed though. CSS isn't powerful enough | to style HTML however you want without having to add a soup | of extra divs and classes that are only there for styling. No | large website today works otherwise. | | HTML is still semantic when it contains styling markup (in | the sense that a computer can read and understand the | structured data from it) so I'm unclear what benefit is being | missed out on. Whether you call a class "home-cta-subheading" | or "text-center" so you can apply some styles doesn't make a | difference to screen readers, browsers or search crawlers | either. | z3t4 wrote: | The example on the Tailwind front page is pretty good | semantic wise. Here's my version: | <figure> <img src="/sarah-dayan.jpg"> | <blockquote>"Tailwind CSS is the only framework that I've | seen scale on large teams. It's easy to | customize, adapts to any design, and the build | size is tiny."</blockquote> | <figcaption><b>Sarah Dayan</b>Staff Engineer, | Algolia</figcaption> </figure> | seanwilson wrote: | Now without modifying the HTML, how would I get the | author's name to appear on the right of the author image | with the other text underneath? And add a line break | before the company name? And make the word "tiny" use a | small font? | | And if you need to modify the HTML, were the extra tags | added 100% only for semantic reasons and not for | presentation reasons? | jolux wrote: | I believe there are accessibility problems with using divs | and spans where a more semantic element would suffice. | seanwilson wrote: | Yes, you should always be using the elements/tags with | the most semantic meaning you can. When you need to add | divs, spans and classes for styling reasons though, | they're going to be ignored by screen readers so there's | no problem here. | Toutouxc wrote: | > CSS isn't powerful enough to style HTML however you want | without having to add a soup of extra divs and classes that | are only there for styling | | Totally this. We say we've come a long way from using | tables for layout, but for example you still can't use | Flexbox without at least some non-semantic .stuff-container | and .radio-with-label junk. Decoupled HTML and CSS have | failed in the real world, outside of pet projects. | freebreakfast wrote: | > CSS isn't powerful enough to style HTML however you want | without having to add a soup of extra divs and classes that | are only there for styling. | | Can you provide an example? I've never found this to be the | case, particularly with modern CSS. Happy to be wrong | though. | andkon wrote: | You've never put a number of elements together in a div, | and added a class and styles to that div rather than each | individual element? You should try it out. | seanwilson wrote: | Take a look at the https://tailwindcss.com/ page and | search for "div". Can you replace them all more semantic | tags? If not, can you remove them and still style it the | same way? | awestroke wrote: | Since I learned to write semantic class names, and to compose | using scss or react components, Tailwind feels like it would be a | big step back. I get that it would be kind of nice to prototype | in, but is anybody here using it for complex apps or UIs? | yurishimo wrote: | Funnily, I've experienced something of the same, but inverted. | I was all in on semantic class names for years, then moved over | to Tailwind for a few work projects and couple of years. | | Now I'm back working on a project with a team that is staunchly | against TW and I'm having a hell of time getting back into the | rhythm of naming things. Everything just kinda looks like a box | so I'm having to go back to the the designer or team to pull | out names for things. | | Definitely looking forward to when I can go back to using | Tailwind at work and on personal stuff. The cognitive overhead | is real. | Griffinsauce wrote: | On the contrary, semantic classnames feel like an enormous drag | to me. | | Components are a better way to segment semantic pieces of | layout. Styling is lower level and having to name each atom of | it is an enormous PITA. | pineconewarrior wrote: | Netflix. | | Also, you can prototype your stuff and then use the "extract" | functionality to create components with nice shiny class names. | 5e92cb50239222b wrote: | It's been discussed to death in the past. | | https://news.ycombinator.com/item?id=22422873 | | https://news.ycombinator.com/item?id=28004515 | | https://news.ycombinator.com/item?id=18084013 | | https://news.ycombinator.com/item?id=26422286 | | https://news.ycombinator.com/item?id=25332101 | | From reading the previous threads, large projects are where it | (apparently) really shines. Personally I didn't find it useful | at all, but obviously YMMV. | cschmidt wrote: | If you're using components, then it works great. The css is | local to each component, and you only have to make changes in a | single place. I'm just doing a fairly simple app, but I can see | it scaling well to larger projects. | mixedCase wrote: | Where's the benefit over something like deduped CSS/Sass | modules? | dkryptr wrote: | I work on a large Next.js project that has at least 100 custom | made components all using Tailwind CSS. It is, without a doubt, | the best way to iterate and make changes. I will _never_ go | back to manual stylesheets. Having a separate CSS stylesheet | feels like context switching and breaks the flow of development | in my opinion. | autonomousErwin wrote: | Super bizarre - I've found the opposite. I really like | Tailwinds, it's great for getting up and running quickly if | you're a one-person-team but as our team's grown, readability | becomes quite a big issue (it's just not as clear as pure | CSS/SCSS I find) | gherkinnn wrote: | It feels strange at first but then it's a bit like flying. | [deleted] | Mizza wrote: | I've been a Bootstrap user for a long time, but I recently made | the jump to Tailwind. It's not the revolutionary upgrade I was | hoping for, but it's nice evolutionary step in the right | direction. It's quite intuitive, but it doesn't get rid of most | of the frustrations that come from doing layouts, as those come | from the design of CSS itself. `@apply` makes the upgrade worth | it though, it's easy to make custom classes from the Tailwind | elements. | | The one thing I don't like is that the culture around Tailwind | seems a lot more proprietary, like you're getting three quarters | of a product that you need to buy the rest of, whereas Bootstrap | felt like you got everything you could ever need for free. | dcre wrote: | If you're talking about Tailwind UI[1] -- I use Tailwind | extensively and have basically never looked at Tailwind UI. | It's just useful snippets of HTML styled with Tailwind. It is | by no means required to get value out of Tailwind. | | I'm not sure what you mean by proprietary culture! Based on the | fact that I've pretty much never seen anyone talk about it, I | would guess (total guess, no real knowledge) that no more than | 1% of Tailwind users have paid for Tailwind UI. | | [1] https://tailwindui.com/ | Mizza wrote: | That's what I mean, though. $250 for some styled HTML! I | think that's crazy. Compare with Bootstrap, which has | basically just as many snippets simply as part of the | documentation. | dcre wrote: | I'm saying you don't need that and almost nobody uses it. | There are tons of snippets in the Tailwind documentation. I | just scrolled down the side nav and clicked a page at | random: | | https://tailwindcss.com/docs/divide-width#add-borders- | betwee... | dcre wrote: | Ok, I can see how if you're used to relying on the | Bootstrap examples[1] you would experience the lack of | such examples as a big hole in the TW docs. I guess I | would argue that those examples don't go very far at all | in a real-world application. | | [1] https://getbootstrap.com/docs/5.1/examples/ | randito wrote: | I don't think it's crazy. It's a good business model for | them and a way to monetize their work on Tailwind. | | Spending $250 in order to get a well implemented and well | designed HTML and CSS framework for your app sounds like | money well spent to me, depending on the circumstance. | | If you're an expert or pro at CSS, then yes, that's | expensive. But if you have a little budget and need to make | some quick progress on a new site, it's a great deal. | Hiring someone who can recreate these designs and give you | exactly what you want is probably going to cost more than | $250. | lghh wrote: | I think $250 is perfectly reasonable. If it saves you a few | hours, it's already paid for itself. | imilk wrote: | I paid the $250 and it's an incredible time saver for | prototyping & making decent looking, fully responsive | internal apps for clients. Based on the number of billable | hours saved, it's paid for itself many many many times | over. | marstall wrote: | just got parachuted into a tailwind project. have to say I don't | fully get it. | | the major stumbling block has been how tailwind is mostly just | css translated into its own hard-to-memorize lingo. | | For example, say I want to do something basic like "display:flex; | justify-content: start". | | In tailwind you would type "flex justify-start" instead. | | Which doesn't really follow any rules as far as how to get from A | to B, so it's just a matter of having to look the magic word up | in their docs each time until you memorize. And there are a _lot_ | of keywords (many modifiable according to n-dimensional | properties) to memorize. | | I know there are handy slugs like "w-1/3" that encapsulate a best | practice - but I'm a person who'd rather master the underlying | mechanics of that best practice and be able to deploy, tweak and | debug it myself. | ponyous wrote: | Yeah that's my issue as well and so much divitis and | unnecessary nesting... | aidos wrote: | Can you explain what you mean by this? You're still applying | css to html elements, it's nothing different, right? | psygn wrote: | I hear you. I don't understand the reasoning behind frameworks | propensity to abbreviate things, especially at "atomic"/utility | levels. I think it partially stems from wanting to prevent | ignorant knee-jerk reactions like "hurr durr why not just write | inline styles". | | I wish framework devs would just hyphenate (or even colon-ize) | the CSS property names fully like "display-flex justify- | content-start". I think Bootstrap does their own pattern like | "d-flex", but all that does is require one to visit the docs to | view some less common properties. Autocompletion pretty much | makes typing these a breeze, and having less opinionated | patterns for property names will make it less painful | transitioning between frameworks. | aidos wrote: | I think that's a little uncharitable. | | One thing to consider is that being a bit more terse in | tailwind is good because you effectively end up with media | queries, dark mode, hover states etc all placed together. | jesusthatsgreat wrote: | The beauty of it comes when you're working in a team of say 5 | other front end devs of varying skill levels. There tends to be | a large amount of duplication & overlap, people have different | ways of doing things and achieving certain looks. If everyone | agrees to use tailwind, you stop people from writing custom | code which is ultimately a good thing because custom code | requires custom comments and custom documentation etc which | let's face it - nobody does or wants to do and even if they do, | it's not maintained to the sort of standard tailwind docs are. | aidos wrote: | Not to mention, if your css isn't scoped (and let's face it, | this is one thing traditional css sucks at) you just never | quite know what rule some developer has put in somewhere at | what else it effects. | BoorishBears wrote: | I don't do frontend except when I have to and "flex justify- | start" is way easier for me to learn and explore with than | "display:flex; justify-content: start" | | And the keywords all seem to make sense to me? It's | "n-dimensional properties" but the dimensions are pretty | consistent... | seanwilson wrote: | > the major stumbling block has been how tailwind is mostly | just css translated into its own hard-to-memorize lingo. | | Autocompletion in your IDE makes this easy (the class names are | similar to the CSS attributes, even in your examples, so you | can usually guess them) and you use the same classes over and | over again so you learn them quick. I barely spent 10 minutes | in the Tailwind documentation the first few days because of the | VSCode extension. | marstall wrote: | ah yes - that would be a big help. alas I am not a vscode | user. I use webstorm and haven't been able to figure out how | to get tailwind autocomplete to work with it. | superfad wrote: | Other than autocomplete, I would also suggest using this | cheat sheet to help you: https://nerdcave.com/tailwind- | cheat-sheet | jpbow wrote: | There's a plugin that you have to install to get it going | https://www.jetbrains.com/help/webstorm/tailwind-css.html | marstall wrote: | oh I forgot to mention. ember. it's an ember project. | something about handlebars not being supported yet. | skipants wrote: | In my experience it's because any web app with complicated | styling rules tends towards this anyways, except all the CSS | names are custom, undocumented, and duplicated. The main | tradeoff is that the CSS names are not domain specific, but | honestly that's worked fine for me. | BadCookie wrote: | Consider using this handy Tailwind cheat sheet: | https://nerdcave.com/tailwind-cheat-sheet | | I have it open in a browser tab almost constantly. | dcre wrote: | The difference is you type that lingo inline into the HTML | instead of in separate files and you don't have to come up with | any class names. | animal_spirits wrote: | Coming up with variable/class names is one of the most | annoying aspects of programming, so any way we can eliminate | that task I think is always going to be a productivity boom | seph-reed wrote: | So strange. Using good variable names is even better than | docs in my experience. And having HTML where every div is | named helps a ton. It blows my mind how different people's | preferences can be on these things. | cwaffles wrote: | Memorizing and looking up names has significant impact on | my productivity, especially on codebases that I do not | touch frequently. I often losing my train of thought or | momentum because of too much abstraction | d3ckard wrote: | Most people suck at naming things. Also, most companies | don't have a strong culture for choosing names carefully. | | Honestly, I agree with you on the good variable names, | but in average team setting I prefer no names than bad | ones. | tlamponi wrote: | Sounds a bit like a glorified <el | style="display:flex;justify-content: start;">... ? | Tade0 wrote: | Essentially. | | https://mobile.twitter.com/samthor/status/14028256680611307 | 5... | moritzwarhier wrote: | The differences are: | | * media queries | | * @apply | | * low specificity (tailwind doesn't do !important) | | EDIT: It "does" important, but only when instructed so, in | 1.x it was a global switch, apparently since 2.x its | available as a per-class modifier. Thanks dcre | | * the theming abstraction | | * brevity | [deleted] | nightpool wrote: | In this scenario, "@apply" is just "a css class", so i | don't think it's appropriate to list that as a benefit | tailwind has over inline styles. In both cases you'd be | defining the styles somewhere else. | | Media queries are a good call out, they're definitely a | benefit tailwind's approach has to the built-in browser | support for inline styles. Another benefit is hover and | focus states, which are very difficult to apply with | inline styles. | dcre wrote: | Tailwind does have important, it was added with JIT. | | https://tailwindcss.com/docs/just-in-time-mode#built-in- | impo... | aidos wrote: | Oh, nice, I think that's a new 3.0 thing, not a JIT | thing. | dcre wrote: | Looks like TW 2.2 from June. It wasn't in the initial JIT | release in 2.1. | | https://github.com/tailwindlabs/tailwindcss/releases/tag/ | v2.... | aidos wrote: | I'm...not sure how I missed that, because I did look for | it. Thanks for the heads up! | dcre wrote: | Absolutely. But that's not a downside, that's exactly what | I want. | nightpool wrote: | Then why not just type that, instead of having to learn a | completely separate set of concepts to map to the | underlying CSS properties & values? I program with inline | CSS styles all the time when I'm prototyping something or | building a page quickly. | aidos wrote: | Because inline styles aren't flexible enough to be used | for everything, so you need to go out to external css | eventually. | | With tailwind you can do "block md:flex hover:font-bold" | and you've covered pseudo class cases and media queries | very succinctly. | psygn wrote: | See https://news.ycombinator.com/item?id=29502652 | dcre wrote: | It's much more concise than inline styles, variants and | configuration give you a lot more power, and it's not a | separate set of concepts. It's a subset of the same set | of concepts. | mixmastamyk wrote: | It's like radio presets instead of the full dial. Dial is | still available, but a great majority of the time you use | the presets. | marstall wrote: | that gets long - especially if they are rendered inline, hard | to scan through. | | I'm often in a cycle where I am tweaking a complex class with | 10-20 properties including flex, transforms, animations, etc. | - and having them each be on their own line (and the class | being in a separate file along with its parents, siblings and | children, frankly) is key for readability to me. | | I guess in the end I have come to have enormous respect for | CSS as a powerful, mature language and I'm not looking to be | buffered from it. | dcre wrote: | I don't think of it as an alternative to CSS. I think of it | as a way of writing CSS. | | It can get long. I certainly have parts of my app where I | break out into plain CSS because it's easier to understand. | bamboozled wrote: | This, I've used it only for about a week, there's no way I | could go back now. | agumonkey wrote: | For toying / prototyping it's way nicer than I'd ever expect. | Seriously fun. I now inject tailwing anywhere possible. | savanaly wrote: | For those that don't know, the laundry list of new stuff is | probably all enabled by the first item in the list, just-in-time | compilation. This means anything they can dream up can be | included as a utility class, without bloating the compile time of | the 99% of projects that will never use the feature (also without | bloating the css package size, but that's not new since shaking | out dead classes for prod has been a thing since forever). | brightball wrote: | I'm so grateful that Tailwind has removed any analysis paralysis | that I've had in the past on which CSS framework to invest my | time in learning. | manishsharan wrote: | I used to use Zurb Foundation or Bootstrap for my personal | projects but I found these two frameworks required me to use | their javascript and their JS does not play nice always. So I | moved to Bulma and that has served me well so far. I like not | having to worry about CSS (it drives me nuts) and I would like to | just focus on building components and functionality. | | Is TailwindUI an alternate to Bulma ? | spiffytech wrote: | > Is TailwindUI an alternate to Bulma ? | | Not really. They approach site design from pretty different | angles. | | Bulma has opinions about structure and style, and its value | proposition is providing out-of-the-box components so you can | skip spending brain cycles on that design work. At a high | level, Bulma believes projects reuse a lot of design patterns, | and those shouldn't have to be rethought each time you need | them. | | Tailwind doesn't care what you want your project to look like, | or how it's structured. Tailwind's value proposition is | streamlining you choosing your own design, and removing | footguns from that process. At a high level, Tailwind believes | cookie-cutter styles are typically less reusable as you hope, | that you should instead optimize for tailoring design patterns | to each place they're used, and that style reuse is better | implemented by e.g., React components than a CSS framework. | Tajnymag wrote: | Bulma operates at a bit higher level of abstraction than | tailwind. | jerrygoyal wrote: | TIL about css columns (a replacement of flex if you're not | building responsive design) https://developer.mozilla.org/en- | US/docs/Web/CSS/columns | marstall wrote: | got excited for a sec - very cool! then tried on Safari (v14) - | no love. | dorianmariefr wrote: | You can have responsive columns, e.g. columns-sm | loeg wrote: | (Formerly: dupe of https://news.ycombinator.com/item?id=29501125 | . The comments have now been merged.) | gnabgib wrote: | Other one is actually the dupe (posted slightly later, and a | poor URL choice), but has gained more traction | burlesona wrote: | I'm ambivalent about Tailwind, but I've used it a lot. I will say | the hypothetical advantages are mostly the following: | | 1. It's a step function over CSS units. This is the biggest | strength, just standardizing that your design uses padding of 2, | 4, 8px, but not 1px, 3px, or 1.23123em :). It provides more steps | than you need, but still it's good that the core of Tailwind is a | design system with defined unit and color variables. | | 2. _Some_ of the utility classes are very helpful. Even as | someone who likes writing CSS, it 's nice to not need to give | something a custom classname just because I want to put margin- | top on it. class="mt-4", done. | | I think the problem is Tailwind goes too far and tries to replace | EVERYTHING with a stack of utility classes. | | This works okay in extremely componentized web apps. It's a | nightmare if your UI isn't highly componentized. I've seen | projects where you make a button by copy pasting this ~80 | character string of tailwind classes all over the place, and then | changing the color names if you need to. Good luck fixing that | when the designer decides that we don't want any buttons to have | rounded corners anymore. | | Personally I think the best parts of Tailwind are captured in | Pollen[1], but I do wish it came with a subset of utility classes | for colors, font sizes, margin, padding, and text alignment. I | think the hard part is defining which subset is the right | subset... I doubt you could find strong agreement from a large | majority of developers on that. | | 1. https://www.pollen.style | JasonCannon wrote: | >This works okay in extremely componentized web apps. It's a | nightmare if your UI isn't highly componentized. I've seen | projects where you make a button by copy pasting this ~80 | character string of tailwind classes all over the place, and | then changing the color names if you need to. Good luck fixing | that when the designer decides that we don't want any buttons | to have rounded corners anymore. | | That app is done wrong. If you are using the same styles to | represent a button you should use postcss and do | | .myButtonClass { @extend: (80 tailwind classes here) } | markdown wrote: | So now we have to add this new postcss thing. Modern web dev | is bandaids all the way down. | JasonCannon wrote: | postcss is literally how tailwind works. If you are using | tailwind, you already have postcss. I get it, you don't | like modern frameworks. Don't use it. | ggregoire wrote: | Or make a Button component in your framework of choice. | function Button = ({ children }) => <button className={80 | tailwind classes here}>{children}</button> | <Button>Create</Button> <Button>Edit</Button> // Same | style <Button>Delete</Button> // Same style | JasonCannon wrote: | Even then, I would still recommend using the postcss extend | tag. Much easier to read that way. Also, postcss doesn't | require any frameworks, you can still do everything with | plain ol' html and javascript. | rgbrgb wrote: | Tailwind always looks like a cool evolution of Tachyons [0] to me | (with a build step). On the other hand, tachyons is really | simple, you just drop it into your project with no build required | (or drop the sass in), and I've never really felt like it was | missing any features I wanted. | | Has anyone used both seriously who can compare? | | [0]: https://tachyons.io/ | 1_player wrote: | I wanted to love tachyons before Tailwind was a thing. I jumped | to Tailwind as soon as it released because it was configurable. | The tachyons way of changing the defaults, such as colours or | breakpoints, last I checked years ago, was using search/replace | or forking the repo and adding your changes. Eh, no thanks. | | Tailwind is better in every way, and JIT is a killer feature. | porker wrote: | > Tailwind is better in every way, and JIT is a killer | feature. | | I dunno, the smaller dev build from JIT is great, but it | breaks my in-browser design workflow. Only the CSS styles | needed are generated, so I can't make in-browser tweaks to | see what a different padding/margin/other-property looks | like. | monkey_monkey wrote: | Tailwind 3.0 has a JIT/CDN thing that allows prototyping in | the browser. | rgbrgb wrote: | For customizing it, we copy the sass files and replace | variables for colors and breakpoints. It's not what you | usually do with a dependency, but Tachyons is feature | complete and has very few (read: human patchable) updates. | It's an easy way to have a custom style-guide in sass within | a few tweaks. | | It's a pretty small and readable codebase, so while there's a | downside that you can't upgrade it by incrementing a version, | the upside is that you don't have an opaque upstream | dependency and you can cut any fluff you don't need (though | there isn't much). | edmcnulty101 wrote: | Hey great question! I was wondering that as well! They're both | considered 'functional CSS' libraries. I used Tachyons after | spending 5 minutes trying to figure out the build process for | Tailwind and Tachyons worked great for the single site I used | it on. | sebmellen wrote: | Tailwind is more like an editorialized version of all the | features available in "vanilla CSS" than it is a UI library. | Tachyons is a small, tiny UI library that enforces _(ugly)_ | standard defaults. | | Also, the naming of classes in Tailwind feels much more natural | -- the tachyons naming is condensed to the point of being | abstruse. | gregsadetsky wrote: | I've had the feeling that Tachyons is a bit abandoned, no? The | album component/example [0] has been showing 404 images for a | while. The last release on GitHub is from 2018. | | CSS frameworks don't ... need? to be state-of-the-art/updated | all of the time (I get that), but at the same time, like | anything else, once a component/css/etc. library falls behind, | it (can) become harder to make it work with other tools. | | i.e. it's hard to abandon the bandwagon of constant new | releases, as the second that you do, "stuff" sometimes starts | breaking. This is of course a very general observation that | doesn't apply to everything. | | [0] | https://tachyons.io/components/collections/albums/index.html | endisneigh wrote: | Tachyons has been stated to be feature complete by its | authors many, many times. | keewee7 wrote: | The thing that made Bootstrap click for me years ago as a backend | developer were these complete example layouts: | | https://getbootstrap.com/docs/5.1/examples/ | | Is there anything similar for Tailwind CSS? | kemyd wrote: | I'm the founder of Shuffle, and Tailwind CSS is one of the | technologies we support: | | 1. https://shuffle.dev/editor | | 2. https://shuffle.dev/components/tailwind | | 3. https://shuffle.dev/setup | | The tool is paid, but we have many free components/layouts more | than Bootstrap docs. | 0des wrote: | Paying customer of Shuffle here, this is an answer to a | different question. This is not what was asked. | hipertracker wrote: | Check | | https://daisyui.com/ | | https://windicss.org/ | belter wrote: | Not exactly the same but close? https://tailwindui.com/ | fgblanch wrote: | What about tailwind UI components? | https://tailwindui.com/#components | keewee7 wrote: | Tailwind UI looks like a proprietary product by the creators | of Tailwind CSS. | 1_player wrote: | Define proprietary. You pay, they provide full HTML (with | Tailwind styles) for all of their controls, that's the | point. Worth the money IMO. | elliottkember wrote: | It's more like a series of templates. You copy them into | your project and customize them. I used them for a big | project and found them to be absolutely fantastic. It's a | lifetime license for unlimited projects - the time I saved | was very quickly worth the cost. | reducesuffering wrote: | All the free components with source code available are here: | https://tailwindui.com/preview | | Rest cost $ | acro5piano wrote: | I love it | ipaddr wrote: | I just started using tailwinds. I found the daisyui plug-in to | simplify the classes required and they add in the missing | components. | travisd wrote: | I wonder what the future of code-splitting with Tailwind will be. | With JIT and a large web app, it's easy to ship a massive CSS | file even if 90% of the rules are unused on 90% of the pages. | adamwathan wrote: | Tailwind author here! Do you have an example of a site using | the new engine that is shipping a massive CSS file where most | of the styles are unused on most pages? | | The Tailwind website is only 36.9kB of CSS and it likely | includes more classes than any other Tailwind site on the | internet by virtue of the fact that it has to provide visual | demos for so many of the classes. I don't think 36.9kB is | massive personally, it's much smaller than the CSS of almost | every website I've checked. | [deleted] | dorianmariefr wrote: | And the usual release video: | | What's new in Tailwind CSS v3.0? | | https://www.youtube.com/watch?v=mSC6GwizOag | Ataraxy wrote: | The waterfall columns layout is really nice. | weakwire wrote: | Great! but the docs are on the offensive side: - "Yes, send me | all your stupid updates" - "The new print modifier lets you style | how your site should look when _animals_ (in strikethrough) | people print it." | skellera wrote: | When did playful become offensive? | weakwire wrote: | Because by definition offensive has to do with how people | receive something. I love the library, will continue using | and donate, I would prefer the docs not to assume that people | that print papers are animals. That's all! Take it or leave | it. | [deleted] | kevin_thibedeau wrote: | They are. | ___q wrote: | Well it's not like they're expecting people to pay for...oh | $279 for the UI kit eh? | gjvc wrote: | I want something like this which includes a few ExtJS-like grid | (as in data table) and treelist classes for "enterprise" CRUD | want-to-be-spreadsheets-when-they-grow-up apps. (point being, | everything in a single toolkit) | | So much of enterprise IT is little more than glorified form fill- | in, and yet so few CSS/JS libraries solidly cover these use | cases. | yurishimo wrote: | Really happy to see this before the end of the year. The JIT | improvements and comprehensive arbitrary value support will no | doubt come in handy for quick one-off projects or bespoke landing | pages. | | I'm happy they have also expounded upon some of the more common | FAQs on the homepage, including the extraction to components. | etchalon wrote: | I've never understood CSS frameworks. CSS is the most lightweight | thing I touch in the front end. | | It's predictable, there are a billion ways to accomplish things, | and it's super easy to namespace yourself to safety. | | SASS I understand. It makes writing CSS faster. | | Tailwind feels like you have to learn CSS, but you'll never have | to actually write CSS. | | Reminds me of CoffeeScript in that way. You always had to | understand both It and JavaScript. | marstall wrote: | exactly. SASS (and CSS modules) are all I really need. just | give me direct access to this amazing language, please! | BigJono wrote: | I don't even see a need for SASS now that CSS has variables | and CSS Modules provides composability. | rekoros wrote: | Tailwind made it possible for me (backend developer) to write | somewhat maintainable frontend code. It's a joy to use both as a | writer and reader. | runarberg wrote: | There is a dead sibling comment which I will repeat with a bit | kinder words, and with a different caveat. | | As a frontend developer I don't like Tailwind for several | reasons, it brings the styling into the structure. As a | frontend developer Tailwind is at a forefront of what I would | consider bad practice and encourages a code style which would | be a nightmare for me to maintain. | | That said. Tailwind seems to be loved be people who are not | professional frontend developers. It seems to be just the right | tool for people who are not necessarily proficient in CSS. And | perhaps people like me (and the dead sibling) need to learn to | let go and allow other people to have the tools which makes it | easier for them to do the job which they are not experts at. | For that reason I understand Tailwind, even though I don't | agree with it. | rekoros wrote: | I like Tailwind _because_ it brings styling into structure. | Dealing with external CSS has always been really challenging | for me, and I 've always heretically used inline CSS. | | I mean header files are OK, and professional C developers | probably love them, but not having header files is kind of | great too :) | skipants wrote: | I think your comment has a lot of merit. Personally Tailwind | has been awesome but I think it's because it makes all these | abstractions for you. It also forces less experienced | developers to follow this abstraction rather than making | their own, which usually ends up as a ball of spaghetti. | | I have a similar comment elsewhere in the thread but it | applies here too, I think: the main drawback of Tailwind is | that it's extremely general. I'd imagine a well abstracted, | focused, domain-specific set of CSS created by experienced | frontend developers will be much better within that domain. | sombremesa wrote: | I'm a professional frontend developer and I like tailwind. | Being proficient in CSS is no more a badge of honor than | being proficient in CIL. | | > encourages a code style which would be a nightmare for me | to maintain | | What's a CSS code style that isn't a nightmare to maintain? | You have one? | lghh wrote: | I think TWCSS' argument is that we always were bringing the | styling into the structure. | | Show me a site that has CSS Zen garden style replaceable | stylesheets that totally overhaul the nature of the site. | It's incredibly rare and almost always not worth the effort. | What business says "I want to overhaul the styles of my | application but change no structure at all. I'd posit it's | near 0. | | Even if that's your goal, and I'd argue that it shouldn't be, | you can still do that with TWCSS and the @apply keyword. You | can write your generalized names then apply whatever twcss | keywords you want to them separate from your document's | structure. | | If your overhaul amounts to changing a "theme" you can easily | do that with twcss. In fact, that's basically the point. | | I am a professional frontend developer and I love it. | spoils19 wrote: | Speaking as a non-cargo culting developer, Tailwind is evil. It | doesn't understand CSS nor the document hierarchy it depends | on, and almost every project that has had a frontend developer | touch it has turned into an unmaintainable mess. | | Not to mention the tooling overhead. I had to revert countless | JSP files due to strange compilation bugs that resulted in | classes only sometimes(?) being added. | nanna wrote: | > Speaking as a non-cargo culting developer | | Remember the HN comment guidelines? | | > Be kind. Don't be snarky. Have curious conversation; don't | cross-examine. Please don't fulminate. Please don't sneer, | including at the rest of the community. | | https://news.ycombinator.com/newsguidelines.html | [deleted] | aidos wrote: | It's not traditional css and you need to accept that if you | want to work with it. It has a load of benefits in a | different dimension to css, and personally I think they're | worth the trade off. | | My main issue with it is the inability to control the order | of precedence with the css rules. It's mostly fine, but when | you have runtime rules around, say, colouring text based on a | few different variables, it turns into a bit of mess. | Unfortunately because of the way it works there's no way to | implement "last rule wins" at runtime. | JasonCannon wrote: | I use tailwind with Angular, and we solve this with using | [ngClass] to add/remove the class. You could do something | similar with plain JS as well, and I imagine in most | frameworks. Although yes, that is annoying to have to deal | with. | brainzap wrote: | How do I make a button? I am too dumb to get the simple button | working. | gherkinnn wrote: | <button class="px-3 py-2 bg-green-300 text-green-900">hello, | brainzap</button> | ___q wrote: | Well that's easy, silly! <button | type="submit" class="inline-flex justify-center py-2 px-4 | border border-transparent shadow-sm text-sm font-medium | rounded-md text-white bg-indigo-600 hover:bg-indigo-700 | focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring- | indigo-500"> Sign in </button> | | A real joy compared to writing CSS, lemme tell ya. | adamwathan wrote: | It's fewer than half as many characters as writing the same | thing in CSS: .btn { display: inline- | flex; justify-content: center; padding: 8px | 16px; border: 1px solid transparent; box- | shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); font-size: | 14px; border-radius: 6px; color: #fff; | background-color: rgb(79 70 229); } .btn:hover { | background-color: rgb(67 56 202); outline: 2px dotted | transparent; outline-offset: 2px; box-shadow: | 0 0 0 2px #fff, 0 0 0 4px rgb(99 102 241), 0 1px 2px 0 rgb(0 | 0 0 / 0.05); } | [deleted] | gunshowmo wrote: | Looks fantastic. My only concern using this in a full React | project is its lack of interoperability with standard libraries. | It seems like for the best experience, you either buy Tailwind UI | to use with a tailwind project for anything except the most basic | UIs, reimplement the Tailwind UI components yourself, or have a | weird mix of css-in-js and Tailwind CSS. Although I love the idea | of HTML-native inputs all the way through, I tend to immediately | run into issues where using a native interface instead of a JS- | based implementation harms the user experience. | | Props to the team though - I feel like this is something I'll try | out for a marketing site. | crooked-v wrote: | You may be interested in Chakra UI (https://chakra-ui.com), | which has low-level details (including default theming) | basically identical to Tailwind CSS v2 but is built around css- | in-js via Emotion. | lghh wrote: | I like Chakra...mostly. We have ran into some major | performance issues with it all over our application though. | The docs [1] make it sound like it's a rare issue, but we're | not doing anything particularly wild and it became unusable | at a point due to these issues. Now, we have a "no Chakra | below this point" rule where certain parts of our application | are not allows to use Chakra at all and use TailwindCSS + our | own custom components instead. | | [1] https://chakra-ui.com/docs/comparison#the-runtime-trade- | off-... | nwienert wrote: | Shameless self-plug but if you'd like the same idea but that | works with native as well and has an optimizing compiler that | outputs clean CSS at build-time, try Tamagui | (https://tamagui.dev). | gunshowmo wrote: | This looks fantastic! Looking forward to diving in a bit | deeper. | gunshowmo wrote: | Nice - I've seen a recent explosion of good libraries. I've | seen Atlassian, Shopify, and others open source subsets of | their own libraries as well. | | Another less popular one that I have had my eye on for some | time is Mantine. It seems very polished and composable. | tshaddox wrote: | These days don't most popular React UI frameworks support | passing classes to all the HTML elements they render? | gunshowmo wrote: | They do based on what I've seen, you're right. I'm speaking | more to the consistency of styling across the project, but if | the UI library is separated out from the rest of the project | then it shouldn't actually be a concern to compose the | components with tailwind-styled elements. | | Thanks for helping me think through it further! | gherkinnn wrote: | You're right as it probably won't work well with MUI [0] | (formerly React Material) and similar options like Ant [1]. But | they all accept a theme provider that could hook in to the | Tailwind config. Never tried it though. | | But a swell of less opinionated offerings [2] [3] [4] (more and | more the popular anyways) work well with Tailwind. In fact, | when writing your own libs, exposing a className prop makes | them painlessly customisable. | | 0 - https://mui.com | | 1 - https://ant.design | | 2 - https://www.radix-ui.com/docs/primitives/overview/styling | | 3 - https://react-table.tanstack.com | | 4 - https://react-spectrum.adobe.com/react-aria/ | gunshowmo wrote: | Thanks for these ideas! The react-aria seems quite | interesting to develop a UI library library using Tailwind- | styled elements while accounting for accessibility. | handrous wrote: | > Although I love the idea of HTML-native inputs all the way | through, I tend to immediately run into issues where using a | native interface instead of a JS-based implementation harms the | user experience. | | The way HTML forms (in particular, but also things like tables) | are stuck in a _not even good for the time_ '90s level of | functionality is an under-appreciated drag on all web | development, IMO. So very much wasted effort, wheel- | reinvention, brokenness (a11y, especially) et c. for shit that | should have been built-in years ago. | pbowyer wrote: | > The way HTML forms (in particular, but also things like | tables) are stuck in a not even good for the time '90s level | of functionality is an under-appreciated drag on all web | development, IMO | | It absolutely is, but things are changing! Come help us get | better form widgets built into browsers at at https://open- | ui.org/. | | The website's a bit behind, the Discord and GitHub issues are | where most discussion happens. We need people who know hte | pain points to help us. ___________________________________________________________________ (page generated 2021-12-09 23:00 UTC)