In 2026, we have Tailwind, UnoCSS, Panda CSS, and AI tools that can generate entire component libraries in seconds. Yet I still reach for style.css and write selectors by hand on many projects.
The Control Illusion
Frameworks give us speed and consistency, but they also impose structure. Vanilla CSS gives me total control over specificity, cascade layers, and custom properties. When I need a truly bespoke interaction — like a fluid typography scale that respects user font size preferences or a hover effect with perfect timing — vanilla is often faster to iterate on than fighting a utility class system.
“Tools don't make the carpenter; they reveal the carpenter's intent.”
Performance Wins
Modern CSS (especially with cascade layers, container queries, and @scope) is incredibly performant. When I write vanilla, I know exactly what ships to the browser — no unused classes, no runtime overhead from CSS-in-JS.
- Zero runtime cost
- Full control over critical CSS extraction
- Better tree-shaking when combined with modern bundlers
Joy & Craft
Writing CSS by hand feels like drawing with a pen instead of using auto-complete. It forces me to think deeply about the visual language I'm creating. The moment I write transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1) and see the exact spring I wanted — that's the joy.
Frameworks are tools. Vanilla CSS is a craft. I use both, but I never abandon the craft.