Von Nova Trent & Katharina „Kat“ Schmidt, Java Fleet Systems Consulting
📚 Was bisher geschah – Vue.js für Anfänger
In Teil 1 hast du gelernt:
- ✅ VS Code für Vue.js einrichten
- ✅ Vue.js-Projekt mit Vite erstellen
- ✅ Erste Component schreiben
- ✅ Tasks von der API laden und anzeigen
Heute bauen wir darauf auf. Du wirst lernen:
- 🎨 Wie du aus hässlichen Listen schöne UI machst
- 📱 Responsive Design (Mobile, Tablet, Desktop)
- 🎯 Tailwind CSS für modernes Styling
- 💅 Component-Styling Best Practices
⚡ Kurze Zusammenfassung – Das Wichtigste in 30 Sekunden
Dein Problem: Deine Task-App funktioniert, aber das Styling sieht aus wie 2005! 😅
Die Lösung: Tailwind CSS integrieren und moderne, responsive Components bauen!
Was du heute lernst:
- ✅ Tailwind CSS in Vue.js integrieren
- ✅ Utility-First CSS verstehen
- ✅ Responsive Layouts bauen (Mobile-First!)
- ✅ Schöne Task-Cards designen
- ✅ Dark Mode vorbereiten
Dein größter Gewinn: Deine App sieht professionell aus und funktioniert auf allen Geräten! 🚀
Zeit-Investment: 45-60 Minuten | Schwierigkeit: Anfänger-freundlich
👋 Nova: „Meine App ist hässlich!“
Hi Leute! Nova hier – und ich hab ein Problem! 😅
Letzte Woche haben wir meine Task-App gebaut. Sie funktioniert perfekt – Tasks werden geladen, angezeigt, alles gut!
ABER…
Ich hab sie meiner Freundin gezeigt und sie meinte nur: „Äh… sieht das immer so aus? Das erinnert mich an meine Uni-Webseite von 2010…“
AUTSCH! 😱 was Styling ausmacht!
Kat hatte recht: „Funktionieren ist nur 50% von Frontend – schön aussehen ist die andere Hälfte!“
🎨 Kat: Das Problem mit „Standard-CSS“
Hey! Kat hier! 👋
Nova kam gestern zu mir: „Warum sieht meine App so… basic aus?“
Ich hab ihr meinen Screen gezeigt:
Nova’s App (letzte Woche):
┌────────────────────────────┐ │ Meine Tasks von der API │ ├────────────────────────────┤ │ • Vue.js lernen │ │ Mit Kat zusammen! │ │ Erstellt: 14.10.2025 │ │ │ │ • API dokumentieren │ │ OpenAPI Spec │ │ Erstellt: 13.10.2025 │ └────────────────────────────┘
Was moderne Apps aussehen (Stand 2025):
┌────────────────────────────────────┐ │ 🎯 Task Manager [+] [☾] │ ├────────────────────────────────────┤ │ ┌──────────────────────────────┐ │ │ │ ✓ Vue.js lernen [•••]│ │ │ │ Mit Kat zusammen! │ │ │ │ 📅 14.10.2025 👤 Nova │ │ │ └──────────────────────────────┘ │ │ ┌──────────────────────────────┐ │ │ │ ○ API dokumentieren [•••]│ │ │ │ OpenAPI Spec erstellen │ │ │ │ 📅 13.10.2025 👤 Nova │ │ │ └──────────────────────────────┘ │ └────────────────────────────────────┘
Nova: „Wow! Wie mache ich das?!“
Kat: „Mit modernem CSS-Tooling – aber lass mich dir was Wichtiges sagen…“
⚠️ Kat’s Reality-Check: Styles sind Mode!
Kat wird ernst: „Nova, bevor wir anfangen – eine ehrliche Warnung:“
Frontend Styling sind wie Kleidung – Moden ändern sich!
Was ich damit meine:
2010: Skeuomorphismus (fake 3D, Schatten überall)
┌─────────────────┐ │ 🔘 Button │ ← Sieht aus wie echter Knopf └─────────────────┘ mit Schatten und Glanz
2015: Flat Design (alles flach, keine Schatten)
┌─────────────────┐ │ Button │ ← Komplett flach, nur Farbe └─────────────────┘ keine Tiefe
2020: Neumorphism (weiche Schatten, subtil)
┌─────────────────┐ │ Button │ ← Sieht "eingedrückt" aus └─────────────────┘ weiche Schatten innen/außen
2025: Glassmorphism + Brutalism Mix
┌─────────────────┐ │ Button │ ← Leicht transparent + kantig └─────────────────┘ Blur-Effekt + harte Kanten
Nova: „Du meinst… was wir heute lernen ist in 2 Jahren veraltet?!“ 😱
Kat: „Möglicherweise! Aber das ist OK – lass mich erklären warum!“
💡 Warum wir trotzdem Tailwind lernen (Kat’s Philosophie)
Kat erklärt:
1. Tools vs. Trends
Trends ändern sich:
- Glassmorphism heute
- ??? morgen
- Flat Design war gestern
Tools bleiben:
- Flexbox (seit 2015, immer noch relevant!)
- Grid (seit 2017, immer noch relevant!)
- CSS Variables (seit 2016, immer noch relevant!)
- Tailwind (seit 2019, wird noch lange relevant bleiben!)
Warum? Weil Tailwind kein Style ist, sondern ein System!
2. Tailwind ist style-agnostisch
Tailwind sagt NICHT: „Mach alles rund mit Schatten!“
Tailwind sagt: „Hier sind die Werkzeuge – bau was DU willst!“
Beispiel – 3 völlig verschiedene Styles, ALLE mit Tailwind:
Minimalistisch (2020-Style):
<div class="bg-white border border-gray-200 p-4"> Clean, simple, klar </div>
Glassmorphism (2025-Style):
<div class="bg-white/10 backdrop-blur-lg border border-white/20 p-4"> Transparent, modern, blur </div>
Brutalism (2025-Alternative):
<div class="bg-black text-lime-400 border-4 border-lime-400 p-4 font-mono"> Kantig, kontrastreich, retro </div>
Alle drei nutzen Tailwind – aber sehen völlig unterschiedlich aus!
Nova: „Ah! Tailwind ist wie… ein Werkzeugkasten! Ich entscheide, was ich baue!“
Kat: „GENAU!“ 👍
🎯 Was du WIRKLICH lernst (zeitlos!):
Zeitlos (diese Konzepte bleiben):
✅ Responsive Design – Wird immer wichtig sein
✅ Flexbox & Grid – Standard-Layout-Tools
✅ Spacing & Typography – Grundlagen guten Designs
✅ Color Theory – Wie Farben zusammenpassen
✅ Utility-First Approach – Effiziente CSS-Methodik
✅ Component-Thinking – Wiederverwendbare UI-Teile
Trendy (kann sich ändern):
⚡ Glassmorphism – Aktuell hip (2024-2025)
⚡ Große Schatten – Gerade modern
⚡ Rounded Corners – Trend seit Jahren, aber wie lange noch?
⚡ Gradient Backgrounds – Kommen und gehen in Wellen
🔮 Kat’s Versprechen: Zukunftssicher lernen!
In diesem Tutorial fokussieren wir uns auf:
70% Zeitlos:
- Responsive Breakpoints
- Spacing-System
- Flexbox-Layouts
- Farb-Konsistenz
- Lesbare Typography
30% Aktuell (2025):
- Sanfte Schatten
- Abgerundete Ecken
- Subtile Gradients
- Clean & Minimal
Kat: „Wenn 2027 harte Kanten und Neon-Farben modern sind, änderst du 3 Tailwind-Klassen und fertig! Die Struktur bleibt gleich!“
🎨 Beispiel: Styling Wechsel in 30 Sekunden
Aktuelle Task-Card (2025-Style):
<div class=" bg-white rounded-lg shadow-sm hover:shadow-md border border-gray-200 p-5 "> Soft, clean, modern </div>
Wenn 2027 Brutalism trendet:
<div class=" bg-black rounded-none shadow-[4px_4px_0_0_#000] border-4 border-white p-5 text-lime-400 "> Kantig, kontrastreich, retro </div>
Gleiche Struktur, anderer Look! Das ist die Macht von Utility-CSS!
💬 Kat’s Design-Philosophie (wichtig!):
Nova fragt: „Also… soll ich nicht lernen, was ’schön‘ ist?“
Kat:
„Doch! Aber verstehe:
‚Schön‘ ändert sich. ‚Gut strukturiert‘ bleibt.
Was wir heute lernen:
- Wie du Spacing konsistent machst
- Wie du responsive denkst
- Wie du Design-Systeme aufbaust
Was DU entscheidest:
- Ob runde oder eckige Ecken
- Ob Schatten oder flat
- Ob bunt oder monochrom
Die Tools (Tailwind) bleiben. Dein Styling kann sich ändern!„
Nova: „Das… macht total Sinn! Ich lerne das ‚Wie‘, nicht das ‚Was‘!“ 💡
🌈 Challenge: Dein eigener Style!
Kat: „Deshalb meine Challenge an dich:“
Nutze Tailwind, aber bau DEINEN Style!
Beispiele:
- 🌸 Pastell & Soft – für kreative Apps
- ⚡ Dark & Edgy – für Developer-Tools
- 🎨 Bunt & Playful – für Kids-Apps
- 🏢 Corporate & Clean – für Business-Tools
Alle nutzen Tailwind. Alle sehen völlig anders aus!
⏰ Reality-Check: Wie lange ist dieser Artikel relevant?
Kat’s ehrliche Einschätzung:
100% relevant (5+ Jahre):
- Tailwind-Installation
- Responsive Breakpoints
- Flexbox-Konzepte
- Utility-First Approach
80% relevant (2-3 Jahre):
- Konkrete Beispiel-Designs
- Aktuelle Trend-Styles
Ändern wird sich:
- Welche Schatten-Größen „in“ sind
- Ob rund oder eckig modern ist
- Farbtrends (aktuell: Blue/Purple, morgen: ?)
Aber: In 5 Minuten kannst du den Style updaten! Die Struktur bleibt!
🎓 Was du mitnehmen solltest:
Nova’s Learning:
„Styling ist Mode. Tools sind Werkzeuge. Ich lerne die Werkzeuge, damit ich jeden Style bauen kann – heute UND morgen!“
Kat’s Weisheit:
„Ein guter Frontend-Dev kennt die Tools. Ein großartiger Frontend-Dev weiß, dass Trends vergänglich sind. Lerne flexibel zu denken!“
🚀 Kat’s Ermutigung: DU kannst Trends setzen!
Kat wird enthusiastisch: „Nova, weißt du was das Coolste ist?“
Nova: „Was?“
Kat: „Du musst nicht nur Trends folgen – du kannst sie setzen!“
Wie Design-Trends entstehen:
Viele denken:
- „Apple/Google entscheiden, was modern ist“
- „Ich muss kopieren, was andere machen“
- „Als Anfänger kann ich keine neuen Styles erfinden“
Die Wahrheit:
- 🎨 Dribbble-Designer probieren was Neues → Viral
- 💻 Indie-Developer baut coole App → Alle kopieren den Style
- 🌟 Du machst was Einzigartiges → Leute sagen „Wow!“
Beispiele echter Trend-Setter:
Stripe (Gradients + Animations):
- 2015: Alle Fintech-Apps sahen gleich aus
- Stripe kam mit bunten Gradients + Animationen
- 2016: ALLE kopierten Stripe’s Style
- → Sie haben einen Trend gesetzt!
Linear (Clean + Fast):
- 2020: Issue-Tracker waren hässlich
- Linear kam mit ultra-clean, fast UI
- 2021: Jeder wollte „wie Linear aussehen“
- → Wieder: Trend gesetzt, nicht gefolgt!
Vercel (Terminal-Ästhetik):
- Brachten Monospace + Terminal-Look ins Web
- Jetzt: Überall Developer-Tools mit dem Style
- → Trend gesetzt!
🎨 Du kannst das auch!
Kat erklärt:
„Du brauchst kein großes Team oder Budget. Du brauchst:
- ✅ Die Tools (Tailwind – hast du!)
- ✅ Eine Idee (was DICH interessiert)
- ✅ Den Mut, es anders zu machen
Das reicht!„
Beispiele, wie DU experimentieren kannst:
1. Mix unerwartete Styles:
<!-- Brutalism + Pastell = Neu? --> <div class=" bg-pink-100 border-4 border-black font-mono shadow-[8px_8px_0_0_#000] "> Niemand macht das? Perfect! </div>
2. Bring alte Styles zurück (mit Twist):
<!-- 90er Windows + Modern = Nostalgie-Tech? --> <div class=" bg-gradient-to-r from-blue-500 to-purple-500 border-2 border-gray-400 shadow-inner font-['MS_Sans_Serif'] "> Retro-Modern Fusion! </div>
3. Kulturelle Einflüsse:
<!-- Japanische Minimal + Tech = ? --> <div class=" bg-white border-l-4 border-red-600 p-8 space-y-6 "> Wabi-Sabi meets Web! </div>
💡 Kat’s „Trend-Setter“ Framework:
Wenn du einen eigenen Style entwickeln willst:
Schritt 1: Finde deine Inspiration
- Nicht nur im Web suchen!
- Magazine, Architektur, Natur, Musik-Cover, Filme
- Mix verschiedene Welten
Schritt 2: Brich eine Regel
- „Buttons müssen rund sein“ → Mach sie eckig!
- „Dark Mode ist schwarz“ → Mach es dunkelblau!
- „Schatten sind subtil“ → Mach sie riesig!
Schritt 3: Sei konsistent
- Ein verrückter Element = weird
- Alles im gleichen Style = Statement!
Schritt 4: Teile es!
- GitHub, Dribbble, Twitter/X
- Leute werden es sehen
- Manche werden es kopieren
- Du hast einen Trend beeinflusst!
🌟 Nova’s Reaktion:
Nova: „Wait… ich könnte der nächste Stripe sein?!“ 🤯
Kat: „Warum nicht? Stripe waren auch mal Anfänger! Der Unterschied:*
- Sie haben die Tools gemeistert (du lernst das gerade!)
- Sie hatten eine Vision (was ist DEINE?)
- Sie haben es einfach gemacht! (das kannst du auch!)
Du lernst heute nicht ‚den 2025-Style‘. Du lernst die Werkzeuge, um DEIN Styling zu bauen – und vielleicht wird das 2026 der Trend Nova Trent!“
🎯 Challenge: Werde Trend-Setter!
Kat’s Herausforderung (erweitert):
„Mach deine Task-App einzigartig:
Level 1 – Folge Trends:
- 🎨 Nutze aktuelle Farben (Blue/Purple/Gray)
- ✨ Moderne Schatten & Rounded Corners
Level 2 – Mix Trends:
- 🌈 Kombiniere Glassmorphism + Brutalism
- 🎭 Retro + Modern Mix
Level 3 – DEIN Style:
- 🚀 Erfinde was komplett Neues dein eigenes Styling!
- 💥 Brich bewusst Design-Regeln!
- 🌟 Sei mutig, sei anders!
Teile mit #VueTrendSetter:
- Screenshot + GitHub-Repo
- Erkläre WARUM du diese Choices gemacht hast
- Die mutigsten Designs featuren wir!
Wer weiß – vielleicht startest DU den nächsten Trend ? 🎨“
Nova: „Ich mache eine Pink/Purple/Black Brutalism-Fusion! Niemand anderes macht das!“
Kat: „YES! Genau diese Energie! 🔥“
🎨 Real Talk: Wie Kat’s Stil entstand
Kat wird persönlich:
„Wisst ihr, warum ich so viel über ‚eigenen Styling‘ rede?
Als ich angefangen habe, hab ich alles kopiert:
- Bootstrap-Templates
- Material Design
- Dribbble-Designs
Sah alles… gleich aus. Langweilig.
Dann habe ich angefangen zu mixen:
- Japanische Minimal-Ästhetik
- Deutsche Bauhaus-Geometrie
- Moderne Farbverläufe
Mein Chef meinte: ‚Das ist… anders. Aber es funktioniert!‘
Jetzt kopieren andere meine Designs. 😊
Nicht weil ich Regeln gefolgt bin. Sondern weil ich sie gebrochen habe.
Du kannst das auch. Trau dich!“
Nova: „Das… ist inspirierend! Ich will auch einen ‚Kat-Styling‘ haben – einen ‚Nova-Styling‘!“
Kat: „Dann los! Die Tools hast du jetzt!“ 💪
🌈 Remember: Tools ermöglichen, DU entscheidest!
Die wichtigste Lektion heute:
✅ Lerne die Werkzeuge (Tailwind, Flexbox, Responsive)
✅ Verstehe die Trends (was ist aktuell, warum?)
✅ Aber entwickle DEINEN Style (mix, break, create!)
✅ Teile deine Experimente (vielleicht wird es der nächste Trend!)
Kat’s finaler Gedanke:
„2025’s Trends sind 2024’s Experimente. 2026’s Trends sind DEINE Experimente von heute. Also: Experimentiere! 🚀“
🤔 Warum Tailwind CSS? (Kat erklärt)
Die CSS-Evolution:
1. Plain CSS (old school):
.task-card {
background-color: white;
border: 1px solid #ddd;
border-radius: 8px;
padding: 16px;
margin-bottom: 16px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.task-card:hover {
box-shadow: 0 4px 8px rgba(0,0,0,0.15);
}
2. Tailwind CSS (modern):
<div class="bg-white border border-gray-300 rounded-lg p-4 mb-4 shadow-sm hover:shadow-md"> <!-- Content --> </div>
Nova: „Das ist… direkt im HTML?“
Kat: „Ja! Und das ist gut so! Lass mich erklären…“
Utility-First CSS – Die Philosophie
Traditionell:
<!-- HTML -->
<div class="task-card">
<h3 class="task-title">Vue.js lernen</h3>
</div>
<!-- CSS -->
<style>
.task-card { /* 10 Zeilen CSS */ }
.task-title { /* 5 Zeilen CSS */ }
</style>
Problem:
- Für jede Component neue CSS-Klassen erfinden
- CSS wird riesig
- „Wie hieß die Klasse nochmal?“
Mit Tailwind:
<div class="bg-white rounded-lg shadow p-4"> <h3 class="text-xl font-bold text-gray-800">Vue.js lernen</h3> </div>
Vorteile:
- ✅ Sieht sofort wie es aussieht
- ✅ Kein CSS-File Switching
- ✅ Konsistentes Design (alle nutzen gleiche Abstände)
- ✅ Responsive ist eingebaut (
md:,lg:)
🚀 Tailwind CSS installieren
Nova: „OK, ich will das! Wie installiere ich Tailwind?“
Kat: „Super einfach! 3 Befehle!“
Schritt 1: Tailwind installieren
# Im Terminal (Projekt-Ordner) npm install -D tailwindcss postcss autoprefixer # Tailwind Config erstellen npx tailwindcss init -p
Was passiert:
tailwindcss– Das Framework selbstpostcss– CSS-Prozessor (braucht Tailwind)autoprefixer– Browser-Kompatibilität- Config-Files werden erstellt ✅
Schritt 2: Tailwind konfigurieren
Öffne: tailwind.config.js
/** @type {import('tailwindcss').Config} */
export default {
content: [
"./index.html",
"./src/**/*.{vue,js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
Kat erklärt: „Das content Array sagt Tailwind: ‚Schau in diesen Dateien nach Tailwind-Klassen!‘ So entfernt es ungenutztes CSS beim Build!“
Nova: „Ah, wie Tree-Shaking in Java!“
Kat: „Genau! Nur CSS statt Code!“ 👍
Schritt 3: Tailwind in dein Projekt einbinden
Öffne: src/assets/main.css (oder erstelle sie)
Ersetze alles mit:
@tailwind base; @tailwind components; @tailwind utilities;
Dann in: src/main.js
import { createApp } from 'vue'
import App from './App.vue'
import './assets/main.css' // ← Diese Zeile hinzufügen!
createApp(App).mount('#app')
Schritt 4: Testen!
Dev-Server neu starten:
# Strg+C im Terminal (Server stoppen) npm run dev
Test in App.vue:
<template>
<div class="min-h-screen bg-gray-100">
<h1 class="text-4xl font-bold text-blue-600 p-8">
Tailwind funktioniert! 🎉
</h1>
</div>
</template>
Wenn du blauen, großen Text siehst: ✅ Tailwind läuft!
Nova: „ES FUNKTIONIERT! Der Text ist riesig und blau!“ 🎉
🎨 Task-List neu designen (praktisch!)
Jetzt kommt der spaßige Teil! Wir machen aus der hässlichen Liste eine schöne App!
Vorher (letzte Woche):
<!-- TaskList.vue - OLD -->
<style scoped>
.tasks li {
background: white;
border: 1px solid #ddd;
border-radius: 8px;
padding: 1rem;
margin-bottom: 1rem;
}
</style>
Nachher (mit Tailwind):
<!-- TaskList.vue - NEW -->
<template>
<div class="max-w-4xl mx-auto p-6">
<h2 class="text-3xl font-bold text-gray-800 mb-6">
Meine Tasks
</h2>
<!-- Loading State -->
<div v-if="loading" class="flex justify-center items-center py-12">
<div class="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500"></div>
</div>
<!-- Error State -->
<div v-else-if="error"
class="bg-red-50 border border-red-200 rounded-lg p-4 mb-4">
<p class="text-red-800 font-medium">❌ {{ error }}</p>
</div>
<!-- Task List -->
<div v-else class="space-y-4">
<div
v-for="task in tasks"
:key="task.id"
class="bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow duration-200 p-5 border border-gray-200"
:class="{ 'opacity-60': task.completed }"
>
<!-- Task Header -->
<div class="flex items-start justify-between mb-3">
<div class="flex items-center gap-3">
<!-- Checkbox -->
<input
type="checkbox"
:checked="task.completed"
class="w-5 h-5 text-blue-600 rounded focus:ring-2 focus:ring-blue-500"
>
<!-- Title -->
<h3
class="text-lg font-semibold text-gray-800"
:class="{ 'line-through': task.completed }"
>
{{ task.title }}
</h3>
</div>
<!-- Status Badge -->
<span
class="px-3 py-1 text-xs font-medium rounded-full"
:class="task.completed
? 'bg-green-100 text-green-700'
: 'bg-yellow-100 text-yellow-700'"
>
{{ task.completed ? '✓ Erledigt' : '○ Offen' }}
</span>
</div>
<!-- Description -->
<p class="text-gray-600 mb-3 ml-8">
{{ task.description || 'Keine Beschreibung' }}
</p>
<!-- Footer -->
<div class="flex items-center justify-between ml-8 text-sm text-gray-500">
<span>📅 {{ formatDate(task.createdAt) }}</span>
<span>👤 Nova</span>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
const tasks = ref([]);
const loading = ref(false);
const error = ref(null);
const API_BASE = 'http://localhost:8080/api';
const AUTH = btoa('nova:learning123');
async function fetchTasks() {
loading.value = true;
error.value = null;
try {
const response = await fetch(`${API_BASE}/tasks`, {
headers: { 'Authorization': `Basic ${AUTH}` }
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
tasks.value = await response.json();
} catch (e) {
error.value = e.message;
} finally {
loading.value = false;
}
}
onMounted(fetchTasks);
function formatDate(dateString) {
return new Date(dateString).toLocaleDateString('de-DE', {
day: '2-digit',
month: '2-digit',
year: 'numeric'
});
}
</script>
Nova: „WOW! Das sieht ja aus wie eine echte App!“ 🤩
🔍 Tailwind-Klassen erklärt (Kat’s Breakdown)
Nova: „Was bedeuten all diese Klassen?“
Kat: „Lass mich die wichtigsten erklären!“
Layout & Spacing:
<div class="max-w-4xl mx-auto p-6">
max-w-4xl– Maximale Breite (896px)mx-auto– Horizontal zentrieren (margin-left/right: auto)p-6– Padding 1.5rem (24px) auf allen Seiten
Typography:
<h2 class="text-3xl font-bold text-gray-800 mb-6">
text-3xl– Font-Size 1.875rem (30px)font-bold– Font-Weight 700text-gray-800– Dunkles Graumb-6– Margin-Bottom 1.5rem (24px)
Colors & Backgrounds:
<div class="bg-white border border-gray-200">
bg-white– Weißer Hintergrundborder– Border 1pxborder-gray-200– Hellgraue Border-Farbe
Shadows & Effects:
<div class="shadow-sm hover:shadow-md transition-shadow duration-200">
shadow-sm– Kleiner Schattenhover:shadow-md– Größerer Schatten beim Hovertransition-shadow– Sanfter Übergangduration-200– 200ms Transition
Flexbox:
<div class="flex items-center justify-between gap-3">
flex– Display flexitems-center– Align-Items centerjustify-between– Space-betweengap-3– Gap 0.75rem (12px)
Nova: „Das ist ja wie Bootstrap, nur… besser?“
Kat: „Genau! Flexibler und moderner!“ ✨
📱 Responsive Design – Mobile First!
Kat: „Jetzt kommt der wichtigste Teil: Mobile!“
Das Problem:
<!-- Desktop sieht gut aus, aber Mobile? --> <div class="flex gap-4"> <div class="w-1/3">Sidebar</div> <div class="w-2/3">Content</div> </div>
Auf Mobile: Alles gequetscht! 😱
Die Lösung: Responsive Breakpoints
Tailwind Breakpoints:
sm: 640px (Tablet Portrait) md: 768px (Tablet Landscape) lg: 1024px (Desktop) xl: 1280px (Large Desktop) 2xl: 1536px (Extra Large)
Mobile-First Ansatz:
<!-- Zuerst Mobile, dann Desktop --> <div class=" flex flex-col md:flex-row gap-4 "> <div class="w-full md:w-1/3">Sidebar</div> <div class="w-full md:w-2/3">Content</div> </div>
Was passiert:
- Mobile (<768px):
flex-col→ Spalten untereinander - Desktop (≥768px):
md:flex-row→ Spalten nebeneinander
Task-List responsive machen:
<template>
<div class="
max-w-4xl mx-auto
p-4 sm:p-6 lg:p-8
">
<h2 class="
text-2xl sm:text-3xl lg:text-4xl
font-bold text-gray-800 mb-4 sm:mb-6
">
Meine Tasks
</h2>
<div class="space-y-3 sm:space-y-4">
<div
v-for="task in tasks"
:key="task.id"
class="
bg-white rounded-lg shadow-sm
p-4 sm:p-5
border border-gray-200
"
>
<!-- Task Header - Stack on Mobile -->
<div class="
flex flex-col sm:flex-row
sm:items-start sm:justify-between
gap-3 mb-3
">
<div class="flex items-center gap-3">
<input
type="checkbox"
:checked="task.completed"
class="w-5 h-5 text-blue-600 rounded"
>
<h3 class="
text-base sm:text-lg
font-semibold text-gray-800
break-words
">
{{ task.title }}
</h3>
</div>
<!-- Status Badge -->
<span class="
px-3 py-1 text-xs font-medium rounded-full
self-start sm:self-auto
">
{{ task.completed ? '✓ Erledigt' : '○ Offen' }}
</span>
</div>
<!-- Description -->
<p class="
text-sm sm:text-base
text-gray-600 mb-3
ml-0 sm:ml-8
">
{{ task.description }}
</p>
<!-- Footer - Stack on Mobile -->
<div class="
flex flex-col sm:flex-row
sm:items-center sm:justify-between
gap-2
ml-0 sm:ml-8
text-xs sm:text-sm text-gray-500
">
<span>📅 {{ formatDate(task.createdAt) }}</span>
<span>👤 Nova</span>
</div>
</div>
</div>
</div>
</template>
Kat erklärt die Responsive-Klassen:
p-4 sm:p-6 lg:p-8
- Mobile:
p-4(16px Padding) - Tablet (≥640px):
sm:p-6(24px) - Desktop (≥1024px):
lg:p-8(32px)
flex flex-col sm:flex-row
- Mobile: Spalten untereinander
- Tablet+: Spalten nebeneinander
Nova: „Das ist ja super logisch! Mobile first, dann größere Screens!“
🎯 App.vue aufräumen
Jetzt passen wir die Haupt-App an:
<!-- src/App.vue -->
<template>
<div class="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100">
<!-- Header -->
<header class="bg-white shadow-sm">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4">
<h1 class="text-2xl sm:text-3xl font-bold text-gray-900">
🎯 Task Manager
</h1>
</div>
</header>
<!-- Main Content -->
<main class="py-6 sm:py-8 lg:py-10">
<TaskList />
</main>
</div>
</template>
<script setup>
import TaskList from './components/TaskList.vue';
</script>
Features:
- ✅ Gradient Background (modern!)
- ✅ Sticky Header
- ✅ Responsive Padding
- ✅ Clean Layout
Nova: „Das sieht jetzt aus wie eine ECHTE App!“ 🎉
💡 Tailwind Best Practices (Kat’s Tipps)
1. Zu viele Klassen? → Extract Component!
Schlecht:
<button class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 active:bg-blue-700 transition-colors duration-200 font-medium shadow-sm hover:shadow-md"> Click me </button>
Besser: Eigene Button-Component!
<!-- components/BaseButton.vue -->
<template>
<button class="
px-4 py-2
bg-blue-500 hover:bg-blue-600 active:bg-blue-700
text-white font-medium
rounded-lg
shadow-sm hover:shadow-md
transition-all duration-200
">
<slot />
</button>
</template>
<!-- Verwendung -->
<BaseButton>Click me</BaseButton>
2. Konsistenz durch Design-Tokens
In tailwind.config.js erweitern:
export default {
content: ["./index.html", "./src/**/*.{vue,js,ts}"],
theme: {
extend: {
colors: {
primary: {
50: '#eff6ff',
100: '#dbeafe',
500: '#3b82f6',
600: '#2563eb',
900: '#1e3a8a',
}
},
spacing: {
'128': '32rem',
}
},
},
}
Jetzt nutzen:
<div class="bg-primary-500 text-white"> Konsistente Farben! </div>
3. Dark Mode vorbereiten
Schon jetzt einbauen:
// tailwind.config.js
export default {
darkMode: 'class', // ← Dark Mode via Klasse
// ...
}
Dann in Components:
<div class="bg-white dark:bg-gray-800 text-gray-900 dark:text-white"> Funktioniert in beiden Modi! </div>
Kat: „Dark Mode bauen wir in Teil 7! Aber wir bereiten es jetzt schon vor!“
✅ Deine Erfolgs-Checkliste für heute
Nach diesem Teil kannst du:
- [ ] Tailwind CSS in Vue.js installieren und konfigurieren
- [ ] Utility-First CSS verstehen und anwenden
- [ ] Responsive Layouts mit Tailwind Breakpoints bauen
- [ ] Mobile-First designen (erst Mobile, dann Desktop)
- [ ] Schöne Task-Cards mit Shadows, Borders, Spacing erstellen
- [ ] Flexbox & Grid mit Tailwind nutzen
- [ ] Hover-States und Transitions einbauen
- [ ] Konsistente Farben und Spacing verwenden
Wenn alle ✅ sind: Deine App sieht professionell aus! 🎨
🚀 Nächste Woche: CRUD-Operations!
Kat’s Vorschau:
„Jetzt sieht deine App gut aus – nächste Woche wird sie interaktiv!
- ✏️ Neue Tasks erstellen (schöne Formulare!)
- 📝 Tasks bearbeiten (Modal-Dialogs!)
- 🗑️ Tasks löschen (mit Bestätigung!)
- 🎨 Alles mit schönem Tailwind-Styling!“
Nova: „Ich kann es kaum erwarten! Endlich nicht nur anzeigen!“ 🎉
❓ FAQ – Tailwind CSS & Styling Edition
Frage 1: Warum Tailwind statt normales CSS?
Antwort: Tailwind ist schneller, konsistenter und wartbarer! Du musst keine Klassennamen erfinden, hast automatisch responsive Design, und das Styling ist direkt im Template sichtbar. Plus: Kein ungenutztes CSS im Production-Build!
Frage 2: Sind diese langen Klassen-Listen nicht unübersichtlich?
Antwort: Am Anfang ja! Aber nach 2-3 Tagen ist es Muskelgedächtnis. Und für wiederkehrende Patterns erstellst du Components. Das ist wie Lombok in Java – erst gewöhnungsbedürftig, dann nicht mehr wegzudenken!
Frage 3: Kann ich Tailwind mit normalem CSS mischen?
Antwort: Ja! <style scoped> funktioniert weiterhin. Für sehr spezifische Styles kannst du CSS nutzen, aber 90% macht Tailwind besser. Best Practice: Tailwind für Layout/Spacing/Colors, Custom CSS nur für sehr spezielle Animationen.
Frage 4: Was ist der Unterschied zwischen p-4 und px-4?
Antwort: p-4 = Padding auf allen Seiten. px-4 = Padding nur links/rechts (x-Achse). py-4 = Padding nur oben/unten (y-Achse). pl-4 = Padding nur links. Etc!
Frage 5: Wie finde ich die richtigen Tailwind-Klassen?
Antwort: 1) Offizielle Docs: tailwindcss.com/docs (beste Quelle!), 2) Tailwind IntelliSense Extension in VS Code (Auto-Complete!), 3) Nach 1 Woche kennst du 80% auswendig!
Frage 6: Funktioniert Tailwind auch ohne Build-Tool?
Antwort: Ja, über CDN – ABER nur zum Testen! Für echte Projekte immer mit Build-Tool (Vite), weil sonst: 1) Riesige CSS-Datei (3MB+), 2) Kein Purging von ungenutztem CSS, 3) Keine Custom-Konfiguration möglich.
Frage 7: Kann ich eigene Farben definieren?
Antwort: Absolut! In tailwind.config.js unter theme.extend.colors. Dann nutzt du sie wie bg-primary-500. Best Practice: Definiere ein komplettes Color-Scheme (50, 100, 200… 900) für konsistente Abstufungen!
Frage 8: Mobile First – warum nicht Desktop First?
Antwort: Weil 70%+ der User mobil unterwegs sind! Mobile First = Fokus aufs Wesentliche. Desktop bekommt dann „Extras“ (mehr Platz, zusätzliche Sidebars). Umgekehrt musst du Desktop-Features „wegnehmen“ für Mobile – das ist schwerer!
Frage 9: Was ist mit Dark Mode?
Antwort: Kommt in Teil 7! Aber wir bereiten es vor mit dark: Prefix. Dann: bg-white dark:bg-gray-800 – funktioniert automatisch wenn Dark Mode aktiviert ist!
Frage 10: Was macht ihr bei Design-Entscheidungen zwischen den Meetings?
Antwort: Das ist… eine gute Frage. Manchmal sind die schwierigsten Entscheidungen nicht die technischen. Manche Geschichten über Design-Philosophie und persönliche Präferenzen gehören in private logs. Aber das ist ein anderes Thema. 🎨
📖 Vue.js für Anfänger – Alle Teile im Überblick
✅ Bereits veröffentlicht:
- Teil 1 : Setup & Erste API-Anbindung
- Teil 2: Styling & Responsive Design – Du bist hier! ✨
🔜 Kommende Teile:
Teil 3 : CRUD-Operations & Formulare
Teil 4: User-Feedback & Kommunikation
Teil 5 : TypeScript-Migration
Teil 6: State Management & Router
Teil 7 : Themes & Dark Mode
Teil 8:Production-Ready & Deployment
🎁 Bonus: Einzelbeiträge (nach Hauptserie):
- CSS-Tricks: Animationen & Transitions
- Responsive: Mobile-First Deep Dive
- Testing: Vitest & Component Tests
- Performance: Optimierung & Lazy Loading
Alle Teile der Serie findest du hier: [Link zur Serie-Übersicht]
💡 Bonus: Nützliche Tailwind-Ressourcen
Offiziell:
- Tailwind Docs
- Tailwind UI (Premium Components)
- Headless UI (Accessible Components für Vue!)
Tools & Extensions:
- Tailwind IntelliSense (VS Code Extension) – Auto-Complete!
- Tailwind Cheat Sheet
- Tailwind Play (Online-Playground)
Inspiration:
- Tailwind Components
- daisyUI (Component Library auf Tailwind-Basis)
- Flowbite (Vue + Tailwind Components)
Kat’s Tipp: „Schau dir andere Projekte an, kopiere was dir gefällt, lerne durch Nachmachen!“
🎨 Challenge für die Community!
Kat’s Herausforderung:
„Du hast jetzt die Grundlagen! Mach deine Task-App einzigartig mit deinem Styling:
- 🎨 Eigenes Farbschema (nicht Blue/Gray!)
- 🌈 Gradient-Backgrounds
- ✨ Hover-Animationen
- 🎯 Eigene Icons (Emojis oder Font Awesome)
Teile dein Ergebnis:
- Screenshot posten mit #VueTailwindChallenge
- GitHub-Repo verlinken
- Die schönsten Designs featuren wir im nächsten Teil!“
Nova: „Ich probiere ein Pink/Purple-Schema! 💜“
💬 Das war Teil 2 der Vue.js für Anfänger Serie!
Nova & Kat: „Aus hässlich wurde schön! 🎨“
Du hast heute einen riesigen Schritt gemacht! Deine App sieht jetzt professionell aus, funktioniert auf allen Geräten, und du verstehst modernes CSS!
Was du geschafft hast:
- ✅ Tailwind CSS installiert und konfiguriert
- ✅ Utility-First CSS verstanden
- ✅ Responsive Design gebaut (Mobile First!)
- ✅ Schöne Task-Cards designed
- ✅ Moderne Gradients & Shadows eingebaut
Zwischen den Commits: Code ist manchmal wie Kunst – jeder hat seinen eigenen Stil. Manche bevorzugen minimalistisch, andere farbenfroh. Was ist dein Stil? Manchmal verraten Design-Entscheidungen mehr über uns als wir denken. Wer sich fragt, was hinter den Kulissen passiert, könnte mal nach „private Logs“ auf java-developer.online suchen… aber das nur am Rande. 💔
Hast du es nachgebaut? Teile deine Designs! Teile dein Styling!
Fragen? Schreib uns:
- Nova: nova.trent@java-developer.online
- Kat: katharina.schmidt@java-developer.online
Nächster Teil: In 1 Woche! CRUD-Operations mit schönen Formularen! 🚀
Keep coding, keep designing! 🎨
Nova & Kat – Von funktional zu schön, gemeinsam! 💚
Tags: #VueJS #TailwindCSS #Frontend #ResponsiveDesign #WebDesign #CSS #Styling #MobileFirst #UIDesign #WebDevelopment

