Back to all blogs
#tailwind
#css
#webdev
#frontend
June 9, 2025
7 min read
A blog post byThereallo

Why I still Choose Tailwind CSS in 2025

Tailwind CSS is still the best choice for building modern web interfaces.

People hate Tailwind CSS. I get it.
  • "Your HTML looks ugly."
  • "It's just inline styles with extra steps."
  • "CSS-in-JS is better."
  • "You're not learning real CSS."

I've heard them all. I used to think the same thing. When I first saw this:
tsx
const Button = () => {
  return (
    <button className="bg-blue-500 text-white px-4 py-2 rounded">
      Click me
    </button>
  )
}
I cringed. It felt wrong. Dirty. Like I was breaking every CSS best practice I'd learned.
But then I built a few projects with it.
The first thing I noticed was how fast I could build interfaces. No more switching between HTML and CSS files. No more coming up with class names like .branding-primary-submit-button-very-large-with-shadow-on-hover. No more specificity wars.
I could see exactly what styles were applied just by reading the HTML. If something looked wrong, I could fix it immediately. No hunting through stylesheets. My development speed doubled. Maybe tripled.
When you're building products, speed matters. While other developers were still setting up their CSS architecture, I was shipping features. The criticism about "ugly HTML" started to feel irrelevant when I was deploying working interfaces in hours instead of days.
The learning curve exists, sure. But once you memorize the common utilities, you're not thinking about CSS syntax anymore. You're thinking about design. flex items-center justify-between becomes as natural as writing a for loop. The cognitive load shifts from CSS implementation details to actual design decisions.

Before Tailwind, I went all-in on CSS-in-JS. Styled-components, Emotion, you name it. The promise was compelling: styles co-located with components, dynamic styling, TypeScript support. The reality was different.
Runtime performance was awful. My JavaScript bundles were massive. Server-side rendering was a nightmare. Hot reloading was slow. The tooling was fragile. I spent more time fighting the CSS-in-JS runtime than actually styling components.
CSS frameworks have tried every abstraction level. Component frameworks like Bootstrap give you pre-built components. CSS-in-JS gives you component-scoped styles. CSS modules give you file-scoped styles. Tailwind gives you design tokens as classes.
I found that component-level abstractions break down. Every project needs custom components. Pre-built components look generic. You end up overriding half the styles anyway. Even with modern solutions like shadcn/ui, which takes a smarter approach by giving you the actual component code instead of a black-box library, you still need a solid styling foundation underneath.
That's where Tailwind shines. It provides the styling primitives that make component libraries like shadcn/ui possible. When shadcn/ui hands you a Button component, it's built with Tailwind utilities. You can read exactly how it works. You can modify any part of it. The combination is powerful: shadcn/ui for complex component logic and accessibility, Tailwind for the styling layer.
Utility classes are the right level of abstraction. They're reusable without being opinionated. They compose well. They're predictable. flex items-center justify-between works everywhere. It doesn't care about your component structure or design system. It just centers and spaces things.
Tailwind gave me the co-location benefits of CSS-in-JS without the runtime cost. Styles are just CSS classes. No JavaScript execution. No style injection. No hydration mismatches. The ecosystem around Tailwind reflects this philosophy. Tools like Headless UI provide unstyled, accessible components. Heroicons gives you optimized SVG icons. Tailwind Plus offers premium templates. When you choose Tailwind, you're choosing an entire toolchain that works together.

Tailwind generates only the CSS you use. My final stylesheets are tiny. Most projects ship less than 10KB of CSS. Compare that to component frameworks. Bootstrap's full CSS is 200KB+. Even if you tree-shake, you're shipping styles you don't need.
The JIT compiler makes development fast. Changes compile in milliseconds. The build step is barely noticeable. I've shipped production apps with 4KB of CSS. Try doing that with any other framework.
Tailwind v4 changed everything. The team rebuilt it from the ground up with modern CSS features. CSS custom properties replaced JavaScript variables. Cascade layers solved specificity issues. The new engine is stupidly fast.
Text shadows finally arrived in v4.1. After years of requests, they're here. text-shadow-lg is simpler than writing text-shadow: 0 4px 8px rgba(0, 0, 0, 0.25). The mask utilities are incredible. Creating gradient masks used to require complex CSS. Now it's just mask-t-from-50% mask-b-to-0%.
Container queries work out of the box. @lg:grid-cols-2 adapts to the container size, not the viewport. This is what responsive design should be. The mobile-first breakpoint system forces you to think mobile-first. md:grid-cols-2 applies on medium screens and up. The default is mobile.
This approach makes responsive design natural. Your designs work on phones by default. Everything else is progressive enhancement. I used to build desktop-first, then struggle to make things work on mobile. With Tailwind, mobile is the starting point.
v4.1 added pointer variants for touch vs mouse interaction. Safe alignment utilities prevent content from disappearing when centered. Better browser compatibility means older Safari versions don't break. These aren't flashy features. They're quality-of-life improvements that make development smoother.

I don't choose tools because they're cool. I choose them because they help me ship better products faster. Tailwind CSS does that. After years of using it, I'm more productive than ever. My interfaces are more consistent. My CSS bundles are smaller.
Tailwind solves problems I actually have. Fast prototyping. Consistent spacing and colors. Mobile-first responsive design. Small CSS bundles. No naming conflicts. Easy maintenance. These aren't theoretical problems. They're day-to-day developer pain points.
Other solutions exist for each problem. But Tailwind solves all of them with one tool. The cognitive load is lower. The learning curve is shorter. When I need custom CSS, I still write it. But 95% of my styling is utility classes. That 95% is faster, more consistent, and less buggy.
This might be controversial, but I don't miss writing CSS. I don't miss naming classes. I don't miss organizing stylesheets. I don't miss specificity bugs. CSS is good at what it does. But writing it by hand isn't fun. It's tedious and error-prone.
Tailwind lets me focus on design decisions instead of CSS syntax. I think about spacing, colors, and layout. Not about vendor prefixes and browser quirks. The team behind it matters too. Adam Wathan and the Tailwind team ship consistently. They listen to feedback. They iterate quickly. They care about developer experience.
The v4 rewrite was ambitious. They rebuilt everything around modern CSS. They could have played it safe. Instead, they bet on the future. The team is thoughtful about additions. Text shadows took years because they wanted to get them right. When features ship, they're well-designed. This isn't a team that will abandon the project next year. They're in it for the long haul.

Tailwind isn't perfect. The HTML can get verbose. Complex layouts require many classes. The learning curve exists. Some designs don't fit the utility model well. Highly custom animations or complex graphics might need regular CSS (Or Framer Motion!!!). The file size can grow if you're not careful. Unused purging helps, but you need to configure it properly.
But perfect is the enemy of good. Tailwind is good enough to build great interfaces quickly. The tradeoffs are worth it.
Tailwind is doubling down on what works. More utility classes. Better developer experience. Closer integration with the platform. The team is building for the long term. They're not chasing trends. They're solving real problems with platform-native solutions.
In 2025, with v4 mature and v4.1 shipping improvements, Tailwind is the best tool for the job. While others debate methodology, I'm building products.
That's why I still choose Tailwind CSS.