Just Fucking Use Tailwind
Your CSS is a disaster.
You've been writing CSS for how long now? And you're still sitting there, bikeshedding over class names, debating BEM vs OOCSS, and maintaining a sprawling mess of stylesheets that nobody dares to touch.
/* TODO: refactor this later */
/* FIXME: why does this break on mobile??? */
/* NOTE: copied from old project, don't touch */
.button-primary-large-disabled-hover-active {
/* 47 lines of CSS */
}
You've got 15 different button styles, 8 versions of your navbar, and a "design system" that's really just styles-v2-final-REAL-FINAL.css. Half of it has !important flags. The other half uses magic numbers that nobody understands.
This is the hell you chose. And for what? "Separation of concerns"? Give me a break.
What the fuck is Tailwind?
Tailwind CSS is a utility-first framework that lets you build modern interfaces without ever leaving your HTML. No more context switching. No more naming things. Just rapid development.
npm install -D tailwindcss
npx tailwindcss init
And here's what you get:
<button className="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors">
Click me
</button>
Beautiful. Responsive. Fast. It just fucking works.
Why it's fucking great
No naming hell
Remember spending 20 minutes naming a div? navigation-container-wrapper-inner? Those days are over. With Tailwind, you apply utilities directly:
<div className="flex items-center justify-between">
Done. Move on with your life.
Responsive by default
Every utility has responsive variants built-in:
<div className="text-sm md:text-base lg:text-lg">
Scales perfectly
</div>
No media query management. No breakpoint confusion. Just add the prefix and it works.
Dark mode in seconds
Stop wrestling with CSS variables and theme contexts:
<div className="bg-white dark:bg-gray-900 text-black dark:text-white">
Auto dark mode
</div>
Add dark: prefix. Done. That's it.
Tiny production builds
Tailwind removes unused styles automatically. Your final CSS? Usually under 10KB. Meanwhile, your Bootstrap bundle is still loading.
Design consistency without thinking
You can't use random colors or spacing values. The design system is built-in:
- Spacing: 0, 1, 2, 4, 8, 16... (0, 0.25rem, 0.5rem, 1rem...)
- Colors: Carefully curated color palettes
- Typography: Consistent font scales
Every developer on your team will use the same values. No more margin-top: 13px.
Plays nice with components
Works beautifully with React, Vue, Svelte - whatever:
function Button({ children, variant = 'primary' }) {
const baseClasses = 'px-4 py-2 rounded-lg font-medium transition-colors'
const variantClasses = {
primary: 'bg-blue-500 hover:bg-blue-600 text-white',
secondary: 'bg-gray-200 hover:bg-gray-300 text-gray-900'
}
return (
<button className={`${baseClasses} ${variantClasses[variant]}`}>
{children}
</button>
)
}
Amazing developer experience
- IntelliSense autocomplete for every utility
- Instant feedback in your editor
- Easy to copy-paste examples
- Massive ecosystem of plugins
AI loves Tailwind
Every AI coding assistant knows Tailwind intimately. Ask for a component and get production-ready Tailwind markup instantly. Try asking for CSS-in-JS - you'll get inconsistent garbage.
The ecosystem is fucking massive
Official Plugins:
- Forms - beautiful form elements
- Typography - perfect blog content styling
- Container Queries - modern responsive patterns
- Aspect Ratio - video embeds that don't suck
UI Component Libraries:
- Headless UI - accessible components
- DaisyUI - pre-built component classes
- shadcn/ui - copy-paste component architecture
- Flowbite - comprehensive component system
Tools:
- Tailwind Play - browser playground
- Tailwind Prettier - auto-format your classes
- Twin.macro - Tailwind + styled-components
"But wait..."
"Inline styles are bad practice!"
Are they? Or did you just read that in a blog post from 2012? Inline style attributes are bad because they:
- Can't use media queries
- Can't use pseudo-selectors
- Override everything with specificity
Tailwind utility classes have none of these problems. It's not inline styles. It's a design system.
"My HTML is bloated!"
Cool, so you'd rather have bloated CSS files? At least HTML is gzipped efficiently. Plus, in modern frameworks, you're creating reusable components anyway.
"I can't read all those class names!"
You can't read flex items-center justify-between? But you can read .c-navigation__wrapper--inner-container-flex? Please.
After a week with Tailwind, you'll read utilities faster than semantic class names. mt-4 vs margin-top-medium - which is clearer?
"I need full customization!"
Tailwind is completely customizable. Edit tailwind.config.js:
module.exports = {
theme: {
extend: {
colors: {
brand: {
primary: '#FF6B6B',
secondary: '#4ECDC4'
}
},
fontFamily: {
display: ['Inter', 'sans-serif']
}
}
}
}
Now use bg-brand-primary or font-display. Your custom design system, Tailwind's DX.
When should you use Tailwind?
Use Tailwind if you:
- Build web applications (React, Vue, Next.js, etc.)
- Want to move fast without sacrificing quality
- Work in a team that needs design consistency
- Care about bundle size and performance
- Prefer co-locating styles with markup
Don't use Tailwind if you:
- Maintain a legacy site with existing CSS
- Have extremely custom, one-off designs with no patterns
- Actually enjoy writing vanilla CSS (rare, but okay)
Real talk
Tailwind isn't perfect. There's a learning curve. Your HTML will look different. Some developers will complain.
But here's what matters: you'll ship faster. Your styles will be more consistent. Your bundle will be smaller. Your team will stop arguing about CSS architecture.
I've built dozens of projects with Tailwind. I've seen teams cut development time by 30%. I've watched designers and developers work together seamlessly because they speak the same language.
Stop overthinking. Start building.
You don't need another architecture debate. You don't need to research CSS methodologies for the hundredth time. You don't need to write one more blog post about your custom CSS setup.
You need to build your product.
Just fucking use Tailwind.
Install it. Try it for one component. I guarantee you'll be refactoring your entire codebase by tomorrow.
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
Now go build something.