Why I still reach for vanilla CSS
Every few months someone drops a new CSS framework and the discourse starts up again. Tailwind vs this, utility classes vs that. I’ve tried most of them. I keep coming back to vanilla CSS.
Not because I think frameworks are bad. Tailwind is genuinely good at what it does. But I’ve noticed something about the way I work — when I’m writing plain CSS, I actually understand what I’m building. When I’m stringing utility classes together, I’m configuring something. There’s a difference.
It forces you to think in systems
When you can’t just reach for a pre-built class, you have to make decisions. What’s the spacing scale? What does a “muted” color mean in this project? How do sections relate to each other visually? You end up defining things once, in one place, and reusing them. CSS custom properties make this straightforward.
You build a system. Not a collection of one-offs.
The cascade is actually good
Everyone acts like the cascade is the problem CSS frameworks are solving. I think the cascade is mostly fine if you structure your styles intentionally. Scope things properly, use sensible specificity, and it works with you instead of against you.
Astro makes this even easier — scoped styles per component mean you rarely run into the conflicts people complain about anyway.
Less to learn, less to maintain
Every abstraction has a cost. A framework means documentation to read, updates to track, quirks to learn, and a build step that touches your styles. Vanilla CSS has none of that. It just works in the browser. It’ll work in the browser in ten years.
I’ve inherited enough projects with outdated dependencies to care about this.
It’s not for everything
I’m not saying this is the right call on every project. A large team with a design system and dozens of components? Tailwind or a component library probably makes sense. But for my own projects — a portfolio, a client site, a side build — vanilla CSS is faster to write, easier to debug, and simpler to maintain.
It’s also just more satisfying. I like knowing exactly what’s on the page and why.
That’s really the whole argument.