Tailwind CSS logo with thinking emoji

People often ask me about Tailwind. I think Tailwind is great, but it isn't for me. This article is about the good stuff about Tailwind, the things you might be missing out on, and why modern CSS might be a better choice for pushing the web forward.

People often asked me, “How do I do this in Tailwind?” or even stated that I have something against Tailwind. Nothing could be further from the truth. I think Tailwind is great. I also still believe jQuery is great, and the usage will probably stay bigger than React ever will be. We need to talk more about tooling, but on an honest level. This article is not about “syntax” or having “long classes in your HTML”. This article is about the good stuff about Tailwind, but also about the bad stuff, the things you are missing out on, and why it isn’t for me.

This is one of those articles that I’ve been thinking about for a long time. I always feel like I need to walk on eggshells to convey a clear and understandable message. That being said, I thought a long time about how to approach this topic, and I wanted to share it nonetheless. To give a bit more context, I’ve recently been working on a project using Tailwind. I see the benefits, but it really is a step down from just writing CSS.

Tailwind is a fantastic tool that is used by a multitude of companies, including the company I work for. I am not here to argue the benefits. I also believe that Tailwind is created by people who have an absolute passion for CSS, and that is a fantastic thing. I’ve also noticed that Tailwind, in some cases, has become a gateway drug for people to get more into writing CSS, which is great! It actually teaches people due to its good documentation, which also makes me wonder that we may not have enough clear “go to websites” purely for CSS documentation, or maybe they are not beginner-friendly enough, but I digress…

But it does bring me to one important selling point for Tailwind:

Clearer vs easier?

Look, CSS is a simple language; it’s not easy, but the syntax is easy to remember, and that has been the case for a long time (as in forever). So my question here is: Is Tailwind actually easier than CSS?

I believe it’s really not… It’s better documented, it might be clearer, but it’s not easier. When I’m forced to write Tailwind, I’m losing a lot of time since it is an abstraction of a language that I know by heart, for some reason, it also makes me write websites in a more old-fashioned manner, using way more breakpoints instead of just creating fluid experiences (but that might just be me not being trained enough). For me personally, Tailwind only has one huge benefit that I’ll get to later on.

And this is where a divider takes place: Creating a grid with Tailwind is easy, and breakpoints are easy; as a matter of fact, margins and paddings are easy. But CSS is so much more nowadays than your good old margins and paddings. And you can use a lot of modern features of CSS right inside of Tailwind, but here is an example that I think of.

It wasn’t that long ago that I created a full (big) website, and I had to write a total of 6 (sizing) media queries in the whole project. Because the web is fluid, we can do so much with so little. But to create a fluid grid in Tailwind, I believe that it gets rather painful on the eyes:

<div class="grid grid-cols-[repeat(auto-fit,minmax(min(250px,100%),1fr))] gap-4">
</div>

In those cases, I wonder if we aren’t just best off with writing some CSS, making it more humanly readable. But I do want to be fair in this article and state that this is subjective to me.

My real point is that when we want to create these kinds of experiences, it is still a matter of learning how CSS works. Tailwind is simple and can be hard, just as CSS is. The question for your “basic website” is not if Tailwind can do it; it probably can.

But! Welcome to the age of AI

If your design skills exist out of “basic Tailwind”, meaning, just your good old breakpoint-based classes for grids, margins, and paddings, I’ve got a newsflash for you. The average “AI chatbot” out there is really good at that as well.

So these are the questions you need to ask yourself:

  • Do you use Tailwind to create basic designs?
  • Do you think it is still sufficient if your competitor is an average Joe in his garage with the prompting machine?
  • Are you a person who creates fresh experiences, or is the “good old bootstrap” style enough?

Do you want to create more evolved experiences where you might need to learn a bit more about CSS in general and maybe run into limitations at some point (more on that later)? When you learned those new CSS skills, was it still worth the trade-offs of an abstraction to an already perfect language?

This is the reason why I always felt that Tailwind shouldn’t be a battle about yes and no… I think utility classes are great, but I believe the truth lies somewhere in the middle, a hybrid way to create unique experiences and make “the boring stuff” go quicker (even though I still freaking love styling buttons!).

Naming conventions, Debugging & copy pasta

This is, in my opinion, the biggest selling point of Tailwind for companies. There is one way to write classnames, and that is final; no need to discuss naming conventions, property sort orders in CSS, and all that stuff. I’ll leave it at that, but it’s a really important thing.

I don’t believe that copy-pasting is the sole benefit of Tailwind because it’s also the case in CSS. You can easily copy and paste stuff without having an idea of what is going on. But when it comes to debugging, I always found it hard to read every single class declaration in my DevTools instead of a good, nicely written CSS with multiple properties and values.

You are missing out, but maybe that’s ok

It’s not a secret that I love writing CSS, and I like to be modern, pushing boundaries, trying progressive enhancements, creating smart systems, and this is where, for me, the biggest pain point of Tailwind lies.

Features such as @starting-style, advanced color functions, ::details-content, scroll-driven animations, interpolate-size, view transitions, customizable selects, and missing out on trigonometric functions are for me a deal breaker, as I think those can help us reduce dependencies, add progressive enhancements, and create more beautiful experiences. These things can push boundaries in creativity. Note that some of these things are possible, but they really become bloated.

But that’s not all, with the new attribute capabilities in Chromium, new container queries, carousels, CSS Functions and CSS conditionals, etc, there are a lot of new things that we can do, there are also a bunch of new pseudo-elements for some of these features, and I know there might be a way for Tailwind to handle this somewhere in the future, I just feel ike it is being bolted on and maybe, it’s coming into that phase where it’s time to let go?

I’ve been in this industry for quite some time, I’ve used Bootstrap in the past, and it was also one of those things I had to let go after a while, as CSS just got a lot better. That being said, people still use Bootstrap as well, and I am not going to judge any of them. If it works for you, by all means…

I think it is purely up to you… Do you want to evolve with the language or stick to the abstraction? Maybe CSS just isn’t your thing and you want to get things styled. That is a choice that you have to make, but you already know that this is the reason why…

It isn’t for me, and that’s ok as well

I want to push the web forward, I want to push projects forward, and I love seeing the structure of my HTML clearly, as it helps me to create accessible experiences. I like to create a multibrand setup with smartly placed custom properties that do more than just color changes. I’m not afraid to use progressive enhancements, I love to know what is possible and learn the language to the best of my capabilities.

So no, it isn’t for me. Even if I knew all these classnames by heart, I’d probably still lose time instead of gaining it, because I love tinkering. I don’t like “good enough” or “close enough”. The world is evolving with AI experiences, and I want to evolve UI experiences as well, think about performance by removing dependencies, because a lot of countries with shitty internet connections are economically booming, and every bit of performance helps.

Is knowing CSS way more beneficial than just knowing Tailwind? Yes, of course, that is a no-brainer. An <insert JS framework here> developer who has a strong foundational skill in vanilla JavaScript will also have an extra edge. Knowing the foundations is so important, probably even more so in this AI era, and also, a lot of fun.

So, should you Tailwind or not

It’s your choice. I think I’ve shown the downsides clearly here without neglecting the benefits. A colleague of mine also pointed out that NativeWind might be a selling point if you want to create both desktop and mobile applications (which often use simpler design patterns).

In most cases, Tailwind will be enough, and it might just be the thing you need; And maybe it’s me, I like to go beyond “just enough”. It all depends on the direction you want to go in your “visual/UI programming” journey. When Tailwind launched, CSS had some missing features that made utility-first make sense, but let me be the one to tell you, in 2025, CSS is pretty damn cool.

 in  general , css