Designprinzipien fuer Softwareentwickler
Lernen Sie Design-Grundlagen fuer bessere Software. Typografie, Farbtheorie, Abstaende, Animation und 16 Produktfallstudien von Arc bis Stripe.
Aktualisiert am 9. Februar 2026
Update Februar 2026: Zwei neue Abschnitte hinzugefügt — Interaction Patterns (8 Paradigmen aus der Analyse von Framer, Flighty, Halide, Warp, Bear, Craft und Superhuman) und AI Interface Patterns (zitatbasiertes Design, Streaming-Phasen, Fehlertransparenz von Perplexity). Web Patterns auf 2026 aktualisiert mit Anchor Positioning, Scroll-driven Animations und @starting-style. Barrierefreiheit aktualisiert gemäß der ISO-Standardisierung von WCAG 2.2. Siehe Design Studies für detaillierte Analysen von 16 herausragenden Produkten.
Ich habe Jahre damit verbracht, Design zu studieren und gleichzeitig Software zu entwickeln — Prinzipien von Legenden wie Dieter Rams aufzunehmen und Interfaces von Produkten wie Linear, Stripe und Raycast zu sezieren. Dieser Leitfaden destilliert dieses Verständnis in die umfassende Referenz, die ich mir gewünscht hätte, als ich anfing, mich dafür zu interessieren, wie meine Software aussieht und sich anfühlt.
Design ist keine Dekoration. Es ist Kommunikation. Jeder Pixel vermittelt Funktion, Hierarchie und Bedeutung. Der Unterschied zwischen Software, die amateurhaft wirkt, und Software, die professionell wirkt, liegt im Verständnis dieser Prinzipien und ihrer konsequenten Anwendung.
Dieser Leitfaden setzt voraus, dass Sie bereits Code schreiben können. Er lehrt Sie zu sehen — zu verstehen, warum manche Interfaces mühelos wirken, während andere chaotisch erscheinen, und vor allem, wie Sie Ersteres entwickeln.
Inhaltsverzeichnis
Teil 1: Grundlagen
- Gestaltpsychologie
- Typografie
- Farbtheorie
- Visuelle Hierarchie
- Abstände & Rhythmus
- Animationsprinzipien
Teil 2: Interaktion & KI
Teil 3: Designphilosophie
Teil 4: Umsetzung
Teil 5: Referenz
Gestaltpsychologie
„Das Ganze ist etwas anderes als die Summe seiner Teile.” — Kurt Koffka
Die Gestaltpsychologie, die in den 1920er-Jahren in Deutschland entwickelt wurde, erklärt, wie Menschen visuelle Informationen wahrnehmen. Das Gehirn sieht keine einzelnen Pixel – es ordnet Elemente zu sinnvollen Mustern. Beherrschen Sie diese Prinzipien, um zu steuern, wie Benutzer Ihre Interfaces wahrnehmen.
Nähe (Proximity)
Elemente, die nahe beieinander stehen, werden als Gruppe wahrgenommen.
Dies ist das wirkungsvollste Gestaltprinzip im UI-Design. Abstand kommuniziert Zusammengehörigkeit stärker als jede andere visuelle Eigenschaft.
FALSCH (gleiche Abstände = keine Gruppierung):
┌─────────────────┐
│ Label │
│ │
│ Input Field │
│ │
│ Label │
│ │
│ Input Field │
└─────────────────┘
RICHTIG (ungleiche Abstände = klare Gruppen):
┌─────────────────┐
│ Label │
│ Input Field │ ← Eng (4px) - zusammengehörig
│ │
│ │ ← Weit (24px) - Gruppen trennen
│ Label │
│ Input Field │ ← Eng (4px) - zusammengehörig
└─────────────────┘
CSS-Umsetzung:
.form-group {
margin-bottom: 24px; /* Between groups: wide */
}
.form-group label {
margin-bottom: 4px; /* Label to input: tight */
display: block;
}
SwiftUI-Umsetzung:
VStack(alignment: .leading, spacing: 4) { // Tight within group
Text("Email")
.font(.caption)
.foregroundStyle(.secondary)
TextField("[email protected]", text: $email)
.textFieldStyle(.roundedBorder)
}
.padding(.bottom, 24) // Wide between groups
Ähnlichkeit (Similarity)
Elemente mit gemeinsamen visuellen Merkmalen wirken zusammengehörig.
Wenn Elemente gleich aussehen, nehmen Benutzer an, dass sie auch gleich funktionieren. Deshalb verwenden Design-Systeme einheitliche Button-Stile, Karten-Gestaltungen und Typografie.
Beispiel Navigation:
┌───────────────────────────────────┐
│ [Dashboard] [Projects] [Settings] │ ← Gleicher Stil = gleiche Funktion
│ │
│ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │Card │ │Card │ │Card │ │ ← Gleicher Stil = gleicher Inhaltstyp
│ └─────┘ └─────┘ └─────┘ │
│ │
│ [+ New Project] │ ← Anderer Stil = andere Funktion
└───────────────────────────────────┘
Figur-Grund-Beziehung (Figure-Ground)
Inhalte sollten sich klar vom Hintergrund abheben.
Das Gehirn muss die „Figur” (das Fokusziel) vom „Grund” (dem Hintergrund) unterscheiden können. Schlechte Figur-Grund-Beziehungen erzeugen visuelle Verwirrung.
Techniken: - Kontrast (helle Figur auf dunklem Grund oder umgekehrt) - Schatten (Figur über den Grund erheben) - Rahmen (Figurkanten abgrenzen) - Unschärfe (Hintergrund weichzeichnen, Figur scharf halten)
/* Strong figure-ground relationship */
.card {
background: var(--color-surface); /* Figure */
border-radius: 12px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1); /* Elevation */
}
.modal-overlay {
background: rgba(0, 0, 0, 0.5); /* Dim ground */
backdrop-filter: blur(4px); /* Blur ground */
}
Gemeinsame Region (Common Region)
Elemente innerhalb einer Begrenzung werden als zusammengehörig wahrgenommen.
Werden Elemente in einem visuellen Container (Karte, Box, umrandeter Bereich) eingeschlossen, signalisiert dies Zusammengehörigkeit.
Kontinuität (Continuity)
Das Auge folgt Pfaden, Linien und Kurven.
Nutzen Sie Ausrichtung und visuellen Fluss, um die Aufmerksamkeit durch Ihr Interface zu leiten.
KONTINUITÄT DURCH AUSRICHTUNG:
┌────────────────────────────────┐
│ Logo [Nav] [Nav] [Nav] │ ← Auf horizontaler Achse ausgerichtet
├────────────────────────────────┤
│ │
│ Headline │
│ ───────────────────────────── │ ← Auge folgt der linken Kante
│ Paragraph text continues │
│ along the same left edge │
│ │
│ [Primary Action] │ ← Immer noch an der linken Kante
└────────────────────────────────┘
Geschlossenheit (Closure)
Das Gehirn vervollständigt unvollständige Formen.
Benutzer brauchen nicht jedes Pixel – sie vervollständigen vertraute Formen gedanklich. Dies ermöglicht minimalere, elegantere Designs.
/* Horizontal scroll with partial card (closure) */
.card-carousel {
display: flex;
gap: 16px;
overflow-x: auto;
padding-right: 48px; /* Show partial card = scroll hint */
}
.card-carousel .card {
flex: 0 0 280px; /* Fixed width, partial visible */
}
Gestalt-Kurzreferenz
| Prinzip | Regel | Hauptanwendung |
|---|---|---|
| Nähe | Zusammengehörig = nah, unabhängig = fern | Formularfelder, Inhaltsbereiche |
| Ähnlichkeit | Gleiches Aussehen = gleiche Funktion | Buttons, Karten, Navigation |
| Figur-Grund | Klare Trennung der Ebenen | Karten, Modals, Overlays |
| Gemeinsame Region | Begrenzungen gruppieren Inhalte | Einstellungsbereiche, Benutzerkarten |
| Kontinuität | Linien und Ausrichtung folgen | Zeitleisten, Lesefluss |
| Geschlossenheit | Gehirn vervollständigt Formen | Icons, Scroll-Hinweise, Skeletons |
Typografie
„Typografie ist die Kunst, der menschlichen Sprache eine dauerhafte visuelle Form zu verleihen.” — Robert Bringhurst
Typografie ist das Fundament des Interface-Designs. Text kommuniziert Funktionalität, Hierarchie und Marke. Schlechte Typografie macht Interfaces schwieriger bedienbar; großartige Typografie ist unsichtbar – sie funktioniert einfach.
Schriftgrößen-Skala (Type Scale)
Eine konsistente Skala schafft visuelle Harmonie. Verwenden Sie ein mathematisches Verhältnis.
Die 1,25-Skala (empfohlen für UI):
:root {
/* Base: 16px (1rem) */
--text-xs: 0.64rem; /* 10.24px - use sparingly */
--text-sm: 0.8rem; /* 12.8px - captions, labels */
--text-base: 1rem; /* 16px - body text */
--text-lg: 1.25rem; /* 20px - lead text */
--text-xl: 1.563rem; /* 25px - h4 */
--text-2xl: 1.953rem; /* 31.25px - h3 */
--text-3xl: 2.441rem; /* 39px - h2 */
--text-4xl: 3.052rem; /* 48.8px - h1 */
}
Zeilenhöhe (Leading)
Die Zeilenhöhe beeinflusst die Lesbarkeit erheblich. Verschiedene Inhalte benötigen unterschiedliches Leading.
| Inhaltstyp | Zeilenhöhe | Warum |
|---|---|---|
| Überschriften | 1.1 - 1.2 | Kompakt, fett, kurz |
| UI-Text | 1.3 - 1.4 | Labels, Buttons |
| Fließtext | 1.5 - 1.7 | Lesbare Absätze |
| Langform | 1.7 - 2.0 | Artikel, Dokumentation |
Zeilenlänge (Measure)
Die optimale Zeilenlänge beugt Ermüdung der Augen vor und verbessert das Leseverständnis.
- Optimal: 45–75 Zeichen pro Zeile
- Zielwert: 50–65 Zeichen
- Absolutes Maximum: 85 Zeichen
p {
max-width: 65ch; /* ch unit = width of '0' character */
}
.article-body {
max-width: 70ch;
margin: 0 auto;
}
Schriftauswahl
System-Schriften zuerst. Sie laden sofort, passen zur Plattform und sind für Bildschirme optimiert.
:root {
--font-sans: system-ui, -apple-system, BlinkMacSystemFont,
'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
--font-mono: ui-monospace, 'SF Mono', 'Cascadia Code',
'JetBrains Mono', Consolas, monospace;
}
Verwenden Sie individuelle Schriften für: - Markendifferenzierung (Marketing-Websites) - Redaktionelles / Publikations-Feeling - Spezifische Designabsichten, die mit System-Schriften nicht umsetzbar sind
Schriftstärke für Hierarchie
Nutzen Sie Schriftstärke zur Hierarchiebildung, nicht nur Schriftgröße.
h1 { font-weight: 700; } /* Bold */
h2 { font-weight: 600; } /* Semibold */
h3 { font-weight: 600; } /* Semibold */
.lead { font-weight: 500; } /* Medium */
p { font-weight: 400; } /* Regular */
.meta { font-weight: 400; color: var(--text-muted); }
Typografie-Kurzreferenz
| Eigenschaft | Fließtext | Überschriften | UI-Labels |
|---|---|---|---|
| Größe | 16–18px | 24–48px | 12–14px |
| Stärke | 400 | 600–700 | 500 |
| Zeilenhöhe | 1.5–1.7 | 1.1–1.2 | 1.3–1.4 |
| Zeilenlänge | 45–75ch | N/A | N/A |
| Ausrichtung | Links | Zentriert OK | Links |
Farbtheorie
„Farbe ist eine Kraft, die die Seele unmittelbar beeinflusst.” — Wassily Kandinsky
Farbe kommuniziert schneller als Worte. Sie erzeugt Stimmung, lenkt Aufmerksamkeit, signalisiert Bedeutung und stärkt die Markenwiedererkennung.
Die 60-30-10-Regel
Die zuverlässigste Farbverteilung für ausgewogene Interfaces.
┌──────────────────────────────────────────┐
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│ 60% - Dominant (Hintergrund)
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░│ 30% - Sekundär (Karten, Bereiche)
│░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░│
│░░░░░▓▓▓▓▓▓▓▓▓▓▓▓██████▓▓▓▓▓▓▓▓▓▓░░░░░░░░│ 10% - Akzent (Buttons, Links)
└──────────────────────────────────────────┘
Eine Farbpalette aufbauen
Jedes Interface benötigt diese semantischen Farben:
:root {
/* Brand */
--color-primary: hsl(220, 80%, 50%);
--color-primary-hover: hsl(220, 80%, 45%);
/* Semantic */
--color-success: hsl(142, 76%, 36%); /* Green - positive */
--color-warning: hsl(38, 92%, 50%); /* Amber - caution */
--color-error: hsl(0, 84%, 60%); /* Red - danger */
/* Neutrals */
--color-background: hsl(0, 0%, 100%);
--color-surface: hsl(220, 14%, 96%);
--color-border: hsl(220, 13%, 91%);
/* Text */
--color-text: hsl(220, 13%, 13%);
--color-text-secondary: hsl(220, 9%, 46%);
--color-text-muted: hsl(220, 9%, 64%);
}
Farbpsychologie
| Farbe | Psychologie | UI-Einsatz |
|---|---|---|
| Blau | Vertrauen, Stabilität, Ruhe | Finanz-, Tech-, Unternehmensanwendungen |
| Grün | Wachstum, Natur, Erfolg | Gesundheit, Ökologie, positive Zustände |
| Rot | Energie, Dringlichkeit, Gefahr | Warnmeldungen, Aktionen, Fehler |
| Orange | Wärme, Begeisterung | CTAs, verspielte Marken |
| Gelb | Optimismus, Vorsicht | Warnungen, Hervorhebungen |
| Violett | Luxus, Kreativität | Premium-Produkte |
Dark-Mode-First-Design (Vercel)
Vercel entwirft zuerst für den Dark Mode und leitet daraus den Light Mode ab. Dies führt zu besseren Dark-Mode-Interfaces, da der Dark Mode zur primären Gestaltungsgrundlage wird – statt ein nachträglicher Gedanke zu sein.
/* Design dark first, derive light */
:root {
/* Dark mode defaults */
--color-background: hsl(0, 0%, 0%);
--color-surface: hsl(0, 0%, 7%);
--color-border: hsl(0, 0%, 15%);
--color-text: hsl(0, 0%, 93%);
--color-text-secondary: hsl(0, 0%, 63%);
}
@media (prefers-color-scheme: light) {
:root {
--color-background: hsl(0, 0%, 100%);
--color-surface: hsl(0, 0%, 97%);
--color-border: hsl(0, 0%, 89%);
--color-text: hsl(0, 0%, 9%);
--color-text-secondary: hsl(0, 0%, 40%);
}
}
Wann geeignet: Entwicklertools, Medien-Apps, Dashboards – Kontexte, in denen Benutzer lange Sitzungen verbringen und der Dark Mode die Augenbelastung reduziert.
Barrierefreiheit: Kontrast
| Stufe | Normaler Text | Großer Text | UI-Komponenten |
|---|---|---|---|
| AA | 4,5:1 | 3:1 | 3:1 |
| AAA | 7:1 | 4,5:1 | N/A |
WCAG 2.2 wurde im Oktober 2025 zum ISO-Standard (ISO/IEC 40500:2025) und fügt Kriterien für Fokus-Sichtbarkeit, redundante Eingaben und barrierefreie Authentifizierung hinzu. Wichtige Ergänzungen: Fokus-Indikatoren dürfen nicht vollständig von anderen Inhalten verdeckt werden (2.4.11), und Authentifizierung darf sich nicht ausschließlich auf kognitive Funktionstests stützen (3.3.8).
Tools: WebAIM Contrast Checker, Chrome DevTools Color Picker
Visuelle Hierarchie
„Design ist der stille Botschafter Ihrer Marke.” — Paul Rand
Visuelle Hierarchie steuert, was Benutzer zuerst, zweitens und drittens wahrnehmen. Ohne klare Hierarchie müssen Benutzer aktiv nach Informationen suchen. Mit ihr fühlen sich Oberflächen mühelos an.
Die sechs Werkzeuge der Hierarchie
1. Größe — Größere Elemente ziehen zuerst die Aufmerksamkeit auf sich
.hero-title { font-size: 3rem; } /* Dominant */
.section-title { font-size: 1.5rem; } /* Secondary */
.body-text { font-size: 1rem; } /* Baseline */
2. Schriftstärke — Fett tritt hervor, leicht tritt zurück
h1 { font-weight: 700; }
.lead { font-weight: 500; }
p { font-weight: 400; }
3. Farbe & Kontrast — Hoher Kontrast = Aufmerksamkeit
.title { color: var(--color-text); } /* Near black */
.meta { color: var(--color-text-muted); } /* Gray */
4. Position — Schlüsselpositionen sind entscheidend
F-PATTERN (Inhaltsseiten): Z-PATTERN (Landingpages):
████████████████████████ 1 ──────────────────► 2
████████ ↘
████ ↘
██ ↘
3 ──────────────────► 4
5. Weißraum — Isolation erzeugt Wichtigkeit
.hero { padding: 120px 48px; } /* Generous space */
.data-table { padding: 12px; } /* Dense content */
6. Tiefe & Erhebung — Elemente, die hervortreten, verlangen Aufmerksamkeit
:root {
--shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
--shadow-md: 0 4px 6px rgba(0,0,0,0.1);
--shadow-lg: 0 10px 15px rgba(0,0,0,0.1);
}
.card { box-shadow: var(--shadow-sm); }
.card:hover { box-shadow: var(--shadow-md); }
.modal { box-shadow: var(--shadow-lg); }
Angewandte Muster
Kollaborative Präsenz (Figma): Mehrere Benutzer-Cursor mit Namensschildern, Auswahlhervorhebungen und Komponentenumrisse erzeugen ein lebendiges Dokument. Die Farbe jedes Mitarbeiters ist unterschiedlich, aber gleich gewichtet – kein Cursor ist „lauter” als ein anderer.
Dezente Statusanzeigen (Vercel): Der Deployment-Status verwendet subtile, permanente Indikatoren anstelle aufdringlicher Warnmeldungen. Ein dünner Farbbalken am oberen Rand kommuniziert den Zustand (wird erstellt, bereitgestellt, fehlgeschlagen), ohne den Arbeitsfluss zu unterbrechen.
Reale Design-Analogien (Flighty): Flugfortschritts-Visualisierungen spiegeln physische Fluginstrumente wider – Höhenkurven, Geschwindigkeitsanzeigen und Gate-Karten verwenden vertraute visuelle Metaphern anstelle abstrakter Fortschrittsbalken.
Der Blinzeltest
Blinzeln Sie beim Betrachten Ihres Designs. Können Sie die Hierarchie noch erkennen? Falls ja, ist sie stark.
Abstände & Rhythmus
„Weißraum ist wie Luft: Er ist notwendig, damit Design atmen kann.” — Wojciech Zieliński
Abstände sind die unsichtbare Struktur des Designs. Konsistente Abstände erzeugen visuellen Rhythmus – das Gefühl, dass Elemente in einem kohärenten System zusammengehören.
Das 8px-Raster
Das 8px-Raster ist der Industriestandard, weil es: - Sich gleichmäßig teilen lässt (8, 16, 24, 32, 40, 48…) - Mit gängigen Bildschirmdichten funktioniert (1x, 1,5x, 2x, 3x) - Konsistenten Rhythmus ohne Rechenaufwand erzeugt
:root {
--space-1: 4px; /* Tight: icon gaps */
--space-2: 8px; /* Compact: inline elements */
--space-3: 12px; /* Snug: form fields */
--space-4: 16px; /* Default: most gaps */
--space-6: 24px; /* Spacious: card padding */
--space-8: 32px; /* Section gaps */
--space-12: 48px; /* Major sections */
--space-16: 64px; /* Page sections */
--space-20: 80px; /* Hero spacing */
}
Innenabstand vs. Außenabstand
Innenabstand (padding): Raum innerhalb eines Elements Außenabstand (margin): Raum zwischen Elementen
Regel: Der Innenabstand sollte bei zusammengehörigen Gruppen typischerweise größer sein als der Außenabstand.
.card {
padding: 24px; /* Internal: spacious */
margin-bottom: 16px; /* External: less than padding */
}
Komponentenabstands-Muster
Karten:
.card { padding: 24px; border-radius: 12px; }
.card-header { margin-bottom: 16px; }
.card-title { margin-bottom: 4px; } /* Tight to subtitle */
Schaltflächen:
.btn { padding: 12px 24px; border-radius: 8px; }
.btn--sm { padding: 8px 16px; }
.btn--lg { padding: 16px 32px; }
.btn-group { display: flex; gap: 12px; }
Formulare:
.form-row { margin-bottom: 24px; }
.form-label { margin-bottom: 4px; }
.form-help { margin-top: 4px; }
.form-actions { margin-top: 32px; display: flex; gap: 12px; }
Kurzreferenz für Abstände
| Kontext | Empfohlener Abstand |
|---|---|
| Symbol zu Text | 4-8px |
| Label zu Eingabefeld | 4px |
| Zwischen Formulargruppen | 24px |
| Karteninnenabstand | 20-24px |
| Kartenabstand | 16-24px |
| Abschnittsinnenabstand (mobil) | 48-64px |
| Abschnittsinnenabstand (Desktop) | 80-96px |
| Schaltflächeninnenabstand (h/v) | 24px / 12px |
Animationsprinzipien
„Animation ist nicht die Kunst von Zeichnungen, die sich bewegen, sondern die Kunst von Bewegungen, die gezeichnet werden.” — Norman McLaren
Animation erweckt Oberflächen zum Leben. Gut eingesetzt lenkt sie die Aufmerksamkeit, kommuniziert Zustände und schafft eine emotionale Verbindung. Schlecht eingesetzt frustriert und lenkt sie ab.
Das Kernprinzip
Animation sollte sich unvermeidlich anfühlen, nicht dekorativ.
Gute Animation: 1. Kommuniziert etwas, das statisches Design nicht kann 2. Reduziert die kognitive Belastung, indem sie Zusammenhänge zeigt 3. Fühlt sich natürlich und erwartbar an 4. Verschwindet aus dem bewussten Wahrnehmen
Schlechte Animation: 1. Existiert nur, weil sie „cool aussieht” 2. Verlangsamt den Benutzer 3. Lenkt die Aufmerksamkeit auf sich selbst 4. Erzeugt Unruhe oder Ungeduld
Wichtige Prinzipien für UI
1. Antizipation — Bereiten Sie Benutzer auf das Kommende vor.
.button {
transition: transform 0.1s ease-out;
}
.button:active {
transform: scale(0.97); /* Slight press before action */
}
2. Nachfolgebewegung — Lassen Sie Bewegungen natürlich mit federartigem Einpendeln ausklingen.
.panel {
transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
withAnimation(.spring(response: 0.4, dampingFraction: 0.7)) {
isOpen = true
}
3. Ease-In, Ease-Out — Nichts in der Natur bewegt sich mit konstanter Geschwindigkeit.
| Kurve | Einsatzzweck | Charakter |
|---|---|---|
ease-out |
Eintreffende Elemente | Schneller Start, sanfter Stopp |
ease-in |
Austretende Elemente | Sanfter Start, schnelles Ende |
ease-in-out |
Zustandsänderungen | Durchgehend geschmeidig |
linear |
Ladeindikatoren | Kontinuierlich, mechanisch |
4. Inszenierung — Lenken Sie die Aufmerksamkeit auf das Wesentliche. Es sollte sich immer nur ein Element bewegen, es sei denn, die Bewegung ist als Gruppe choreographiert.
5. Staffelung — Elemente sollten nacheinander erscheinen, nicht alle auf einmal.
.list-item {
animation: fadeSlideIn 0.3s ease-out both;
}
.list-item:nth-child(1) { animation-delay: 0ms; }
.list-item:nth-child(2) { animation-delay: 50ms; }
.list-item:nth-child(3) { animation-delay: 100ms; }
.list-item:nth-child(4) { animation-delay: 150ms; }
@keyframes fadeSlideIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
Timing-Richtlinien
| Dauer | Einsatzbereich | Wirkung |
|---|---|---|
| 50–100ms | Mikrointeraktionen (Hover, Klick) | Sofortiges Feedback |
| 150–200ms | Einfache Zustandsänderungen (Umschalten, Auswählen) | Knackig |
| 250–350ms | Mittlere Übergänge (Panel-Einblendung, Karten-Flip) | Geschmeidig |
| 400–500ms | Große Bewegungen (Seitenübergänge, Modals) | Bewusst |
Performance: Die goldene Regel
Animieren Sie ausschließlich transform und opacity — diese sind GPU-beschleunigt und lösen kein Neuberechnen des Layouts aus.
/* BAD: Animating layout */
.panel { transition: left 0.3s, width 0.3s; }
/* GOOD: Using transform */
.panel { transition: transform 0.3s; }
Wann Sie NICHT animieren sollten
-
Der Benutzer hat
prefers-reduced-motionaktiviertcss @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } } -
Die Animation fügt keine Information hinzu — überflüssige Spinner, hüpfende Elemente
- Benutzer haben es eilig — Fehlerzustände, Formularvalidierung, Suchergebnisse
- Die Animation würde wiederholte Aktionen verlangsamen — Tastaturkürzel sollten Animationen überspringen
- Die Daten sind bereits geladen — Bear verwendet keine Ladezustände, indem Inhalte vorgeladen werden, sodass sich die App sofort anfühlt. Wenn Sie vorladen können, überspringen Sie Skeleton-Screens und Spinner vollständig.
// Bear's approach: preload so no loading state is needed
struct NoteListView: View {
@Query var notes: [Note] // SwiftData loads from disk instantly
// No loading state, no skeleton, no spinner — data is always there
var body: some View {
List(notes) { note in
NoteRow(note: note)
}
}
}
Kurzreferenz für Animationen
:root {
/* Durations */
--duration-instant: 0.1s;
--duration-fast: 0.15s;
--duration-normal: 0.25s;
--duration-slow: 0.4s;
/* Easings */
--ease-out: cubic-bezier(0.0, 0.0, 0.58, 1.0);
--ease-in: cubic-bezier(0.42, 0.0, 1.0, 1.0);
--ease-in-out: cubic-bezier(0.42, 0.0, 0.58, 1.0);
--ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1);
}
Interaktionsmuster
„Das beste Interface ist kein Interface.” — Golden Krishna
Interaktionsmuster definieren, wie Benutzer Ihr Produkt bedienen, navigieren und verstehen. Diese Muster wurden durch die Analyse von Produkten gewonnen, die herausragende Interaktionen bieten.
Direkte Manipulation (Framer)
Machen Sie abstrakte Konzepte greifbar. Framer verwandelt CSS-Breakpoints – abstrakte Zahlen – in ziehbare Griffe. Benutzer sehen, wie sich Layouts in Echtzeit anpassen.
/* Breakpoint handle styling */
.breakpoint-handle {
position: absolute;
top: 0;
bottom: 0;
width: 4px;
background: var(--accent);
cursor: col-resize;
opacity: 0.6;
transition: opacity 0.15s ease;
}
.breakpoint-handle:hover,
.breakpoint-handle:active {
opacity: 1;
width: 6px;
}
Wann einsetzen: Bei jeder Einstellung, deren Ergebnis visuell ist – Ziehen zum Ändern der Größe, Farbwähler, Timeline-Scrubbing.
Kontextbezogene Oberflächen (Flighty, Figma)
Zeigen Sie nur das, was im aktuellen Moment relevant ist. Flighty verwendet 15 verschiedene Zustände für die Flugverfolgung. Figmas Eigenschaftenpanel verändert sich vollständig, je nachdem, was Sie ausgewählt haben.
| Phase (Flighty) | Was Benutzer sehen |
|---|---|
| 24 Std. vorher | Bestätigungscode, Terminal-Info |
| Am Flughafen | Gate-Nummer, Boarding-Zeit |
| Im Flug | Verbleibende Zeit, Fortschritt, Ankunftszeit |
| Landung | Anschluss-Gates, Laufweg |
enum ContextState: CaseIterable {
case farOut, dayBefore, headToAirport, atAirport
case atGate, boarding, inFlight, landed, connection
static func current(for flight: Flight, context: UserContext) -> ContextState {
// Factor in: time, location, flight status
// Return the single most relevant state
}
}
Anti-Pattern: Alle Steuerelemente anzeigen und irrelevante ausgrauen. Das erzeugt visuelles Rauschen.
Intelligente Aktivierung (Halide)
Werkzeuge sollten den Kontext erkennen und sich selbst aktivieren. Halides Fokuslupe erscheint beim Ziehen des Fokus und verschwindet beim Loslassen. Keine Umschaltflächen nötig.
struct IntelligentlyActivated<Content: View>: ViewModifier {
let isInteracting: Bool
@State private var isVisible = false
func body(content: Content) -> some View {
content
.opacity(isVisible ? 1 : 0)
.scaleEffect(isVisible ? 1 : 0.95)
.animation(.easeInOut(duration: 0.2), value: isVisible)
.onChange(of: isInteracting) { _, newValue in
if newValue {
withAnimation { isVisible = true }
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
if !isInteracting { isVisible = false }
}
}
}
}
}
Dualmodus-Design (Halide, Warp)
Moduswechsel sollten die Oberfläche transformieren, nicht nur Elemente ein- und ausblenden. Halides Auto- und Manuell-Modus sind völlig unterschiedliche Oberflächen. Warp verbindet CLI und GUI durch vier Eingabemethoden (Tippen, Palette, AI, Maus), ohne Benutzer in ein einzelnes Paradigma zu zwängen.
Strukturierte Inhalte (Warp, Bear, Craft)
Fügen Sie traditionell unstrukturierten Inhalten Struktur hinzu. Warp macht Terminal-Ausgaben zu diskreten Blöcken, die kopiert, geteilt oder erneut ausgeführt werden können. Bear ermöglicht es, Notizen beim Schreiben inline zu organisieren (#tag/subtag). Craft lässt jeden Block zu einer Seite werden – Struktur entsteht durch Nutzung, nicht durch vordefinierte Hierarchie.
Progressives Training (Superhuman)
Bringen Sie Benutzern den schnellen Weg durch wiederholte Exposition bei. Superhumans Cmd+K-Palette zeigt immer Tastaturkürzel neben den Ergebnissen an. Jede Nutzung ist eine Mikro-Lektion.
/* Always show shortcut alongside command name */
.command-result {
display: flex;
justify-content: space-between;
padding: 8px 12px;
}
.command-shortcut {
font-family: var(--font-mono);
font-size: 12px;
color: var(--text-muted);
background: var(--bg-subtle);
padding: 2px 6px;
border-radius: 4px;
}
Anti-Pattern: Tutorial-Dialoge, die Funktionen erklären. Erklärungen werden vergessen; Übung bleibt hängen.
AI-Interface-Muster
„Die besten AI-Interfaces machen den Prozess der Maschine sichtbar und die Ausgabe der Maschine überprüfbar.”
AI-Interfaces stehen vor einzigartigen Herausforderungen: Benutzer können die Ausgabe nicht vorhersagen, die Genauigkeit nicht durch bloßes Hinsehen verifizieren und oft nicht erkennen, ob das System arbeitet oder fehlerhaft ist.
Das Kernproblem
| Traditionelle Software | AI-Software |
|---|---|
| Ausgabe ist vorhersehbar | Ausgabe variiert |
| Fehler sind offensichtlich | Fehler wirken plausibel |
| Benutzer verifizieren durch Testen | Benutzer verifizieren durch Quellenprüfung |
| Laden = Warten | Laden = Arbeiten (zeigen Sie es) |
| Vertrauen als Standard | Vertrauen muss verdient werden |
Quellenorientiertes Design (Perplexity)
Jede faktische Behauptung muss auf ihre Quelle verlinken. Perplexity bettet Inline-Zitate [1] in jede Aussage ein, mit Hover-Vorschau und einem dauerhaft sichtbaren Quellenbereich.
.citation-marker {
position: relative;
color: var(--accent);
cursor: pointer;
font-size: 0.8em;
vertical-align: super;
}
.citation-preview {
position: absolute;
bottom: 100%;
left: 50%;
transform: translateX(-50%);
width: 280px;
padding: 12px;
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
Anti-Pattern: AI-Interfaces, die Behauptungen ohne nachvollziehbare Quellen generieren. Wenn das Modell keine Quelle angeben kann, sollte die Oberfläche dies kennzeichnen.
Streaming-Phasenanzeigen (Perplexity)
Zeigen Sie Benutzern, was die AI tut, nicht nur, dass sie arbeitet. Ersetzen Sie generische Ladeanimationen durch Phasenanzeigen: „Suche läuft…” → „4 Quellen werden gelesen…” → „Antwort wird geschrieben…”
.phase-indicator {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 6px 12px;
background: color-mix(in srgb, var(--phase-color) 10%, transparent);
border-radius: 16px;
font-size: 13px;
color: var(--phase-color);
transition: all 0.3s ease;
}
.loading-dots span {
width: 4px;
height: 4px;
background: currentColor;
border-radius: 50%;
animation: pulse 1.4s ease-in-out infinite;
}
Fehlertransparenz
Wenn AI versagt oder unsicher ist, zeigen Sie es deutlich – verstecken Sie es nicht hinter selbstsicher klingendem Text.
| Situation | Schlechtes Muster | Gutes Muster |
|---|---|---|
| Geringe Konfidenz | Selbstsicher formulieren | „Ich bin nicht sicher, aber…” mit dezenterer Darstellung |
| Keine Quellen gefunden | Text erfinden | „Ich konnte keine Quellen für diese Aussage finden” |
| Widersprüchliche Quellen | Stillschweigend eine wählen | Beide anzeigen, Widerspruch hervorheben |
| Veraltete Informationen | Als aktuell darstellen | „Stand [Datum]…” mit Aktualitätsindikator |
Zentrale Erkenntnis: Benutzer verzeihen einer AI, die ehrlich mit Unsicherheit umgeht. Sie verzeihen keiner AI, die selbstsicher falsch liegt.
Dieter Rams: Zehn Grundsätze
„Weniger, aber besser.” — Dieter Rams
Dieter Rams ist der einflussreichste Industriedesigner des 20. Jahrhunderts. Als Leiter des Designs bei Braun von 1961 bis 1995 schuf er Produkte, die auch Jahrzehnte später zeitlos geblieben sind. Sein Werk inspirierte unmittelbar Apples Designsprache.
Die zehn Grundsätze guten Designs
1. Gutes Design ist innovativ Nicht kopieren. Verbinden Sie fortschrittliche Technologie mit innovativem Design.
2. Gutes Design macht ein Produkt brauchbar Jedes Element muss einem Zweck dienen. Die Form folgt der Funktion.
3. Gutes Design ist ästhetisch Schönheit ist nicht oberflächlich – sie ist essenziell. Produkte, die wir täglich nutzen, beeinflussen unser Wohlbefinden.
4. Gutes Design macht ein Produkt verständlich Benutzer sollten keine Anleitung benötigen. Die Oberfläche erklärt sich selbst.
5. Gutes Design ist unaufdringlich Design sollte unterstützen, nicht überwältigen. Der Inhalt des Benutzers steht im Mittelpunkt, nicht Ihre Oberfläche.
/* Obtrusive: UI competes with content */
.editor {
background: linear-gradient(135deg, purple, blue);
border: 3px dashed gold;
}
/* Unobtrusive: UI recedes, content shines */
.editor {
background: var(--color-background);
border: 1px solid var(--color-border);
}
6. Gutes Design ist ehrlich Keine Dark Patterns. Nicht zu viel versprechen. Transparent mit Einschränkungen umgehen.
7. Gutes Design ist langlebig Vermeiden Sie Trends, die schnell veralten. Klassisch statt modisch.
TRENDY (will date): TIMELESS:
- Extreme glassmorphism - Clean typography
- Neon colors, glitch effects - Subtle elevation
- Aggressive gradients - Neutral palette with considered accent
8. Gutes Design ist konsequent bis ins letzte Detail Nichts darf willkürlich sein. Ladezustände, leere Zustände, Fehlerzustände – alles durchgestaltet.
9. Gutes Design ist umweltfreundlich Performance ist Umweltschutz. Respektieren Sie die Aufmerksamkeit der Benutzer. Effizienter Code.
10. Gutes Design ist so wenig Design wie möglich Entfernen Sie alles, was nicht notwendig ist. Das beste Design ist unsichtbar.
Web-Patterns 2026
Modernes Webdesign nutzt native CSS-Funktionen, die in vielen Fällen JavaScript überflüssig machen. 2025–2026 brachte Anchor Positioning, Scroll-Driven Animations und @starting-style in produktionsreife Browser.
Container Queries
Dimensionieren Sie Komponenten basierend auf ihrem Container, nicht dem Viewport.
.card-grid {
container-type: inline-size;
container-name: card-grid;
}
.card {
display: grid;
gap: 16px;
padding: 20px;
}
@container card-grid (min-width: 400px) {
.card {
grid-template-columns: auto 1fr;
}
}
@container card-grid (min-width: 600px) {
.card {
padding: 32px;
gap: 24px;
}
}
Der :has()-Selektor
Elternselektion basierend auf Kindelementen – zuvor ohne JavaScript unmöglich.
/* Card with image gets different padding */
.card:has(img) {
padding: 0;
}
.card:has(img) .card-content {
padding: 20px;
}
/* Form group with error */
.form-group:has(.input:invalid) .form-label {
color: var(--color-error);
}
/* Highlight navigation when on that page */
.nav-item:has(a[aria-current="page"]) {
background: var(--color-surface);
}
CSS Nesting
Natives Verschachteln ohne Präprozessoren.
.card {
background: var(--color-surface);
border-radius: 12px;
padding: 24px;
& .card-title {
font-size: 1.25rem;
font-weight: 600;
margin-bottom: 8px;
}
& .card-body {
color: var(--color-text-secondary);
line-height: 1.6;
}
&:hover {
box-shadow: var(--shadow-md);
}
@media (min-width: 768px) {
padding: 32px;
}
}
HTMX-Integration
Servergesteuerte Interaktivität ohne schwergewichtige JavaScript-Frameworks.
<!-- Load content on click -->
<button hx-get="/api/more-items"
hx-target="#item-list"
hx-swap="beforeend"
hx-indicator="#loading">
Load More
</button>
<!-- Form with inline validation -->
<form hx-post="/api/contact"
hx-target="#form-response"
hx-swap="outerHTML">
<input type="email" name="email"
hx-post="/api/validate-email"
hx-trigger="blur"
hx-target="next .error" />
<span class="error"></span>
</form>
Anchor Positioning
Native CSS-Positionierung eines Elements relativ zu einem anderen – kein JavaScript nötig. Tooltips, Popovers und Dropdown-Menüs, die ihren Auslösern folgen.
/* Anchor an element to another */
.trigger {
anchor-name: --my-trigger;
}
.tooltip {
position: fixed;
position-anchor: --my-trigger;
top: anchor(bottom);
left: anchor(center);
translate: -50% 8px;
}
Scroll-Driven Animations
Verknüpfen Sie den Animationsfortschritt mit der Scrollposition. Lesefortschrittsanzeigen, Parallax-Effekte und Einblendsequenzen ohne JavaScript.
/* Reading progress bar */
.progress-bar {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 3px;
background: var(--color-primary);
transform-origin: left;
animation: progress linear;
animation-timeline: scroll();
}
@keyframes progress {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
@starting-style
Definieren Sie Ausgangsstile für Elemente, die ins DOM eingefügt werden – und ermöglichen Sie so reine CSS-Eingangsanimationen ohne JavaScript.
.card {
opacity: 1;
transform: translateY(0);
transition: opacity 0.3s ease, transform 0.3s ease;
@starting-style {
opacity: 0;
transform: translateY(10px);
}
}
Design-Token-System
Ein vollständiges Token-System für Konsistenz in Ihrer gesamten Anwendung.
:root {
/* Colors */
--color-text: #1a1a1a;
--color-text-secondary: #666666;
--color-text-muted: #999999;
--color-background: #ffffff;
--color-surface: #f8f9fa;
--color-surface-elevated: #ffffff;
--color-border: #e5e7eb;
--color-primary: #3b82f6;
--color-primary-hover: #2563eb;
--color-success: #10b981;
--color-warning: #f59e0b;
--color-error: #ef4444;
/* Typography */
--font-sans: system-ui, -apple-system, sans-serif;
--font-mono: "SF Mono", Consolas, monospace;
--text-xs: 0.75rem;
--text-sm: 0.875rem;
--text-base: 1rem;
--text-lg: 1.125rem;
--text-xl: 1.25rem;
--text-2xl: 1.5rem;
--text-3xl: 2rem;
--leading-tight: 1.25;
--leading-normal: 1.5;
--leading-relaxed: 1.75;
/* Spacing (8px base) */
--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-3: 0.75rem; /* 12px */
--space-4: 1rem; /* 16px */
--space-6: 1.5rem; /* 24px */
--space-8: 2rem; /* 32px */
--space-12: 3rem; /* 48px */
--space-16: 4rem; /* 64px */
/* Borders */
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-full: 9999px;
/* Shadows */
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
--shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
/* Transitions */
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
--duration-fast: 100ms;
--duration-normal: 200ms;
}
Dark Mode richtig umgesetzt
Nicht einfach invertieren – gezielt für dunkle Kontexte gestalten.
@media (prefers-color-scheme: dark) {
:root {
/* Neutrals */
--color-background: hsl(220, 13%, 10%);
--color-surface: hsl(220, 13%, 15%);
--color-surface-elevated: hsl(220, 13%, 18%);
--color-border: hsl(220, 13%, 23%);
/* Text (inverted) */
--color-text: hsl(220, 9%, 93%);
--color-text-secondary: hsl(220, 9%, 70%);
--color-text-muted: hsl(220, 9%, 55%);
/* Adjust saturation for dark mode */
--color-primary: hsl(220, 80%, 60%);
--color-success: hsl(142, 70%, 45%);
--color-error: hsl(0, 80%, 65%);
/* Shadows in dark mode need adjustment */
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
}
}
Prinzipien für den Dark Mode: - Sättigung auf großen Flächen reduzieren - Helligkeit von Akzentfarben erhöhen - Schatten verstärken (sie benötigen mehr Kontrast) - Dark Mode bewusst gestalten, nicht als nachträglichen Einfall
Figma-Extraktions-Workflows
Die Transformation von Designdateien in Produktionscode erfordert eine systematische Extraktion von Design Tokens – Farben, Typografie, Abstände und Effekte, die Ihre Designsprache definieren.
Figma Variables Export
Die native Variables-Funktion von Figma bietet den saubersten Extraktionspfad:
Exportschritte:
1. Figma-Datei öffnen → Panel „Local Variables”
2. Auf das Sammlungsmenü klicken → „Export to JSON”
3. Als figma-variables.json speichern
JSON-Token-Struktur:
{
"colors": {
"primitive": {
"blue-500": { "value": "#3b82f6", "type": "color" },
"blue-600": { "value": "#2563eb", "type": "color" }
},
"semantic": {
"primary": { "value": "{colors.primitive.blue-500}", "type": "color" },
"primary-hover": { "value": "{colors.primitive.blue-600}", "type": "color" }
}
},
"spacing": {
"1": { "value": "4px", "type": "spacing" },
"2": { "value": "8px", "type": "spacing" },
"4": { "value": "16px", "type": "spacing" }
}
}
Token-zu-CSS-Transformation
CSS Custom Properties:
:root {
/* Primitive colors (direct values) */
--color-blue-50: #eff6ff;
--color-blue-100: #dbeafe;
--color-blue-500: #3b82f6;
--color-blue-600: #2563eb;
--color-blue-900: #1e3a8a;
/* Semantic colors (reference primitives) */
--color-primary: var(--color-blue-500);
--color-primary-hover: var(--color-blue-600);
--color-background: var(--color-white);
--color-surface: var(--color-gray-50);
/* Spacing (8px grid) */
--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-4: 1rem; /* 16px */
--space-6: 1.5rem; /* 24px */
--space-8: 2rem; /* 32px */
/* Typography */
--font-size-sm: 0.875rem;
--font-size-base: 1rem;
--font-size-lg: 1.125rem;
--line-height-tight: 1.25;
--line-height-normal: 1.5;
/* Effects */
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
}
Dark-Mode-Tokens:
@media (prefers-color-scheme: dark) {
:root {
--color-background: var(--color-gray-900);
--color-surface: var(--color-gray-800);
--color-text: var(--color-gray-100);
--color-text-secondary: var(--color-gray-400);
/* Adjusted shadows for dark mode */
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
}
}
Token-zu-SwiftUI-Transformation
Color Extension:
import SwiftUI
extension Color {
// MARK: - Primitive Colors
static let blue50 = Color(hex: "eff6ff")
static let blue500 = Color(hex: "3b82f6")
static let blue600 = Color(hex: "2563eb")
// MARK: - Semantic Colors
static let brandPrimary = Color.blue500
static let brandPrimaryHover = Color.blue600
// MARK: - Surface Colors
static let surfaceBackground = Color(light: .white, dark: Color(hex: "0f172a"))
static let surfaceElevated = Color(light: Color(hex: "f8fafc"), dark: Color(hex: "1e293b"))
}
extension Color {
init(hex: String) {
// Standard hex parsing implementation
}
init(light: Color, dark: Color) {
self.init(UIColor { traits in
traits.userInterfaceStyle == .dark ? UIColor(dark) : UIColor(light)
})
}
}
Abstandskonstanten:
enum Spacing {
static let xs: CGFloat = 4 // --space-1
static let sm: CGFloat = 8 // --space-2
static let md: CGFloat = 16 // --space-4
static let lg: CGFloat = 24 // --space-6
static let xl: CGFloat = 32 // --space-8
}
// Usage
VStack(spacing: Spacing.md) {
// ...
}
.padding(Spacing.lg)
Checkliste für die Designer-Übergabe
Was Designer exportieren sollten:
| Asset-Typ | Format | Hinweise |
|---|---|---|
| Farben | Variables JSON | Inklusive Light- und Dark-Mode |
| Typografie | Styles-Export | Schriftart, Größe, Stärke, Zeilenhöhe |
| Abstände | Variables JSON | Basiseinheit dokumentiert |
| Icons | SVG | Umrisse, einfarbig |
| Bilder | PNG @2x/@3x oder WebP | Mit Komprimierung |
| Komponenten | Figma-Links | Als Referenz bei der Implementierung |
Qualitätskriterien:
- [ ] Alle Farben als Variablen definiert (keine fest codierten Hex-Werte)
- [ ] Typografie verwendet definierte Textstile
- [ ] Abstände folgen dem Rastersystem (8px-Basis)
- [ ] Dark-Mode-Varianten vorhanden
- [ ] Interaktive Zustände dokumentiert (Hover, Active, Disabled)
- [ ] Responsive Breakpoints annotiert
- [ ] Barrierefreiheitsanforderungen vermerkt (Kontrastverhältnisse)
Was der Entwickler erhält:
- Token-Dateien (JSON/CSS/Swift je nach Plattform)
- Komponentenspezifikationen mit Maßangaben
- Asset-Exporte in den benötigten Formaten
- Interaktionsdokumentation (Zustände, Animationen)
- Barrierefreiheitsannotationen
Schnellreferenztabellen
Gestalt-Prinzipien
| Prinzip | Regel | Einsatz |
|---|---|---|
| Nähe | Zusammengehörig = nah beieinander | Formulare, Abschnitte |
| Ähnlichkeit | Gleiches Aussehen = gleiche Funktion | Buttons, Cards |
| Figur-Grund | Klare Ebenentrennung | Modale Dialoge, Cards |
| Kontinuität | Linien folgen | Zeitleisten, Ausrichtung |
| Geschlossenheit | Das Gehirn vervollständigt Formen | Icons, Scroll-Hinweise |
Typografie
| Element | Größe | Stärke | Zeilenhöhe |
|---|---|---|---|
| Fließtext | 16px | 400 | 1.5–1.7 |
| Überschriften | 24–48px | 600–700 | 1.1–1.2 |
| UI-Labels | 12–14px | 500 | 1.3–1.4 |
| Bildunterschriften | 12px | 400 | 1.4 |
Farbrollen
| Rolle | Light Mode | Dark Mode |
|---|---|---|
| Hintergrund | #ffffff | #0f172a |
| Oberfläche | #f4f5f7 | #1e293b |
| Rahmen | #e4e6ea | #334155 |
| Text | #1a1a2e | #f1f5f9 |
| Text (gedämpft) | #6b7280 | #94a3b8 |
| Primärfarbe | #3b82f6 | #60a5fa |
| Erfolg | #22c55e | #4ade80 |
| Fehler | #ef4444 | #f87171 |
Abstufungen der Abstände
| Token | Wert | Einsatz |
|---|---|---|
| –space-1 | 4px | Icon-Abstände |
| –space-2 | 8px | Inline-Elemente |
| –space-4 | 16px | Standardabstände |
| –space-6 | 24px | Card-Innenabstände |
| –space-8 | 32px | Abschnittsabstände |
| –space-16 | 64px | Seitenabschnitte |
Design-Checkliste
Bevor Sie eine Oberfläche veröffentlichen, überprüfen Sie:
Gestalt
- [ ] Zusammengehörige Elemente sind näher beieinander als nicht zusammengehörige (Proximity)
- [ ] Ähnliche Funktionen haben ähnliche Stile (Similarity)
- [ ] Klare Trennung zwischen Vordergrund und Hintergrund (Figure-Ground)
- [ ] Das Auge folgt dem Layout auf natürliche Weise (Continuity)
Typografie
- [ ] Die Grundschriftgröße beträgt mindestens 16px
- [ ] Die Zeilenhöhe liegt bei 1,5+ für Fließtext
- [ ] Die Zeilenlänge liegt unter 75 Zeichen
- [ ] Die Hierarchie ist klar erkennbar (3 Ebenen unterscheidbar)
- [ ] Durchgehend konsistente Skalierung verwendet
Farbe
- [ ] Alle Texte erfüllen den Kontrastwert von 4,5:1 (WCAG AA)
- [ ] Farbe ist nicht der einzige Indikator (auch Icons/Beschriftungen)
- [ ] Dark Mode wurde bewusst gestaltet
- [ ] 60-30-10-Verteilung wird eingehalten
Visuelle Hierarchie
- [ ] Das wichtigste Element auf der Seite ist sofort erkennbar
- [ ] Das Auge folgt der beabsichtigten Reihenfolge
- [ ] Ein klarer CTA pro Abschnitt
- [ ] Typografische Skalierung ist konsistent
Abstände
- [ ] Alle Abstände verwenden eine definierte Skala (keine willkürlichen Werte)
- [ ] Karten/Komponenten haben einheitliches Padding
- [ ] Mobile Abstände sind komfortabel
- [ ] Rasterausrichtung ist konsistent (8px Basis)
Interaktion
- [ ] Können Benutzer ihre Ziele erreichen, ohne über das Werkzeug nachzudenken?
- [ ] Passt sich die UI an den aktuellen Kontext an?
- [ ] Sind Werkzeuge nur sichtbar, wenn sie relevant sind?
- [ ] Lehrt wiederholte Nutzung schnellere Methoden?
AI-Oberflächen
- [ ] Jede sachliche Behauptung hat eine nachvollziehbare Quelle
- [ ] Streaming zeigt Prozessphasen, nicht nur einen Ladeindikator
- [ ] Fehlerzustände werden transparent angezeigt, nicht verborgen
- [ ] Ausgaben mit geringer Konfidenz werden visuell differenziert
Dieter Rams Check
- [ ] Kann etwas entfernt werden?
- [ ] Dient jedes Element einer Funktion?
- [ ] Würde dies in 5 Jahren veraltet wirken?
- [ ] Habe ich jeden Zustand gestaltet?
Ressourcen
Bücher: - As Little Design as Possible von Sophie Lovell (Dieter Rams) - The Elements of Typographic Style von Robert Bringhurst
Werkzeuge: - WebAIM Contrast Checker - Type Scale Generator - Figma Tokens Studio — Verwaltung von Design-Tokens
Designsysteme: - Apple HIG - Material Design 3 - Radix UI - shadcn/ui
Design-Studien
Tiefgehende Analysen von 16 herausragenden Produkten, die Muster und Prinzipien dokumentieren, die es wert sind, übernommen zu werden.
Entwicklerwerkzeuge
| Produkt | Wesentlicher Beitrag |
|---|---|
| Figma | Multiplayer-Präsenz, kontextbewusste Panels |
| Warp | Blockbasiertes Terminal, CLI-GUI-Brücke |
| Framer | Visuelles responsives Design, Property Controls |
| Vercel | Exzellenter Dark Mode, Ambient-Status |
| Linear | Optimistic UI, Keyboard-first-Workflow |
| Raycast | Erweiterungssystem, Schnellaktionen |
iOS-nativ (Apple Design Award Gewinner)
| Produkt | Wesentlicher Beitrag |
|---|---|
| Flighty | 15 intelligente Zustände, Live Activities, Datenvisualisierung |
| Halide | Intelligente Aktivierung, Gestensteuerung |
| Bear | Typografie-zentriert, Inline-Tagging |
| Craft | Native-first plattformübergreifend, verschachtelte Seiten |
| Things | Aufgeschobene Termine, Schnelleingabe-Muster |
Produktivität & AI
| Produkt | Wesentlicher Beitrag |
|---|---|
| Superhuman | 100ms-Regel, Command-Palette-Training, Übungs-Onboarding |
| Perplexity | Quellenorientierte AI, Streaming-Phasen |
| Notion | Block-System, Slash Commands |
| Arc | Spaces, geteilte Ansicht, Befehlsleiste |
| Stripe | Herausragende Dokumentation, API-Design |
Dieser Leitfaden wächst durch Praxis. Designprinzipien sind zeitlos, aber ihre Anwendung entwickelt sich mit Technologie und Verständnis weiter.