madealone
← writing3 min

Why I still write CSS by hand

Frameworks come and go. The cascade does not. A short, practical defense of writing styles the slow way — even in 2026, even with seven products to maintain.

craftcss

Every six months a new tool promises to free me from CSS. I keep writing it by hand anyway. This isn't nostalgia and it isn't contrarianism — it's a pragmatic preference earned by shipping a lot of products with very little time.

The cascade is a feature

The industry spent a decade calling the cascade a bug. We invented BEM, then CSS-in-JS, then atomic frameworks — each, in part, an attempt to escape the implicit nature of inherited style.

But cascading is the only reason a single token can sweep through ten components. It's why hover states feel coherent across a whole page. It's why my landing pages read as something made by one person, instead of a Frankenstein of vendor parts.

When I fight the cascade, I write more code. When I lean into it, I write less. After three years and seven products, that ratio has never once flipped.

Hand-written CSS is faster to delete

Code dies far more often than it ships, and deletability is an underrated virtue. The CSS I wrote two years ago for a feature that didn't survive is twelve lines I can find with grep and remove in one commit. The styles inlined into a component via a styling library are forty lines tangled with logic — and they'll outlive their usefulness because nobody's brave enough to touch them.

Tip

Optimize for the day you delete something, not the day you write it. Plain CSS in a plain file is almost embarrassingly easy to remove, and "easy to remove" compounds across a codebase the same way "easy to add" does — just in the other direction.

The performance argument nobody mentions

Plain CSS is small, parsed once, and cached effectively forever. Most styling libraries ship JavaScript that recomputes styles per render. On a mid-range phone, on café Wi-Fi, in another country, the gap between "instant" and "noticeable" is built out of exactly this overhead.

1
network round-trip to load a stylesheet
0
JS needed to apply it
~0ms
runtime style cost on re-render
1st
impression you only get to make once

I'm not chasing benchmark numbers. I'm chasing the feeling someone gets the first time one of my pages opens. That feeling is assembled out of milliseconds, and I refuse to spend them on a framework's bookkeeping.

When I do reach for a framework

I'm not a purist. I use Tailwind utilities for the mechanical parts of CSS, and I write real stylesheets for the parts with a point of view. The split has stayed stable across every project:

The real reason

The honest reason I still write CSS by hand is that I like it. The cascade is a small puzzle, and solving it well is one of the quiet joys of this job. I won't apologize for that, and I won't give it up because someone benchmarked an alternative.

Some tools earn their place by being faster. Some earn it by being more pleasant. CSS, for me, has always been the second kind.