Tailwind CSS vs Plain CSS
Which should you use for your next project? A practical comparison with code examples.
Comparison Table
| Tailwind CSS | Plain CSS | |
|---|---|---|
| Writing speed | Fast — classes applied inline | Slower — context switches to .css file |
| Bundle size (prod) | 5–15 KB (unused classes purged) | Grows as project scales |
| Naming things | Not needed — no class names to invent | Required — naming is hard |
| Design consistency | Built-in scale (spacing, colors) | Manual — must enforce system yourself |
| Responsive design | Easy with sm: md: lg: prefixes | Requires @media queries |
| Custom design | Arbitrary values: w-[317px] | Full control always |
| Learning curve | Medium — must learn utility classes | Low — already CSS |
| Framework fit | Excellent with React, Next.js, Vue | Works everywhere |
| CSS specificity issues | Rare — utilities have equal specificity | Common in large codebases |
| Theming / dark mode | Built-in dark: modifier | Custom properties + media queries |
| Animation | Animate utilities, extend in config | Full @keyframes control |
Same Button — Two Approaches
Tailwind CSS
<button class="
px-4 py-2
bg-blue-600 text-white
font-semibold rounded-lg
hover:bg-blue-700
focus:outline-none focus:ring-2
focus:ring-blue-500
transition-colors
">
Submit
</button>Plain CSS
/* button.css */
.btn-primary {
padding: 0.5rem 1rem;
background-color: #2563eb;
color: #fff;
font-weight: 600;
border-radius: 0.5rem;
border: none;
cursor: pointer;
transition: background-color 0.15s;
}
.btn-primary:hover {
background-color: #1d4ed8;
}
.btn-primary:focus {
outline: none;
box-shadow: 0 0 0 2px #3b82f6;
}Use Tailwind when:
- ✓ Building with React, Next.js, Vue, or Astro
- ✓ You want consistent spacing and colors across a team
- ✓ Rapid UI iteration is a priority
- ✓ You want responsive design without media queries
- ✓ You prefer co-locating styles with markup
Use Plain CSS when:
- ✓ No build step available (static HTML pages)
- ✓ You need complex animations or art-directed CSS
- ✓ The project already has a well-maintained CSS codebase
- ✓ You prefer separation of concerns between HTML and styles
- ✓ CSS Modules or CSS-in-JS fit your architecture better
Need to convert existing CSS to Tailwind classes?
Use the CSS to Tailwind Converter →