CSS's problems are Tailwind's problems
Why People Like Tailwind
- Co-locates styles with markup, avoiding “file hopping” between HTML/JSX and CSS; many say this makes debugging and iteration much faster.
- Removes class‑naming overhead: you don’t invent semantic class names for every element, you just describe the layout/spacing/color directly.
- Ships a strong design system by default: spacing scale, colors, radii, typography. The required config (or defaults) gives teams shared tokens and reduces design drift.
- Atomic utilities make it obvious at a glance what styles a component has; no hunting through multiple stylesheets or fighting implicit inheritance.
- Especially valued in teams with varying CSS skill: it constrains people into a more consistent baseline.
- Works well when wrapped in components: the ugly class soup is hidden behind
<Button>or variants.
Main Criticisms
- Long class lists (“class spam”) are seen as noisy, hard to scan, and painful to maintain, especially when inheriting someone else’s Tailwind-heavy codebase.
- Some argue Tailwind reintroduces inline‑style problems: duplication, lack of semantic hooks (e.g.
.primary-btn), and difficulty changing a pattern globally. - Mixing Tailwind with other styling systems can make it harder to trace where styles come from.
- Critics say it discourages learning CSS well and replaces it with another abstraction layer; supporters counter that Tailwind is just CSS with different names.
- Some dislike that many Tailwind workflows still lean heavily on media queries and don’t foreground newer CSS features like
clamp().
CSS, CSS‑in‑JS, and Alternatives
- Several commenters prefer CSS Modules, BEM, or “plain” component-scoped CSS as clearer and more semantic.
- CSS‑in‑JS is widely criticized; one camp argues libraries like vanilla‑extract (no runtime, extracted CSS) or PandaCSS give better encapsulation than Tailwind for React-style components. Others find writing styles in JS object syntax miserable.
- Tailwind’s big unique win, many agree, is forcing or strongly encouraging centralized design tokens; SCSS could do this but didn’t make it mandatory.
Tooling, AI, and DX
- Tailwind editor plugins (LSP, autocomplete, diagnostics) mitigate misspellings and overlapping utilities.
- Several people say LLMs are particularly good at generating Tailwind UIs, which reinforces its popularity; others report better results asking AI to output clean vanilla CSS instead.
- There is disagreement over performance: some cite atomic CSS wins and compression, others point to large unused CSS bundles and heavier DevTools experiences.