Styling
Tailwind vs plain CSS vs CSS-in-JS
How you style a web app in 2026 comes down to three philosophies: utility classes in your markup (Tailwind), the platform's own styling with modern CSS, or writing styles in JavaScript. The choice mostly comes down to how AI-generated your codebase is and whether you're shipping a runtime or a static bundle.
Use Tailwind for almost everything — it's the default AI models write best, and modern plain CSS is the right call only when you want zero build tooling or fully own your design system.
Best for Vibe coders and anyone shipping fast with an AI agent — the default choice in 2026
Strengths
- Every AI model (Claude, GPT, etc.) writes excellent Tailwind because the training data is saturated with it — you get correct, consistent output on the first try
- Styles live in the markup, so an AI editing a component never has to hunt across files or worry about breaking a shared class elsewhere
- v4 dropped the JS config for a CSS-first setup and a much faster Rust-based engine; the Oxide build is genuinely quick
- Massive ecosystem — shadcn/ui, Tailwind UI, Headless UI, and countless component libraries all speak it natively
Watch out
- Long class strings make JSX noisy and hard to read; you lean on editor tooling and prettier-plugin-tailwindcss to stay sane
- It's a design-system straitjacket — great when you want the guardrails, frustrating when you need something genuinely custom
- You must know real CSS underneath. When a layout breaks, the utility names don't teach you why — you still need to understand flexbox, grid, and the cascade
Best for Teams that want to own their design system, minimize dependencies, or lean on the platform
Strengths
- CSS in 2026 is powerful natively: nesting, container queries, :has(), cascade layers, and custom properties cover most of what preprocessors and frameworks used to solve
- Zero build step and zero dependency to break, upgrade, or get abandoned — it will work identically in ten years
- Smallest possible payload when you're disciplined; no framework CSS to purge
- Full control and real separation of concerns — semantic class names read cleanly and your markup stays uncluttered
Watch out
- AI agents are noticeably worse at maintaining hand-rolled CSS — they'll duplicate rules, orphan selectors, and struggle to track what a class already does across files
- Naming and organization discipline (BEM or similar) is on you; without it, large codebases rot into specificity wars and dead styles
- Slower to move for a solo builder — you write more, and you re-solve problems Tailwind gives you for free
Best for Existing React apps already invested in it, or cases needing heavy runtime-dynamic styling
Strengths
- Styles are colocated and scoped to the component with no naming collisions, and you get full JS access for dynamic values
- Type-safe theming and props-driven styles feel natural in a component-heavy React codebase
- Mature libraries (styled-components, Emotion) with large existing codebases and good DX for the teams already on them
Watch out
- Runtime CSS-in-JS collides badly with React Server Components — styled-components is effectively in maintenance mode and the ecosystem has moved on
- For new projects reach for a zero-runtime option like Panda CSS or vanilla-extract instead of the classic runtime libraries, whose momentum is dead
- Runtime style injection costs performance and hydration complexity, and models default to Tailwind anyway — it's the least AI-friendly choice for greenfield work
The verdict
Pick Tailwind CSS if you're vibe coding or shipping fast — it's the 2026 default, your AI writes it flawlessly, and the ecosystem is built around it. Pick modern plain CSS if you want to own your design system, hate build tooling, or your styling needs are simple enough that the platform's native features carry you — just know your AI agent will maintain it less reliably. Pick CSS-in-JS only if you're already in a React codebase committed to it; for anything new, reach for a zero-runtime option like Panda CSS or vanilla-extract instead of the classic runtime libraries, which are fading. For most people reading this: use Tailwind, and actually learn the CSS underneath it.