Here's the take: if you're reaching for a CSS framework in 2026 out of habit rather than a specific, named requirement, you're probably shipping more code than the problem needs. Not because frameworks got worse — because the platform quietly closed almost every gap they existed to patch.

This isn't "frameworks are bad." Bootstrap, Tailwind, and friends were the right call for most of the last decade, because CSS genuinely couldn't do the things they made easy. That's the part that's changed. Grid systems, component-level breakpoints, conditional styling, specificity control, color theming — these used to require a framework or a preprocessor because CSS itself had no answer. It has answers now, and most teams haven't gone back to check.

What frameworks were actually solving

To make the case fairly, it's worth naming what problem each piece of a typical framework was actually there for — because "just use vanilla CSS" has been bad advice for a decade, and I want to be specific about why it stopped being bad advice rather than just asserting it.

What you reached for