Morning Edition LIVE
Vol. I · No. 1
Est.
MMXXVI

The A.I. Beat

Dispatches from the frontier of machine intelligence
Three
Dollars
← Front page Code May 17, 2026 · 5 min read
Code

Julia Evans is learning to love CSS again, and ditching Tailwind to do it

After years with utility-first frameworks, one developer is rediscovering what CSS can actually do.
Julia Evans is learning to love CSS again, and ditching Tailwind to do it

Julia Evans is moving away from Tailwind CSS. Not because Tailwind is bad, but because she wants to actually understand CSS.

In a post this week, Evans explains that she’s spent the last decade learning to “really love and respect CSS as a technology.” When people say “CSS is hard,” her response has been to get better at CSS rather than reach for abstractions that let her avoid it.

The result? She learned that many classic CSS frustrations, the ones that spawned a thousand “centering is impossible” memes, were solved years ago. Modern CSS has answers. But if you’ve been writing flex justify-center items-center for the past five years, you might not know what those answers actually are.

Why leave Tailwind

Evans isn’t arguing Tailwind is wrong. She’s saying that for her projects, understanding how to structure CSS matters more than the velocity Tailwind provides. When you use utility classes for everything, you’re abstracting away the decisions about how styles should be organized. That’s fine if you know what you’re abstracting. Less fine if you don’t.

The post walks through her process of learning to structure CSS properly. Not just writing selectors, but thinking about specificity, cascade, and when to use different organizational patterns. The kind of thing that sounds boring until you’re three stylesheets deep into a project and nothing overrides the way you expect.

What CSS can do now

Part of what makes this possible is that CSS itself has gotten much better. Flexbox and Grid solved layout problems that used to require hacks or frameworks. Container queries, :has(), and other recent additions handle responsive design patterns that once needed JavaScript. CSS nesting is now native.

If you learned CSS in 2010 and then jumped straight to Tailwind in 2018, you might have missed all of this. The language changed while you weren’t looking.

Evans points out that “centering” isn’t even one thing. There’s centering text in a button, centering a modal on a page, centering content in a responsive layout. These have different solutions because they’re actually different problems. Understanding that is harder than memorizing utility classes, but it makes you better at building interfaces.

The utility-first debate

This isn’t new territory. Developers have been arguing about CSS methodologies since BEM was a thing. Tailwind vs. semantic CSS is just the latest version of that argument.

But Evans’ approach is worth noting because she’s not being dogmatic. She’s saying “I want to understand this technology better, so I’m removing the abstraction layer for a while.” That’s different from “Tailwind is bad and no one should use it.”

If you’ve been using Tailwind and it works for you, keep using it. But if you’ve noticed that you can’t quite explain why your styles work when they work or break when they break, maybe it’s worth spending some time with vanilla CSS. Write some media queries by hand. Figure out when to use rem vs. em. Learn what cascade layers actually do.

The tools will still be there when you get back. But you’ll understand what they’re doing for you.

coding developer tools