2 min read

What Tailwind CSS Changed About My Styling Workflow

My first impression of Tailwind CSS, from building a card with utilities to learning its setup and editor support.

I first tried Tailwind CSS in 2022. Until then, I was more familiar with CSS frameworks that provided ready-made components such as buttons and cards.

Tailwind took a different approach. Instead of giving me a card component, it provided small utility classes that I could combine in the markup.

The Card Example That Made It Clear

With Bootstrap, a card already has named component classes:

<div class="card">
  <div class="card-body">
    <h2 class="card-title">Card title</h2>
    <p class="card-text">A short description.</p>
  </div>
</div>

With Tailwind, I built the appearance from utilities:

<article class="max-w-sm overflow-hidden rounded-lg shadow-lg">
  <div class="px-6 py-4">
    <h2 class="text-xl font-bold">Card title</h2>
    <p class="mt-2 text-gray-700">A short description.</p>
  </div>
</article>

If I wanted a wider card, different padding, or another border radius, I could change the relevant utility without first creating a new component style. That flexibility was the part I liked most in the first few days.

The Setup Felt Unfamiliar

The initial setup was less simple than adding a CSS file. I had to install npm packages, create configuration, and run a build command. For someone who was not yet comfortable with a terminal, that could feel like a lot before writing the first class.

The documentation and Indonesian tutorials helped me get through it. The Tailwind CSS IntelliSense extension in VS Code also made a noticeable difference. Autocomplete meant I did not need to remember every class or keep switching to the documentation while experimenting.

What Changed in My Workflow

Tailwind made small interface changes feel faster for me. I could adjust spacing, color, size, and responsive behavior near the element I was editing. It also gave me a consistent set of values instead of asking me to invent a new number each time.

The trade-off is visible in the markup: a complex element can collect many classes. Repeating a long list everywhere is still duplication, so reusable interface patterns belong in components. Plain CSS can also remain clearer for complex selectors or a very small page that does not need a build process.

Those are limits I understand more clearly now. My first impression was much simpler: once the setup worked, building and changing a custom interface felt comfortable, and I wondered why I had not tried the utility-first approach earlier.

References