We Keep Reinventing CSS, but Styling Was Never the Problem

September 17, 2025

A tangled mass of multicolored lines representing different CSS methodologies and features, each labeled with tags such as CSS-IN-JS, CSS MODULES, BEM, :WHERE(), CASCADE LAYERS, and UTILITY-FIRST CSS.

We’ve been building for the web for decades. CSS has had time to grow up, and in many ways, it has. We’ve got scoped styles, design tokens, cascade layers, even utility-first frameworks that promise to eliminate bikeshedding entirely.

And yet, somehow, every new project still begins with a shrug and the same old question:
“So… how are we styling things this time?”

It’s not that we lack options. It’s that every option comes with trade-offs. None of them quite fit.
We keep reinventing CSS as if it’s the root cause.
It isn’t.

Source: We Keep Reinventing CSS, but Styling Was Never the Problem — Den Odell

CSS doesn’t work like most things that software developers have experienced. Concepts like inheritance, the cascade, specificity largely operate on a global scope. All of these may contribute to a complexity that can be hard to manage.

We have developed numerous methodologies like OO-CSS, BEM, and many CSS-in-JS approaches to try and tame this complexity over the last 20 years or so.

But what if CSS isn’t the problem? That’s the question that Dan Odell asks here.

Comments from Mastodon

  1. @conffab.com @macdonst have you checked out @scope? Still waiting on FF to wrap up implementation, but I think it’ll be the game changer we’re all waiting for