Design Tokens: Vom Konzept zur Praxis

Design SystemsCSSTooling

Design Tokens sind das Gedächtnis eines Design Systems. Sie speichern die Entscheidungen, die ein Interface zur Einheit machen: Farben, Abstände, Schriftgrößen, Radii, Schatten.

Das klingt banal. Ist es nicht.

Das Problem vor Tokens

Stell dir vor, du hast ein Interface mit 47 verschiedenen Grautönen. Keiner davon ist absichtlich falsch — es sind die aufgesummierten Zufälligkeiten eines Systems, das ohne Vokabular gebaut wurde.

Das ist das Standard-Szenario ohne Design Tokens. Jeder Entwickler greift nach dem Grau, das ungefähr stimmt. Jeder Designer verwendet die Farbe, die im Kontext richtig aussieht. Das Ergebnis ist eine schleichende Inkohärenz — schwer zu sehen im Detail, offensichtlich im Ganzen.

CSS Custom Properties als Token-Layer

Die eleganteste Implementierung von Design Tokens im Web sind CSS Custom Properties. Kein Build-Step, kein Tooling-Overhead — nur Variablen, die überall verfügbar sind.

:root {
  --color-foreground: oklch(0.153 0.006 107.1);
  --color-muted: oklch(0.966 0.005 106.5);
  --radius-base: 0.45rem;
}

Der Vorteil gegenüber Sass-Variablen oder JavaScript-Konstanten: CSS Custom Properties sind zur Laufzeit veränderbar. Das ist die Basis für Theming, Dark Mode, User Preferences — ohne einen einzigen Rebuild.

Semantische Tokens: Die zweite Schicht

Primitive Tokens — --blue-500, --spacing-4 — beschreiben, was ein Wert ist. Semantische Tokens beschreiben, wofür er verwendet wird.

:root {
  /* Primitives */
  --grey-900: oklch(0.153 0.006 107.1);

  /* Semantics */
  --color-foreground: var(--grey-900);
  --color-text-muted: var(--grey-500);
}

Diese Trennung ist entscheidend: Wenn sich eine Entscheidung ändert — “Überschriften sollen jetzt dunkelblau statt fast-schwarz sein” — ändert man einen Token, und das Interface folgt überall.

Tokens in Tailwind v4

Tailwind v4 macht Design Tokens zur nativen Wahrheit. Der @theme-Block ist direkt an CSS Custom Properties gebunden:

@theme {
  --color-background: oklch(1 0 0);
  --font-sans: 'Geist Variable', sans-serif;
}

Tailwind generiert daraus Utility-Klassen: bg-background, text-foreground, font-sans. Die Wahrheit liegt im CSS, nicht in einer JavaScript-Konfigurationsdatei.

Das ist der richtige Weg.

Wann Tokens zu weit gehen

Es gibt einen Punkt, an dem Token-Systeme zu abstrakt werden. Wenn jeder Wert ein Token ist, verliert man die Orientierung. --border-radius-card-inner-subtle ist kein Token mehr — es ist ein Kommentar im falschen Format.

Ein gutes Token-System ist sparsam. Es benennt nur, was sich wiederholt und was sich ändern könnte. Alles andere ist lokale Entscheidung — und sollte es bleiben.