CSS in 2026 is the best version of itself it has ever been. Most of the workarounds we accumulated through the 2010s — the SCSS variables, the PostCSS plugins, the CSS-in-JS libraries, the utility-class abstractions — have native equivalents now. The interesting question isn't "what's new" but "what should you stop reaching for tools to do."
What we stopped using
SCSS variables
Native CSS custom properties have been usable for years. In 2026 they're strictly better than Sass variables for almost everything — runtime updatable, scoped, debuggable in the browser. We still use Sass on legacy codebases, but new projects don't need it.
PostCSS plugins for nesting and modern colour
Native nesting is universal. oklch(), color-mix(), and relative color syntax cover the cases that needed postcss-color-function. The build pipeline gets shorter.
CSS-in-JS for visual styling
The runtime cost of styled-components, emotion, and friends never went down. The build-time alternatives (Vanilla Extract, Linaria) survived and are pleasant, but native CSS is now expressive enough that "I need JS to style this" is rarely true. Hover states, focus states, dark mode, container queries — all native, all without a runtime.
Utility-only frameworks for everything
Tailwind and its kin are still good tools. We use Tailwind on most client work. But the pattern of "every component is a thousand utility classes" doesn't scale aesthetically or maintainably. The 2026 approach is utilities for layout and spacing, semantic CSS for the component-specific bits, both in the same file.
What we kept
A design token system
The exact tooling matters less than the discipline. Whether the tokens live in Style Dictionary, in Tailwind's config, or in a hand-written set of CSS custom properties, every team that ships consistent UI has tokens.
A reset
Modern browsers agree more than they used to. They still don't agree completely. A small reset (or Tailwind's preflight) at the top of the cascade saves a category of bugs that we still see.
Class-based naming
BEM, semantic class names, utility classes — any of these are fine. What still doesn't work is "no convention." A new contributor to a codebase needs to be able to write a class name and have a reasonable expectation of what it should look like.
The features we use most in 2026
Container queries
The single biggest practical win of the last few years. Components style themselves based on their container, not the viewport. The mental model of "this card looks like X when it's in a sidebar and like Y when it's in a grid" finally has a native primitive.
Cascade layers
Specificity wars are now solvable. @layer reset, framework, custom; at the top of your stylesheet imposes a deterministic order that's easier to reason about than !important ever was.
:has()
The parent selector we waited 20 years for. Real, supported, immensely useful for "style this thing based on what it contains."
Native nesting
Reads like Sass, works without a build step. The biggest quality-of-life improvement to writing CSS in years.
View Transitions API
Cross-document and within-document. Smooth page transitions are now achievable without a framework. We use this on every content site we ship.
The features we don't reach for
- Subgrid. Useful when you need it. Most layouts don't.
- Anchor positioning. Powerful but still rough at the edges. We mostly use floating-ui until anchor positioning stabilises in tooling.
- Scroll-driven animations. Cool demos. Few production use cases worth the complexity.
The 2026 stack we recommend
- A small reset (about 30 lines).
- Design tokens as CSS custom properties.
- Cascade layers to keep the order honest.
- Tailwind (or an equivalent utility set) for layout, spacing, and quick states.
- Semantic component CSS for everything else, using nesting and
:has()freely. - Container queries where components need to be context-aware.
Bottom line
CSS is no longer the language people complain about. It is the language people now reach for first, instead of last. The tools that filled the gaps for a decade are mostly optional. If you haven't looked at native CSS seriously since 2020, you're carrying tooling weight that doesn't earn its keep anymore.