Guide / 17 min

Designprinzipien für Softwareentwickler

Designprinzipien für Softwareentwickler: Der vollständige Leitfaden

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

  1. Gestalt-Psychologie
  2. Typografie
  3. Farbtheorie
  4. Visuelle Hierarchie
  5. Abstände & Rhythmus
  6. Animationsprinzipien

Teil 2: Interaktion & KI

  1. Interaktionsmuster
  2. KI-Schnittstellenmuster

Teil 3: Designphilosophie

  1. Dieter Rams: Zehn Prinzipien

Teil 4: Umsetzung

  1. Web-Patterns 2026
  2. Design-Tokens-System
  3. Dark Mode richtig umgesetzt
  4. Figma-Extraktions-Workflows

Teil 5: Referenz

  1. Kurzreferenztabellen
  2. Design-Checkliste
  3. Design-Studien

Gestalt-Psychologie

„Das Ganze ist etwas anderes als die Summe seiner Teile.” — Kurt Koffka

Die in den 1920er-Jahren in Deutschland entwickelte Gestalt-Psychologie erklärt, wie Menschen visuelle Informationen wahrnehmen. Das Gehirn sieht keine einzelnen Pixel – es ordnet Elemente zu bedeutungsvollen Mustern. Beherrschen Sie diese Prinzipien, um gezielt zu steuern, wie Benutzer Ihre Oberflächen wahrnehmen.

Nähe (Proximity)

Elemente, die nahe beieinander stehen, werden als Gruppe wahrgenommen.

Dies ist das wirkungsvollste Gestalt-Prinzip im UI-Design. Abstände kommunizieren 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, gehen Benutzer davon aus, dass sie auch gleich funktionieren. Genau deshalb verwenden Designsysteme einheitliche Button-Stile, Kartengestaltungen 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 müssen sich klar vom Hintergrund abheben.

Das Gehirn muss die „Figur” (den Fokuspunkt) vom „Grund” (dem Hintergrund) unterscheiden können. Schwache 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.

Das Einschließen von Elementen in einen visuellen Container (Karte, Box, umrandeter Bereich) signalisiert Zusammengehörigkeit.

Kontinuität (Continuity)

Das Auge folgt Pfaden, Linien und Kurven.

Nutzen Sie Ausrichtung und visuellen Fluss, um die Aufmerksamkeit durch Ihre Oberfläche zu lenken.

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]                  Weiterhin an der linken Kante
└────────────────────────────────┘

Geschlossenheit (Closure)

Das Gehirn vervollständigt unvollständige Formen.

Benutzer benötigen nicht jedes einzelne Pixel – sie vervollständigen vertraute Formen gedanklich. Das 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, nicht zusammengehörig = fern Formularfelder, Inhaltsbereiche
Ähnlichkeit Gleiches Aussehen = gleiche Funktion Buttons, Karten, Navigation
Figur-Grund Klare Trennung der Ebenen Karten, Modale, Overlays
Gemeinsame Region Begrenzungen gruppieren Inhalte Einstellungsbereiche, Benutzerkarten
Kontinuität Linien und Ausrichtung folgen Zeitleisten, Lesefluss
Geschlossenheit Gehirn vervollständigt Formen Icons, Scroll-Hinweise, Skelette

Typografie

„Typografie ist das Handwerk, der menschlichen Sprache eine dauerhafte visuelle Form zu verleihen.” — Robert Bringhurst

Typografie bildet das Fundament des Interface-Designs. Text vermittelt Funktionalität, Hierarchie und Markenidentität. Schlechte Typografie erschwert die Bedienung von Oberflächen; großartige Typografie hingegen ist unsichtbar – sie funktioniert einfach.

Schriftgrößenskala (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 (Line Height / Leading)

Die Zeilenhöhe beeinflusst die Lesbarkeit erheblich. Verschiedene Inhaltsarten erfordern unterschiedliche Zeilenabstände.

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 Gut lesbare Absätze
Langform 1.7 - 2.0 Artikel, Dokumentation

Zeilenlänge (Measure)

Eine 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

Systemschriften 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 benutzerdefinierte Schriften für: - Markendifferenzierung (Marketing-Websites) - Redaktionelles oder publizistisches Erscheinungsbild - Gestalterische Absichten, die mit Systemschriften nicht umsetzbar sind

Schriftstärke für Hierarchie

Nutzen Sie Schriftstärke zur Hierarchiebildung – nicht nur Größ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 unmittelbar auf die Seele wirkt.” — Wassily Kandinsky

Farbe kommuniziert schneller als Worte. Sie schafft Stimmung, lenkt Aufmerksamkeit, signalisiert Bedeutung und stärkt die Markenwiedererkennung.

Die 60-30-10-Regel

Die zuverlässigste Farbverteilung für ausgewogene Benutzeroberflächen.

┌──────────────────────────────────────────┐
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│ 60% - Dominant (Hintergrund)
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░│ 30% - Sekundär (Karten, Bereiche)
│░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░│
│░░░░░▓▓▓▓▓▓▓▓▓▓▓▓██████▓▓▓▓▓▓▓▓▓▓░░░░░░░░│ 10% - Akzent (Schaltflächen, Links)
└──────────────────────────────────────────┘

Aufbau einer Farbpalette

Jede Benutzeroberfläche 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 Finanzen, Technologie, Unternehmen
Grün Wachstum, Natur, Erfolg Gesundheit, Ökologie, positive Zustände
Rot Energie, Dringlichkeit, Gefahr Warnungen, Verkaufsaktionen, Fehler
Orange Wärme, Begeisterung CTAs, verspielte Marken
Gelb Optimismus, Vorsicht Warnhinweise, Hervorhebungen
Lila Luxus, Kreativität Premium-Produkte

Dark-Mode-First-Design (Vercel)

Vercel gestaltet zuerst den Dark Mode und leitet daraus den Light Mode ab. Dieser Ansatz erzeugt bessere dunkle Oberflächen, weil der Dark Mode zur primären Designgrundlage wird – statt nur 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 einsetzen: Entwicklertools, Medien-Apps, Dashboards – überall dort, wo Nutzer lange Sitzungen verbringen und der Dark Mode die Augenbelastung reduziert.

Barrierefreiheit und 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 brachte Kriterien für Fokus-Sichtbarkeit, redundante Eingabe und barrierefreie Authentifizierung. Wesentliche Neuerungen: Fokusindikatoren 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 Nutzer zuerst, zweitens und drittens wahrnehmen. Ohne klare Hierarchie müssen Nutzer aktiv nach Informationen suchen. Mit ihr wirken Oberflächen mühelos.

Die sechs Werkzeuge der Hierarchie

1. Größe — Größere Elemente ziehen die Aufmerksamkeit zuerst 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 und 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 (content pages):     Z-PATTERN (landing pages):
████████████████████████      1 ──────────────────► 2
████████                            ↘
████                                     ↘
██                                            ↘
                                   3 ──────────────────► 4

5. Weißraum — Isolation erzeugt Bedeutsamkeit

.hero { padding: 120px 48px; }  /* Generous space */
.data-table { padding: 12px; }  /* Dense content */

6. Tiefe und Elevation — Hervorgehobene Elemente fordern 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 Benutzercursors mit Namensbeschriftungen, Auswahlhervorhebungen und Komponentenumrisse erzeugen ein lebendiges Dokument. Jede Mitarbeiterfarbe ist zwar unterschiedlich, aber gleich gewichtet – kein Cursor ist „lauter” als ein anderer.

Dezente Statusindikatoren (Vercel): Der Deployment-Status verwendet unauffällige, persistente Indikatoren statt aufdringlicher Warnmeldungen. Ein schmaler Farbbalken am oberen Rand kommuniziert den Zustand (wird erstellt, bereitgestellt, fehlgeschlagen), ohne den Arbeitsfluss zu unterbrechen.

Reale Design-Analogien (Flighty): Flugfortschrittsvisualisierungen orientieren sich an physischen Fluginstrumenten – Höhenkurven, Geschwindigkeitsanzeigen und Gate-Karten nutzen vertraute visuelle Metaphern anstelle abstrakter Fortschrittsbalken.

Der Blinzeltest

Blinzeln Sie Ihr Design an. Können Sie die Hierarchie noch erkennen? Falls ja, ist sie stark.


Abstände und Rhythmus

„Weißraum ist wie Luft: Er ist notwendig, damit Design atmen kann.” — Wojciech Zieliński

Abstände bilden die unsichtbare Struktur des Designs. Konsistente Abstände erzeugen visuellen Rhythmus – das Gefühl, dass Elemente zusammengehören und ein kohärentes System bilden.

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 Kopfrechnen 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 */
}

Innerer vs. äußerer Abstand

Innerer Abstand (padding): Raum innerhalb eines Elements Äußerer Abstand (margin): Raum zwischen Elementen

Regel: Der innere Abstand sollte innerhalb zusammengehöriger Gruppen in der Regel größer sein als der äußere.

.card {
  padding: 24px;        /* Internal: spacious */
  margin-bottom: 16px;  /* External: less than padding */
}

Komponentenabstände

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
Icon zu Text 4–8px
Label zu Eingabefeld 4px
Zwischen Formulargruppen 24px
Karteninnenabstand 20–24px
Kartenabstand 16–24px
Bereichsabstand (mobil) 48–64px
Bereichsabstand (Desktop) 80–96px
Schaltflächenabstand (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 haucht Interfaces Leben ein. Gut umgesetzt lenkt sie die Aufmerksamkeit, kommuniziert Zustände und schafft eine emotionale Verbindung. Schlecht umgesetzt frustriert und lenkt sie ab.

Das Kernprinzip

Animation sollte sich unvermeidlich anfühlen, nicht dekorativ.

Gute Animation: 1. Kommuniziert etwas, das statisches Design nicht vermitteln kann 2. Reduziert die kognitive Last, indem sie Zusammenhänge sichtbar macht 3. Fühlt sich natürlich und erwartet an 4. Verschwindet aus dem bewussten Wahrnehmen

Schlechte Animation: 1. Existiert nur, weil „es cool aussieht” 2. Bremst den Benutzer aus 3. Lenkt die Aufmerksamkeit auf sich selbst 4. Erzeugt Unruhe oder Ungeduld

Zentrale 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. Nachschwingen — Lassen Sie Bewegungen natürlich ausklingen, mit federartigem Einschwingen.

.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 Einsatzbereich Charakter
ease-out Eintretende Elemente Schneller Start, sanftes Stoppen
ease-in Austretende Elemente Sanfter Start, schnelles Verschwinden
ease-in-out Zustandswechsel Durchgehend gleichmäßig
linear Ladeanimationen Kontinuierlich, mechanisch

4. Inszenierung — Lenken Sie die Aufmerksamkeit auf das Wesentliche. Nur ein Element sollte sich gleichzeitig bewegen, es sei denn, die Bewegung ist als Gruppe choreografiert.

5. Zeitversetztes Erscheinen — Elemente sollten nacheinander erscheinen, nicht alle gleichzeitig.

.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, Drücken) Sofortiges Feedback
150–200ms Einfache Zustandswechsel (Umschalten, Auswählen) Zügig
250–350ms Mittlere Übergänge (Panel-Einblendung, Karten-Flip) Geschmeidig
400–500ms Große Bewegungen (Seitenübergänge, Modals) Bewusst wahrnehmbar

Performance: Die goldene Regel

Animieren Sie ausschließlich transform und opacity — diese werden 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

  1. Der Benutzer hat prefers-reduced-motion aktiviert css @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }

  2. Die Animation vermittelt keine Information — überflüssige Spinner, hüpfende Elemente

  3. Benutzer haben es eilig — Fehlerzustände, Formularvalidierung, Suchergebnisse
  4. Animation würde wiederholte Aktionen verlangsamen — Tastaturkürzel sollten Animationen umgehen
  5. Daten sind bereits geladen — Bear verwendet keinerlei Ladezustände, da Inhalte vorgeladen werden, wodurch sich die App sofort anfühlt. Wenn Sie vorladen können, verzichten Sie komplett auf Skeleton-Screens oder Spinner.
// 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)
        }
    }
}

Animations-Kurzreferenz

: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, darin navigieren und es verstehen. Diese Muster wurden durch die Analyse von Produkten gewonnen, die herausragende Interaktionen umsetzen.

Direkte Manipulation (Framer)

Machen Sie abstrakte Konzepte greifbar. Framer verwandelt CSS-Breakpoints — abstrakte Zahlenwerte — in ziehbare Anfasser. Benutzer sehen in Echtzeit, wie sich Layouts 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 Größenändern, Farbwähler, Zeitleisten-Scrubbing.

Kontextbezogene Interfaces (Flighty, Figma)

Zeigen Sie nur das an, was im jeweiligen Moment relevant ist. Flighty nutzt 15 verschiedene Zustände für die Flugverfolgung. Figmas Eigenschaftenpanel wandelt sich je nach Auswahl vollständig um.

Phase (Flighty) Was Benutzer sehen
24 Stunden vorher Bestätigungscode, Terminalinformationen
Am Flughafen Gate-Nummer, Boarding-Zeit
Im Flug Verbleibende Zeit, Fortschritt, voraussichtliche Ankunft
Landung Anschluss-Gates, Fußweg
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 Bedienelemente anzeigen und die irrelevanten ausgrauen. Das erzeugt visuelles Rauschen.

Intelligente Aktivierung (Halide)

Werkzeuge sollten den Kontext erkennen und sich selbstständig aktivieren. Halides Fokuslupe erscheint beim Ziehen des Fokuspunkts und verschwindet beim Loslassen. Kein Umschaltknopf 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 vollständig unterschiedliche Interfaces. Warp verbindet CLI und GUI über vier Eingabemethoden (Tippen, Palette, KI, Maus), ohne Benutzer in ein einziges Paradigma zu zwängen.

Strukturierte Inhalte (Warp, Bear, Craft)

Verleihen Sie traditionell unstrukturierten Inhalten Struktur. Warp macht Terminal-Ausgaben zu eigenständigen Blöcken, die kopiert, geteilt oder erneut ausgeführt werden können. Bear ermöglicht es, Notizen direkt beim Schreiben zu ordnen (#tag/subtag). Bei Craft kann jeder Block zu einer eigenen Seite werden — Struktur entsteht durch Nutzung, nicht durch vorgegebene Hierarchie.

Progressives Training (Superhuman)

Bringen Sie Benutzern den schnellen Weg durch wiederholte Exposition bei. Superhuman zeigt in der Cmd+K-Palette stets 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 haften.


KI-Interface-Muster

„Die besten KI-Interfaces machen den Prozess der Maschine sichtbar und die Ausgabe der Maschine überprüfbar.”

KI-Interfaces stehen vor einzigartigen Herausforderungen: Benutzer können die Ausgabe nicht vorhersagen, die Genauigkeit nicht durch bloße Inspektion überprüfen und oft nicht erkennen, ob das System funktioniert oder defekt ist.

Das Kernproblem

Traditionelle Software KI-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 erarbeitet werden

Quellenorientiertes Design (Perplexity)

Jede faktische Behauptung muss mit ihrer Quelle verknüpft sein. Perplexity bettet Inline-Zitationen [1] in jede Aussage ein, mit Hover-Vorschauen 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: KI-Interfaces, die Behauptungen ohne nachvollziehbare Quellen generieren. Wenn das Modell keine Quelle angeben kann, sollte das Interface dies kennzeichnen.

Streaming-Phasenanzeigen (Perplexity)

Zeigen Sie den Benutzern, was die KI gerade tut – nicht nur, dass sie arbeitet. Ersetzen Sie generische Ladeanimationen durch Phasenanzeigen: „Suche läuft…” → „4 Quellen werden gelesen…” → „Antwort wird verfasst…”

.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 die KI scheitert oder unsicher ist, zeigen Sie das deutlich – verstecken Sie es nicht hinter selbstbewusst klingendem Text.

Situation Schlechtes Muster Gutes Muster
Geringe Konfidenz Selbstbewusst formulieren „Ich bin nicht sicher, aber…” mit abgeschwächtem Styling
Keine Quellen gefunden Text erfinden „Für diese Aussage konnte ich keine Quellen finden”
Widersprüchliche Quellen Eine stillschweigend auswählen Beide anzeigen, Widerspruch hervorheben
Veraltete Information Als aktuell darstellen „Stand [Datum]…” mit Aktualitätsindikator

Zentrale Erkenntnis: Benutzer verzeihen einer KI, die ehrlich mit Unsicherheit umgeht. Sie verzeihen keiner KI, die selbstbewusst falsch liegt.


Dieter Rams: Zehn Prinzipien

„Weniger, aber besser.” — Dieter Rams

Dieter Rams ist der einflussreichste Industriedesigner des 20. Jahrhunderts. Als Leiter der Designabteilung bei Braun von 1961 bis 1995 schuf er Produkte, die auch Jahrzehnte später zeitlos geblieben sind. Seine Arbeit inspirierte unmittelbar Apples Designsprache.

Die zehn Prinzipien guten Designs

1. Gutes Design ist innovativ Nicht kopieren. Fortschreitende Technologie mit innovativem Design verbinden.

2. Gutes Design macht ein Produkt brauchbar Jedes Element muss einen Zweck erfüllen. 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 brauchen. Das Interface erklärt sich selbst.

5. Gutes Design ist unaufdringlich Design sollte unterstützen, nicht überwältigen. Der Inhalt des Benutzers steht im Mittelpunkt, nicht Ihr UI.

/* 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 verwenden. Nicht zu viel versprechen. Transparent mit Einschränkungen umgehen.

7. Gutes Design ist langlebig Trends vermeiden, die schnell veralten. Klassisch statt modisch.

TRENDIG (veraltet schnell):    ZEITLOS:
- Extremer Glassmorphismus     - Klare Typografie
- Neonfarben, Glitch-Effekte  - Subtile Tiefenwirkung
- Aggressive Verläufe         - Neutrale Palette mit durchdachtem Akzent

8. Gutes Design ist bis ins letzte Detail durchdacht Nichts darf willkürlich sein. Ladezustände, leere Zustände, Fehlerzustände – alles gestaltet.

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 Alles entfernen, was nicht notwendig ist. Das beste Design ist unsichtbar.


Webmuster 2026

Modernes Webdesign nutzt native CSS-Fähigkeiten, die in vielen Fällen den Einsatz von JavaScript überflüssig machen. 2025–2026 brachte Anchor Positioning, scrollgesteuerte Animationen 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);
}

Natives CSS-Nesting

Natives Nesting 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;
}

Scrollgesteuerte Animationen

Animationsfortschritt an die Scrollposition koppeln. 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 – so werden reine CSS-Eintrittsanimationen ohne JavaScript möglich.

.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 umsetzen

Nicht einfach invertieren – für dunkle Kontexte gezielt neu 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);
  }
}

Grundsätze 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) - Den Dark Mode bewusst gestalten – nicht als nachträglichen Einfall behandeln


Figma-Extraktions-Workflows

Design-Dateien in produktionsreifen Code zu überführen erfordert eine systematische Extraktion von Design-Tokens – Farben, Typografie, Abstände und Effekte, die Ihre Designsprache definieren.

Figma-Variablen exportieren

Die native Variablen-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)
        })
    }
}

Abstands-Konstanten:

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 Schrift, 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äts-Gate-Kriterien:

  • [ ] Alle Farben als Variablen definiert (kein hartcodiertes Hex)
  • [ ] Typografie verwendet definierte Textstile
  • [ ] Abstände folgen dem Rastersystem (8px Basis)
  • [ ] Dark-Mode-Varianten vorhanden
  • [ ] Interaktive Zustände dokumentiert (Hover, Aktiv, Deaktiviert)
  • [ ] Responsive Breakpoints annotiert
  • [ ] Barrierefreiheits-Anforderungen vermerkt (Kontrastverhältnisse)

Der Entwickler erhält:

  1. Token-Dateien (JSON/CSS/Swift je nach Plattform)
  2. Komponentenspezifikationen mit Maßangaben
  3. Asset-Exporte in den benötigten Formaten
  4. Interaktionsdokumentation (Zustände, Animationen)
  5. Barrierefreiheits-Annotationen

Schnellreferenz-Tabellen

Gestalt-Prinzipien

Prinzip Regel Einsatz
Nähe Zusammengehöriges = nah beieinander Formulare, Abschnitte
Ähnlichkeit Gleiche Optik = gleiche Funktion Buttons, Karten
Figur-Grund Klare Ebenentrennung Modals, Karten
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
Beschriftungen 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är #3b82f6 #60a5fa
Erfolg #22c55e #4ade80
Fehler #ef4444 #f87171

Abstandsskala

Token Wert Einsatz
–space-1 4px Icon-Abstände
–space-2 8px Inline-Elemente
–space-4 16px Standard-Abstände
–space-6 24px Karten-Innenabstand
–space-8 32px Abschnittsabstände
–space-16 64px Seitenabschnitte

Design-Checkliste

Vor der Veröffentlichung jeder Oberfläche überprüfen:

Gestalt

  • [ ] Zusammengehörige Elemente stehen näher beieinander als nicht zusammengehörige (Nähe)
  • [ ] Ähnliche Funktionen haben ähnliche Stile (Ähnlichkeit)
  • [ ] Klare Trennung zwischen Vorder- und Hintergrund (Figur-Grund)
  • [ ] Der Blick wandert natürlich durch das Layout (Kontinuität)

Typografie

  • [ ] Basis-Schriftgröße beträgt mindestens 16px
  • [ ] Zeilenhöhe liegt bei 1.5+ für Fließtext
  • [ ] Zeilenlänge unter 75 Zeichen
  • [ ] Hierarchie ist klar erkennbar (3 Ebenen unterscheidbar)
  • [ ] Durchgängig konsistente Skalierung

Farbe

  • [ ] Sämtlicher Text erfüllt das Kontrastverhältnis 4.5:1 (WCAG AA)
  • [ ] Farbe ist nicht der einzige Indikator (auch Icons/Labels)
  • [ ] Dark Mode bewusst gestaltet
  • [ ] 60-30-10-Verteilung eingehalten

Visuelle Hierarchie

  • [ ] Das wichtigste Element ist sofort identifizierbar
  • [ ] Der Blick folgt der beabsichtigten Reihenfolge
  • [ ] Ein klarer CTA pro Abschnitt
  • [ ] Typografie-Skalierung konsistent

Abstände

  • [ ] Alle Abstände nutzen die definierte Skala (keine magischen Zahlen)
  • [ ] Karten/Komponenten haben konsistenten Innenabstand
  • [ ] Abstände auf Mobilgeräten sind komfortabel
  • [ ] Rasterausrichtung ist konsistent (8px Basis)

Interaktion

  • [ ] Können Benutzer ihre Ziele erreichen, ohne über das Werkzeug nachdenken zu müssen?
  • [ ] Passt sich die UI an den aktuellen Kontext an?
  • [ ] Sind Werkzeuge nur sichtbar, wenn sie relevant sind?
  • [ ] Vermittelt wiederholte Nutzung schnellere Methoden?

KI-Oberflächen

  • [ ] Jede sachliche Aussage hat eine nachvollziehbare Quelle
  • [ ] Streaming zeigt Prozessphasen, nicht nur einen Spinner
  • [ ] Fehlerzustände werden transparent dargestellt, nicht verborgen
  • [ ] Ausgaben mit niedriger Konfidenz sind 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 — Design-Token-Verwaltung

Design-Systeme: - Apple HIG - Material Design 3 - Radix UI - shadcn/ui


Designstudien

Detaillierte Analysen von 16 herausragenden Produkten, die Muster und Prinzipien dokumentieren, die es wert sind, übernommen zu werden.

Entwicklerwerkzeuge

Produkt Wichtigster Beitrag
Figma Multiplayer-Präsenz, kontextabhängige Panels
Warp Blockbasiertes Terminal, CLI-GUI-Brücke
Framer Visuelles responsives Design, Property Controls
Vercel Exzellenter Dark Mode, ambienter Status
Linear Optimistic UI, Keyboard-first-Workflow
Raycast Erweiterungssystem, Schnellaktionen

iOS-nativ (Apple Design Award-Gewinner)

Produkt Wichtigster 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, Schnelleingabemuster

Produktivität & KI

Produkt Wichtigster Beitrag
Superhuman 100-ms-Regel, Command-Palette-Training, praxisorientiertes Onboarding
Perplexity Quellenorientierte KI, Streaming-Phasen
Notion Blocksystem, Slash-Befehle
Arc Spaces, Split View, Befehlsleiste
Stripe Herausragende Dokumentation, API-Design

Dieser Leitfaden wächst durch Praxis. Designprinzipien sind zeitlos, doch ihre Anwendung entwickelt sich mit Technologie und Verständnis weiter.