Skip to content

Which CSS Approach? Explained

Answer a few questions about how much of a design system you want, whether styles depend on runtime values, what build step you can accept, and how you want styles scoped to find the right styling approach: Tailwind, CSS Modules, CSS-in-JS, Sass, or plain CSS.

Every CSS approach is a different answer to three questions: where the styles live (markup, separate files, or JS), when they are computed (build time or runtime), and how they are scoped (globally or per component). Pick the approach whose answers match your project. The questions below turn that match into a recommendation, ranked against the alternatives.

Decision guide · 5 options

The options

Tailwind CSS

Utility classes composed directly in the markup.

Teams that want a ready-made design system and fast UI iteration without writing custom CSS files for each component.

CSS Modules

Per-component CSS files, auto-scoped by the bundler.

Component-driven apps that already run a bundler and want classical CSS authoring with guaranteed name scoping.

CSS-in-JS (styled-components / emotion)

Styles written in JS that read runtime values and props.

Highly dynamic UIs whose styles depend on theme, props, or state computed at render time, in a component tree.

Sass / SCSS

A preprocessor adding variables, nesting, and mixins to CSS.

Design systems and large stylesheets that outgrow plain CSS but want a familiar, file-based authoring model with a compile step.

Plain CSS

Global .css stylesheets, no tooling required.

Small sites, prototypes, or teams that want zero build step and full manual control of the cascade and names.

Which one fits you?

Answer a few questions to get a recommendation.

Question 1 of 4

How important is a ready-made design system and fast utility composition?