I don't recommend Tailwind CSS
Tailwind CSS polarizes frontend developers: some see its utility-first classes as an elegant way to tame large, messy stylesheets and make components self-contained and easy to reuse across big teams. Critics argue it bloats markup, obscures semantics, weakens the separation of structure and design, and ultimately just re-abstracts CSS while still requiring you to understand the underlying language. Many conclude that the “right” choice depends heavily on context — project size, team skills, and tooling — with alternatives like modern vanilla CSS, CSS Modules, BEM, or UI libraries often preferred for long-term maintainability.
Overall Tone
- Discussion is highly polarized and repetitive of past Tailwind debates; many call it bikeshedding.
- Several note Tailwind’s continued popularity as evidence it solves real problems; others see its spread as a sign of weak frontend leadership or “slop.”
Perceived Benefits of Tailwind
- Speeds up implementation, especially for devs who don’t want to design a CSS architecture or naming scheme.
- Utility classes make components/pages self‑contained; changes are less likely to cause cascade regressions elsewhere.
- Consistent design system can be centralized in Tailwind config (colors, spacing, radii, dark mode, etc.), then reused via utilities.
- Works well in large teams and codebases by avoiding divergent BEM conventions and CSS “spaghetti.”
- Easy to copy/paste elements between projects and have them look identical.
- Autocomplete, IDE tooling, and AI assistance make the class names easy to remember and apply.
Main Criticisms
- Markup becomes noisy and hard to read; class attributes encode a mini language instead of using semantic classes.
- Breaks or blurs “structure vs style” separation; feels like going back to inline styles.
- Requires learning Tailwind’s vocabulary in addition to CSS; experienced CSS devs report it slows them down.
- Cascade/priority issues (e.g., conflicting utilities) undermine “local reasoning,” leading to add‑ons like tailwind‑merge.
- Use of
@applyis contentious: some see it as necessary for sanity, others say it defeats Tailwind’s purpose. - Encourages ad‑hoc one‑off values (
p-[13px], mixed color scales), so consistency still depends on developer discipline.
CSS, Components, and Alternatives
- Several argue CSS itself (and HTML’s model) is the root problem; Tailwind is one pragmatic coping mechanism among many.
- Others prefer modern CSS with variables, nesting, scoped styles, CSS Modules, or BEM, often combined with component frameworks.
- Some split responsibilities: CSS or design systems for tokens and semantics; Tailwind‑style utilities only for layout/typography.
- A few note that with LLMs/agents generating CSS, Tailwind’s main advantage (fast hand authoring) may matter less over time.
Context and “Right Tool” View
- Many conclude suitability is context‑dependent: good for large teams, prototypes, and utility‑heavy UIs; less compelling for small, well‑designed, component‑scoped CSS codebases.