Zum Hauptinhalt springen
Warum ich (doch noch) Fan von Tailwind wurde
#Tailwind CSS #Frontend #CSS #Webdesign #Performance

Warum ich (doch noch) Fan von Tailwind wurde

Utility-first CSS im Praxischeck: Von der Skepsis zur Begeisterung

Tailwind CSS spaltet die Frontend-Welt. Für die einen ein Segen, für die anderen ein Stilbruch. Ich gehörte lange zur zweiten Gruppe – bis ich es wirklich ausprobiert habe. Und plötzlich ergab alles Sinn.

💢 Die Skepsis am Anfang

Ich habe mich lange gewehrt. Utility-Klassen mitten im HTML-Code? Für mich als Webdesigner fühlte sich das wie Rückschritt an. Überladene div-Tags, endlose Klassenlisten, Verlust der Übersicht – all das widersprach meinem Verständnis von sauberer Struktur.

Bootstrap war auch nie mein Favorit, da dort zusätzlich viel unnötiger CSS-Ballast mitgeschleppt wird – und die Performance entsprechend leidet. Tailwind? Zunächst für mich ein weiterer Versuch, CSS zu „vereinfachen”, der am Ende mehr Probleme als Lösungen bringt.

Vorher/Nachher: Was mich umgestimmt hat

Lass mich zeigen, was den Unterschied gemacht hat – mit echten Code-Beispielen:

Das alte Ich: BEM + Custom CSS

HTML:

<div class="card">
  <div class="card__header">
    <h2 class="card__title">Produktname</h2>
    <span class="card__badge card__badge--new">Neu</span>
  </div>
  <div class="card__body">
    <p class="card__description">Produktbeschreibung...</p>
    <div class="card__price">
      <span class="card__price--old">99,99€</span>
      <span class="card__price--current">79,99€</span>
    </div>
  </div>
  <div class="card__footer">
    <button class="button button--primary button--large">
      In den Warenkorb
    </button>
  </div>
</div>

CSS (styles.css):

.card {
  background: white;
  border-radius: 8px;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  padding: 24px;
  max-width: 400px;
}

.card__header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 16px;
}

.card__title {
  font-size: 24px;
  font-weight: 700;
  color: #1a202c;
}

.card__badge {
  padding: 4px 12px;
  border-radius: 9999px;
  font-size: 12px;
  font-weight: 600;
}

.card__badge--new {
  background-color: #10b981;
  color: white;
}

.card__body {
  margin-bottom: 16px;
}

.card__description {
  color: #6b7280;
  line-height: 1.5;
}

.card__price {
  display: flex;
  gap: 12px;
  align-items: baseline;
}

.card__price--old {
  color: #9ca3af;
  text-decoration: line-through;
}

.card__price--current {
  font-size: 28px;
  font-weight: 700;
  color: #1a202c;
}

.card__footer {
  margin-top: 16px;
}

.button {
  border: none;
  cursor: pointer;
  font-weight: 600;
  transition: all 0.2s;
}

.button--primary {
  background-color: #3b82f6;
  color: white;
}

.button--primary:hover {
  background-color: #2563eb;
}

.button--large {
  padding: 12px 24px;
  width: 100%;
  border-radius: 8px;
  font-size: 16px;
}

Probleme:

  • 2 Dateien hin und her
  • 80+ Zeilen CSS für eine Komponente
  • Naming-Conventions merken
  • Schwer zu ändern (wo ist die Farbe definiert?)

Das neue Ich: Tailwind CSS

HTML (komplett):

<div class="bg-white rounded-lg shadow-md p-6 max-w-md">
  <div class="flex justify-between items-center mb-4">
    <h2 class="text-2xl font-bold text-gray-900">Produktname</h2>
    <span class="bg-green-500 text-white px-3 py-1 rounded-full text-xs font-semibold">
      Neu
    </span>
  </div>

  <div class="mb-4">
    <p class="text-gray-600 leading-relaxed">Produktbeschreibung...</p>
    <div class="flex gap-3 items-baseline mt-4">
      <span class="text-gray-400 line-through">99,99€</span>
      <span class="text-3xl font-bold text-gray-900">79,99€</span>
    </div>
  </div>

  <button class="w-full bg-blue-600 hover:bg-blue-700 text-white font-semibold py-3 px-6 rounded-lg transition-colors">
    In den Warenkorb
  </button>
</div>

CSS (generiert):

/* Automatisch generiert - nur verwendete Klassen: ~2 KB */
.bg-white { background-color: #fff; }
.rounded-lg { border-radius: 0.5rem; }
.shadow-md { box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1); }
/* ... nur was wirklich genutzt wird */

Vorteile:

  • 1 Datei, alles sichtbar
  • Keine custom CSS-Dateien
  • Sofort verständlich (wenn man Tailwind kennt)
  • Änderungen direkt im HTML
  • Finales CSS: Nur ~2-5 KB

Und dann kam die Wende: Tailwind richtig eingesetzt

Was mich überzeugt hat? Die Kombination aus aktuellen Tailwind-Versionen, intelligentem Build-Tooling und – überraschenderweise – Unterstützung durch KI.

Performance durch Reduktion

Tailwind bringt nur das CSS in den finalen Build, was auch wirklich verwendet wird. Keine generischen Klassenwüsten mehr wie bei Bootstrap – sondern hochoptimiertes, maßgeschneidertes CSS.

Der Performance-Unterschied in Zahlen:

FrameworkInitiale CSS-GrößeGenutzte CSSVerschwendung
Bootstrap 5159 KB~20 KB87%
Tailwind (ohne Purge)3.8 MB~15 KB99.6%
Tailwind (mit Purge)15 KB15 KB0%
Custom CSSVariableVariableOft 40-60%

Real-World Beispiel:

Bei einem mittelgroßen Projekt (50 Seiten, Blog, E-Commerce):

Vorher (Bootstrap + Custom CSS):
├─ bootstrap.min.css: 159 KB
├─ custom.css: 45 KB
└─ Total: 204 KB

Nachher (Tailwind + Purge):
├─ tailwind.min.css: 12 KB
└─ Total: 12 KB

Ersparnis: 94% (-192 KB)

Core Web Vitals Impact:

Lighthouse Score:
Vorher: 87/100
Nachher: 99/100

First Contentful Paint:
Vorher: 1.8s
Nachher: 0.6s (-67%)

Largest Contentful Paint:
Vorher: 2.4s
Nachher: 1.1s (-54%)

Modularität & Wiederverwendbarkeit

Was auf den ersten Blick wie Chaos wirkt, ergibt bald ein konsistentes, modulares System. Tailwind hilft mir, kompakte Komponenten zu bauen, die sich leicht duplizieren und anpassen lassen.

Das Komponenten-Pattern:

Statt endlose Klassen zu wiederholen, nutze ich:

1. @apply in CSS (wenn nötig):

/* components.css */
.btn-primary {
  @apply bg-blue-600 hover:bg-blue-700 text-white font-semibold py-3 px-6 rounded-lg transition-colors;
}

.card {
  @apply bg-white rounded-lg shadow-md p-6;
}

2. Komponenten-Bibliothek (React/Vue/Astro):

// Button.jsx
export function Button({ children, variant = 'primary', ...props }) {
  const variants = {
    primary: 'bg-blue-600 hover:bg-blue-700 text-white',
    secondary: 'bg-gray-200 hover:bg-gray-300 text-gray-900',
    danger: 'bg-red-600 hover:bg-red-700 text-white'
  };

  return (
    <button
      className={`${variants[variant]} font-semibold py-3 px-6 rounded-lg transition-colors`}
      {...props}
    >
      {children}
    </button>
  );
}

// Nutzung:
<Button variant="primary">Speichern</Button>
<Button variant="danger">Löschen</Button>

3. Tailwind Config für Konsistenz:

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        brand: {
          50: '#f0f9ff',
          100: '#e0f2fe',
          500: '#0ea5e9',
          600: '#0284c7',
          700: '#0369a1',
        }
      },
      spacing: {
        '128': '32rem',
        '144': '36rem',
      },
      animation: {
        'fade-in': 'fadeIn 0.5s ease-in-out',
      },
      keyframes: {
        fadeIn: {
          '0%': { opacity: '0', transform: 'translateY(10px)' },
          '100%': { opacity: '1', transform: 'translateY(0)' },
        }
      }
    }
  }
}

Ergebnis: Einmal definiert, überall verfügbar:

<div class="bg-brand-600 hover:bg-brand-700 animate-fade-in">
  Custom Brand Color mit Animation
</div>

Wartung vereinfacht

Tailwind bringt den Stil dorthin, wo er gebraucht wird: ins HTML. Kein langes Suchen mehr nach der richtigen Klasse in einem ausgelagerten Stylesheet. Die gesamte Logik bleibt nah an der jeweiligen Komponente.

Tailwind + KI = Dreamteam

Mit KI-Tools, die mir beim Schreiben von Utility-Klassen oder bei Layouts helfen, wird das Arbeiten schneller, präziser – und sogar angenehmer.

Praktische KI-Workflows mit Tailwind:

1. Design zu Code (mit Claude/ChatGPT):

Prompt: "Erstelle mir eine Hero-Section:
- Zweispaltig (Bild rechts, Text links)
- Gradient Background
- CTA Button
- Responsive (Mobile: einspaltig)
- Tailwind CSS"

Output: Fertiges HTML mit allen Tailwind-Klassen

2. Screenshot zu Component:

Mit Tools wie v0.dev oder Screenshot-to-Code:

  • Screenshot hochladen
  • KI generiert Tailwind-Component
  • Minimal anpassen, fertig

3. Inline-Hilfe mit Cursor/Codeium:

<!-- Kommentar schreiben -->
<!-- TODO: Card mit Bild oben, Titel, Beschreibung, Button -->

<!-- KI generiert automatisch: -->
<div class="bg-white rounded-lg shadow-lg overflow-hidden max-w-sm">
  <img src="image.jpg" alt="" class="w-full h-48 object-cover" />
  <div class="p-6">
    <h3 class="text-xl font-bold mb-2">Titel</h3>
    <p class="text-gray-600 mb-4">Beschreibung...</p>
    <button class="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700">
      Mehr erfahren
    </button>
  </div>
</div>

4. Refactoring mit KI:

<!-- Alter Code mit Custom CSS -->
<div class="my-custom-card">
  <!-- ... -->
</div>

Prompt: "Konvertiere zu Tailwind"

<!-- KI liefert: -->
<div class="bg-white rounded-lg shadow-md p-6">
  <!-- ... -->
</div>

Zeitersparnis real:

  • Hero-Section: 45 min → 5 min
  • Responsive Grid: 30 min → 2 min
  • Custom Component: 60 min → 10 min

Durchschnittlich 80% Zeitersparnis bei Layout-Arbeit!

„Handmade by Webdesigner macht mit Tailwind wieder Sinn – weil die Grundlage stimmt und ich den Fokus auf das Wesentliche legen kann.“

Developer Experience: Die Tools machen den Unterschied

Must-Have VS Code Extensions:

1. Tailwind CSS IntelliSense

  • Autocomplete für alle Klassen
  • Hover-Preview (zeigt CSS)
  • Syntax-Highlighting
  • Linting

2. Headwind

  • Automatisches Sortieren der Klassen
  • Konsistente Reihenfolge im Team

3. Tailwind Fold

  • Lange Klassenlisten einklappen
  • Übersichtlicheres HTML

Browser DevTools:

<!-- Vor­teil: Direkt im Browser experimentieren -->
<div class="bg-blue-500"> <!-- ändern zu bg-red-500 -->
  → Sofort sichtbar
  → Klasse kopieren
  → In Code einfügen

Playground & Documentation:

  • Tailwind Play (play.tailwindcss.com)

    • Online testen ohne Setup
    • Teilen mit Team
    • Verschiedene Breakpoints testen
  • Tailwind UI (kostenpflichtig)

    • 500+ fertige Komponenten
    • Production-ready
    • Kopieren & Anpassen

Die Schattenseiten – nicht alles ist perfekt

Natürlich ist nicht alles Gold, was Utility-based glänzt. Auch Tailwind bringt Herausforderungen mit sich:

Unübersichtliches HTML

Wer Tailwind nicht gewohnt ist, wird zunächst vom Klassen-Wirrwarr im Markup erschlagen. Das kann gerade bei Teamarbeit zu Kommunikationsproblemen führen.

Lernkurve

Tailwind ist kein „CSS für Anfänger”. Es erfordert ein tiefes Verständnis von Layouts, Abständen, Responsive Design und der zugrunde liegenden Logik, um sinnvoll damit zu arbeiten.

Gestalterische Einschränkungen

Tailwind bietet ein starkes Designsystem – aber eben ein vorgegebenes. Wer sich zu 100 % kreativ entfalten möchte, muss tiefer in die Konfiguration eintauchen.

Kein Ersatz für gutes Designverständnis

Man kann mit Tailwind schnell eine Webseite zusammenbauen – aber das ersetzt kein Gefühl für Typografie, Weißraum, visuelle Hierarchien. Gute Gestaltung bleibt menschlich.

🧭 Blick über den Tellerrand: Framer, Webflow & Co.

Framer, Webflow und ähnliche Tools gehen noch einen Schritt weiter: Webdesign ganz ohne Code. Und das funktioniert in vielen Fällen auch erstaunlich gut – aber nicht in allen. Wer maßgeschneiderte Lösungen oder volle Kontrolle braucht, kommt früher oder später doch wieder zum Code zurück.

Mein Schlussgedanke: Tailwind ist gekommen, um zu bleiben

Ich habe mich lange gegen Tailwind gesträubt. Heute ist es für mich das effizienteste Tool, um moderne, schnelle und wartbare Webseiten zu bauen – besonders in Kombination mit KI-Unterstützung.

„Die Alternativen sind nicht wirklich besser. Tailwind ist derzeit der effizienteste Weg, eine gute Website mit hoher Qualität und Performance umzusetzen.”

Es ist kein Wundermittel. Aber es ist ein Werkzeug, das – richtig eingesetzt – sehr viel richtig macht. Und mir als Webdesigner wieder mehr Freiraum für das gibt, was wirklich zählt: gutes Design und zufriedene Nutzer.

Praktische Tipps für Tailwind-Einsteiger

Woche 1: Setup & Basics

# Installation (Vite-Projekt)
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

# tailwind.config.js
module.exports = {
  content: ['./src/**/*.{html,js,jsx,ts,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [],
}

# In deinem CSS:
@tailwind base;
@tailwind components;
@tailwind utilities;

Nicht gleich das ganze Projekt umstellenStarte mit einer einzelnen KomponenteInstalliere Tailwind CSS IntelliSense

Woche 2: Komponenten-Patterns lernen

Häufige Patterns auswendig lernen:

<!-- Container -->
<div class="container mx-auto px-4 max-w-7xl">

<!-- Flexbox Center -->
<div class="flex items-center justify-center">

<!-- Grid (responsive) -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">

<!-- Card -->
<div class="bg-white rounded-lg shadow-md p-6">

<!-- Button -->
<button class="bg-blue-600 hover:bg-blue-700 text-white font-semibold py-2 px-4 rounded transition">

Woche 3: Responsive Design

Mobile-First denken:

<!-- Mobile: Text klein, Desktop: Text groß -->
<h1 class="text-2xl md:text-4xl lg:text-5xl">

<!-- Mobile: Einspaltig, Tablet: Zweispaltig, Desktop: Dreispaltig -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">

<!-- Mobile: Verstecken, Desktop: Zeigen -->
<div class="hidden lg:block">

Woche 4: Customization

Tailwind an deine Brand anpassen:

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        primary: '#your-brand-color',
        secondary: '#another-color',
      },
      fontFamily: {
        sans: ['Inter', 'system-ui', 'sans-serif'],
      },
    }
  }
}

Häufige Fehler & Lösungen

Fehler 1: Zu viel @apply

Falsch:

.my-component {
  @apply bg-white rounded-lg shadow-md p-6 flex items-center justify-between;
}

Besser: Direkt im HTML oder als Component

Fehler 2: Inline Styles mischen

Falsch:

<div class="bg-blue-500" style="padding: 24px;">

Besser:

<div class="bg-blue-500 p-6">

Fehler 3: Purge/Content nicht konfiguriert

Resultat: 3.8 MB CSS-Datei!

Lösung: content in tailwind.config.js korrekt setzen

Fehler 4: Klassen dynamisch generieren

Funktioniert nicht:

<div className={`text-${color}-500`}> // Purge entfernt das!

Besser:

const colors = {
  red: 'text-red-500',
  blue: 'text-blue-500'
};
<div className={colors[color]}>

Performance-Checklist

☐ Purge/Content konfiguriert ☐ CSS unter 20 KB (gzipped) ☐ Keine unused Klassen ☐ Production Build getestet ☐ Lighthouse Score >95

Mein persönlicher Workflow heute

  1. Design in Figma/Sketch
  2. Screenshot + KI → Erste Tailwind-Version
  3. Komponenten extrahieren (Button, Card, etc.)
  4. Responsive testen (Chrome DevTools)
  5. Performance prüfen (Lighthouse)
  6. Deploy

Zeitaufwand pro Seite:

  • Vorher (Custom CSS): 4-6 Stunden
  • Heute (Tailwind + KI): 1-2 Stunden

Ersparnis: 60-70%

Schlussgedanke

Tailwind CSS hat meine Arbeitsweise fundamental verändert – zum Besseren. Was mich überzeugt hat:

94% kleinere CSS-Dateien60-70% Zeitersparnis durch KI-Support ✅ 99/100 Lighthouse Scores out of the box ✅ Kein Context-Switching zwischen HTML und CSS ✅ Konsistentes Design-System ohne Aufwand

Die Wahrheit: Es ist nicht perfekt. Aber es ist das effizienteste Tool, das ich kenne, um moderne, performante Websites zu bauen.

Und manchmal – nur manchmal – lohnt es sich eben doch, Vorurteile über Bord zu werfen und etwas Neues auszuprobieren.

Denn am Ende zählt nur eins: Zufriedene Nutzer und schnelle Websites.

Und dafür ist Tailwind heute mein Werkzeug der Wahl.