Jetzt starten

Benennung von Design-Tokens: Das Drei-Ebenen-System und seine Schwachstellen

Alle konvergieren auf dieselben drei Ebenen und erhalten unterschiedliche Ergebnisse. Die Namenskonvention ist nicht der schwierige Teil. Die Herausforderung besteht darin, zu entscheiden, was überhaupt einen semantischen Namen verdient – und fast jedes gescheiterte Token-System scheiterte daran, zu viele Dinge zu benennen.

Aktualisiert 2026-07-27

Die drei Ebenen und ihr tatsächlicher Zweck

Die Konvention ist nahezu universell, was es einfach macht, die Struktur ohne die zugrunde liegende Logik zu übernehmen. Jede Ebene beantwortet eine andere Frage; zu wissen, welche das ist, verhindert, dass Dinge an der falschen Stelle platziert werden.

AntwortenBeispielVerwendet von
PrimitiveWelche Werte existieren in diesem Design?blue-600, space-4, radius-mdNur die semantische Ebene. Niemals Produktcode
SemantischWofür ist dieser Wert gedacht?--color-danger, --text-muted, --surface-raisedProduktcode. Dies ist die Ebene, gegen die entwickelt wird
KomponenteWo weicht eine Komponente legitim ab?--button-primary-bg, --tooltip-surfaceNur diese Komponente, und nur selten
Die drei Ebenen und ihre Aufgaben.

Die Regel, die dies ermöglicht, und diejenige, die am häufigsten verletzt wird: Nichts außerhalb der semantischen Ebene darf ein Primitive referenzieren. In dem Moment, in dem eine Komponente blue-600 direkt verwendet, wird die Primitive-Ebene zu einer öffentlichen API. Man kann dann keinen Wert mehr ändern, ohne die gesamte Codebasis zu prüfen – was genau der Grund für die Einführung der Ebenen war.

:root {
  /* Tier 1: primitives. Values only. Nobody uses these directly. */
  --blue-600: #2563eb;
  --red-600:  #dc2626;
  --gray-500: #6b7280;

  /* Tier 2: semantic. Roles. This is the public API. */
  --color-primary:   var(--blue-600);
  --color-danger:    var(--red-600);
  --text-muted:      var(--gray-500);

  /* Tier 3: component. Only where a component truly deviates. */
  --button-danger-bg: var(--color-danger);
}

/* ✅ product code */
.alert { color: var(--color-danger); }

/* ❌ reaches past the semantic layer */
.alert { color: var(--red-600); }

Das Benennungsmuster

Von links nach rechts lesen, von allgemein zu spezifisch: Kategorie, Rolle, Variante, Zustand. Nicht jeder Token benötigt alle vier; diejenigen, die es tun, sind in der Regel interaktiv.

KategorieRolleVarianteZustand
color-text-primarycolortextprimary
color-surface-raisedcolorsurfaceraised
color-action-primary-hovercoloractionprimaryhover
space-inset-lgspaceinsetlg
border-subtlebordersubtle
Das angewendete Muster.

Konsistenz ist weitaus wichtiger als das gewählte Muster. Eine Codebasis, in der die Hälfte der Tokens text-color-muted und die andere Hälfte color-text-muted heißt, zwingt alle Beteiligten dauerhaft zu jedem Zeitpunkt zu einer erneuten Überprüfung. Legen Sie eine Reihenfolge fest, dokumentieren Sie diese und setzen Sie sie im Review durch.

Ein praktischer Vorteil der Sortierung vom Allgemeinen zum Spezifischen: Die Tokens werden alphabetisch in sinnvollen Gruppen sortiert. Alle color-surface-* Tokens erscheinen gemeinsam in der Autovervollständigung des Editors, wodurch die Namenskonvention zu einem Mechanismus zur Entdeckung wird.

Hier ist das angewendete Muster, statt einer bloßen Beschreibung. Achten Sie auf die Rollennamen, nicht auf die Farben. Die Frage, die jeder Name beantworten muss, lautet: „Wofür ist dies gedacht?“. Ein Name, der nur beantwortet, „welche Farbe hat es“, erfüllt die Anforderungen seiner Ebene nicht.

Preview unavailable here. Browse complete kits in the kit gallery.

Der Test, mit dem schlechte Namen erkannt werden

Eine einzige Frage löst die meisten Diskussionen über die Benennung in Sekunden:

Wenn sich das Design ändern würde, wäre dieser Name dann immer noch zutreffend?

Wendet man dies auf reale Fälle an, sind die Antworten eindeutig:

Übersteht es das Redesign?Warum
--color-brand-blueNeinRebranding auf Grün, und der Name ist eine Lüge, die niemand zu korrigieren wagt
--color-primaryJaDie Rolle ändert sich nicht, wenn sich der Farbton ändert
--text-small-grayNeinZwei visuelle Fakten, die sich beide ändern werden
--text-mutedJaBenennt die Intention: de-emphasised Text
--shadow-cardNeinKodiert den Mechanismus. Wechselt man zu einer Hairline-Elevation, ist der Name falsch
--elevation-raisedJaBenennt den Effekt. Es kann ein Schatten, ein Rahmen oder eine Surface-Stufe sein
Namen, die ein Redesign überstehen, und Namen, die es nicht tun.

Der Fall --shadow-card ist ein subtiler, aber wichtiger Punkt. Einen Token nach seiner Implementierung zu benennen, zwingt die Implementierung auf. Sobald jede Card im Codebase box-shadow: var(--shadow-card) verwendet, wird der Wechsel zu einer border-basierten Elevation zu einem Refactoring statt zu einer Token-Änderung – genau die Kopplung, die Design-Tokens eigentlich vermeiden sollten.

Im Dark Mode scheitern farbbasierte Namen oft kläglich. --gray-100 als „heller Hintergrund“ ist in einem Theme korrekt und im anderen invertiert, sodass man am Ende bei einem --gray-100 landet, das fast schwarz ist, was alle verwirrt. --surface-base hingegen ist in beiden Fällen korrekt.

Warum die Komponentenebene ständig wächst

Die meisten Token-Systeme scheitern genau hier. Die Komponentenebene beginnt klein und sinnvoll, absorbiert dann aber alles, bis man schließlich vierhundert Tokens hat, von denen die Hälfte nur einen einzigen Consumer hat.

Der Mechanismus ist immer derselbe. Jemand benötigt einen Button-Hintergrund, der nicht ganz --color-primary entspricht. Das Hinzufügen von --button-primary-bg dauert dreißig Sekunden, aber das Hinzufügen zur semantischen Ebene erfordert eine Besprechung. Also wird der Komponententoken eingefügt, die nächste Person macht dasselbe, und die semantische Ebene verliert ihre Funktion als Source of Truth, ohne dass dies jemals explizit entschieden wurde.

Das eigentliche Problem
Mehrere Komponenten benötigen denselben nicht-semantischen WertEin fehlender semantischer Token. Benennen Sie die Rolle und stufen Sie ihn hoch
Eine Komponente benötigt einen wirklich einzigartigen WertLegitim. Genau dafür ist diese Ebene da. Sie sollte jedoch selten vorkommen
Eine ganze Surface benötigt unterschiedliche WerteEin fehlendes Theme oder ein fehlender Scope, keine Komponententokens. Schauen Sie sich an, was Encore mit Layers gemacht hat
Niemand kann sagen, welchen semantischen Token man verwenden sollDie semantische Ebene ist unterdefiniert oder schlecht benannt
Was eine wachsende Komponentenebene eigentlich über Sie aussagt.

Ein nützliches Audit: Zählen Sie die Tokens der Komponentenebene mit exakt einem Consumer. Wenn diese Zahl hoch ist, wird die Ebene als Notlösung missbraucht; die Lösung liegt eine Ebene höher.

Fünf Fehler und was jeder einzelne kostet

Diese Fehler treten in fast jedem Token-System auf, das irgendwann nicht mehr genutzt wird. Jeder Fehler ist leicht zu beheben, wenn er früh erkannt wird, und teuer, wenn nicht.

  1. 1

    Nummerierte Skalen ohne Anker

    color-1 bis color-12 sagt niemandem etwas, und die Zahlen erhalten ihre Bedeutung nur durch Folklore. Nummerierte Skalen sind in der Primitive-Ebene völlig in Ordnung, wo die Zahl eine reale Dimension wie die Helligkeit abbildet. In der semantischen Ebene sind sie niemals akzeptabel, da der Zweck dieser Ebene darin besteht, zu sagen, wofür etwas da ist.

  2. 2

    Das Theme im Namen kodieren

    --light-bg und --dark-bg als separate Tokens zu verwenden bedeutet, dass jede Komponente beide referenziert und verzweigt. Ein Name, zwei Werte, gewechselt durch das Theme: Genau dafür ist die Token-Ebene da. Wenn Sie if (theme === 'dark') im Komponentencode finden, sind die Tokens falsch benannt.

    /* ❌ */  --light-bg: #fff;  --dark-bg: #0a0a0a;
    /* ✅ */  --surface-base: #fff;
             [data-theme="dark"] { --surface-base: #0a0a0a; }
  3. 3

    Größen, die nach ihrem aktuellen Verwendungszweck benannt sind

    --text-hero ist in Ordnung, bis die Hero-Größe plötzlich in einer Preistabelle auftaucht. --text-4xl oder --font-scale-7 benennt die Stufe, nicht die Seite, und bleibt auch bei einer Wiederverwendung gültig. Benennen Sie nach der Position in einer Skala, nicht nach dem ersten Kunden.

  4. 4

    Statusfarben, die gleichzeitig als Markenfarben dienen

    Der häufigste Grund, warum ein System nicht mehr in der Lage ist, Zustände darzustellen. Wenn das Marken-Grün und das Erfolgs-Grün derselbe Token sind, kann die Marke nicht ohne eine Änderung der Erfolgsdarstellung neu gestaltet werden, und eine korrekte Zeile lässt sich nicht von einer markenspezifischen unterscheiden. Halten Sie den Status-Satz reserviert und vermerken Sie dies in einem Kommentar.

  5. 5

    Abkürzungen, die nur eine Person versteht

    --clr-bg-scndry spart elf Zeichen und kostet jeden Leser für immer einen Dekodierungsschritt – einschließlich eines Modells, das raten muss, ob scndry für secondary steht oder ein Tippfehler ist. Autocomplete macht die Länge nahezu vernachlässigbar. Schreiben Sie die Wörter aus.

Der zweite Punkt ist eine Überprüfung wert, die man heute durchführen sollte. Suchen Sie in Ihren Komponenten per Grep nach Theme-Bedingungen. Jede gefundene Bedingung ist ein Token, der eigentlich ein Name mit zwei Werten hätte sein sollen, und jede ist eine Stelle, an der der Dark Mode stillschweigend vom Light Mode abweichen wird.

Namen, die über die eigene Codebasis hinaus Bestand haben

Tokens müssen zunehmend wandern: von einem Design-Tool zu CSS, in ein Tailwind-Theme, in eine native Plattform, in ein shadcn-Registry-Element, in eine DESIGN.md, die ein Agent liest. Das stellt eine Anforderung an die Namen, über die die meisten Teams erst nachdenken, wenn der erste Export fehlschlägt.

Portabel?Warum
Punkte oder Slashes als TrennzeichenRiskantcolor.text.muted ist in JSON natürlich, in einer CSS-Custom-Property jedoch illegal. Bindestriche funktionieren überall.
Großschreibung oder Mixed CaseRiskantEinige Zielsysteme normalisieren die Groß-/Kleinschreibung, andere nicht. Durchgängige Kleinschreibung beseitigt diese Frage.
Tiefe VerschachtelungRiskantcolor.semantic.text.emphasis.high wird zu etwas Unlesbarem abgeflacht, das niemand zweimal tippen möchte.
Flach, kleingeschrieben, mit BindestrichenJa--color-text-muted funktioniert als CSS-Variable, als JSON-Key, als Tailwind-Key und als einfaches Wort im Fließtext.
Was einen Formatwechsel übersteht und was nicht.

Die praktische Regel: Wählen Sie Namen, die gleichzeitig eine gültige CSS-Custom-Property, ein gültiger JSON-Key und eine lesbare englische Phrase sind. Flach, kleingeschrieben und mit Bindestrichen erfüllt alle drei Kriterien. Zudem lassen sich die verschachtelten Gruppen des DTCG/W3C-Token-Formats wesentlich einfacher aus einem flachen Set generieren als umgekehrt.

Ein weiterer Portabilitätstest: Können Sie den Token-Namen in einem Meeting laut aussprechen, ohne ihn buchstabieren zu müssen? Wenn sich zwei Personen nicht darüber einig sind, wie ein Token ausgesprochen wird, werden sie ihn auch schriftlich nicht konsistent verwenden.

Einheitliche Namen für Design und Code

Die effektivste Entscheidung bei der Benennung ist nicht das Muster. Es ist die Frage, ob die Namen in Ihrem Design-Tool identisch mit den Namen im Code sind.

Salesforce's SLDS 2 ist das deutlichste veröffentlichte Beispiel: Die Figma-Library verwendet dieselben semantischen Hook-Namen wie das CSS (ihre Beispiele sind radius-border-4 und font-scale-4), sodass Designs eins-zu-eins auf den Live-Code abgebildet werden. Ihr erklärtes Ziel ist ein gemeinsames Vokabular, das Design und Entwicklung verbindet.

Die praktische Folge ist, dass eine ganze Klasse von Handoff-Bugs verschwindet. Wenn ein Designer font-scale-4 sagt und ein Entwickler font-scale-4 tippt, gibt es keinen Übersetzungsschritt und somit keinen Raum für Missverständnisse. Vergleichen Sie dies mit einem Figma-Style namens "Heading / Large", der auf eine CSS-Variable namens --text-2xl abgebildet wird, wobei jeder Handoff eine Suche ist und jede Suche eine Chance für eine Fehlinterpretation.

Wenn Sie nur eine Änderung an Ihrem Token-System vornehmen können, sorgen Sie dafür, dass die Namen über alle Tools hinweg übereinstimmen. Es kostet eine Umbenennung und entfernt eine dauerhafte Effizienzbremse.

Benennung, wenn ein Agent der Konsument ist

Die Benennung von Tokens war früher eine Frage der menschlichen Ergonomie: Autocomplete, Lesbarkeit, Onboarding. Zunehmend ist der intensivste Leser Ihrer Token-Datei ein Coding-Agent, und das ändert die Art der Fehler, die relevant sind.

Ein Mensch, der nicht weiß, welches von zwei Grautönen er verwenden soll, wird nachfragen oder einen wählen und im Review korrigiert werden. Ein Modell wird stillschweigend in jeder Datei, die es bearbeitet, einen auswählen, und die Inkonsistenz breitet sich schneller aus, als ein Review sie erfassen kann. Mehrdeutigkeit in der semantischen Ebene ist ein weitaus teurerer Defekt als früher.

Wir haben 299 DESIGN.md-Dateien analysiert, die für Agents veröffentlicht wurden, und festgestellt, dass 86 % Farben als reine Hex-Werte ohne jegliche semantische Rolle angeben. Nicht schlecht benannte Tokens: gar keine Tokens. Ein Modell, dem #6b7280 gegeben wird und dem gesagt wird, dass dies Teil der Palette ist, wird es überall dort verwenden, wo ein mittleres Grau plausibel ist: Fließtext, Rahmen, Icons, Platzhalter, deaktivierte Zustände. Fünf verschiedene Aufgaben, ein Wert, keine Möglichkeit, diese später unabhängig voneinander zu ändern.

Was der Agent tut
Gray: #6b7280Verwendet es gleichermaßen für Fließtext, Rahmen, Icons, Platzhalter und deaktivierte Zustände
--text-muted: #6b7280: nur für sekundären und unterstützenden Text. Rahmen verwenden --border-subtle. Deaktivierte Zustände verwenden --text-disabled.Wird für unterstützenden Text verwendet. Die anderen Aufgaben haben eigene Namen, sodass sie später voneinander abweichen können
Dasselbe Grau, auf zwei Arten beschrieben.

Die zweite Version kostet drei zusätzliche Zeilen, ermöglicht aber die Möglichkeit, Rahmen zu verdunkeln, ohne die Bildunterschriften zu verdunkeln – eine Änderung, die gewünscht sein wird und die in der ersten Version ohne eine prüfung des gesamten Codebases unmöglich wäre.

Die Design-Kits von Identity Forge liefern 28 semantische Farbrollen für Light- und Dark-Mode sowie Typografie, Spacing und Elevation, serialisiert in einer DESIGN.md, die ein Agent liest, bevor er Code schreibt. Kits durchsuchen oder Erklärung zu semantischen Farb-Tokens lesen.

Ein Startset

Wenn ein System von Grund auf benannt wird, ist dies ein vertretbares Minimum. Es ist bewusst klein gehalten. Ein System, das niemand mehr im Kopf behalten kann, wird ignoriert.

/* Surfaces — what things sit on */
--surface-base        /* the page */
--surface-raised      /* cards, panels */
--surface-overlay     /* modals, popovers */
--surface-sunken      /* wells, inset areas */

/* Text — by emphasis, never by colour */
--text-primary
--text-secondary
--text-muted
--text-disabled
--text-on-accent      /* text sitting on the accent colour */

/* Borders — by weight of presence */
--border-subtle
--border-strong
--border-focus

/* Action — the interactive colour and its states */
--action-primary
--action-primary-hover
--action-primary-active

/* Status — reserved. Nothing decorative uses these. */
--status-success
--status-warning
--status-danger
--status-info

Zwei Anmerkungen zu diesem Set. Text-Tokens werden nach der Betonung statt nach der Farbe benannt, damit sie im Dark-Mode konsistent bleiben. Status-Tokens enthalten einen Kommentar zur Reservierung, da das häufigste Problem bei Status-Systemen darin besteht, dass Designer das „Success-Grün“ als dekorativen Akzent verwenden und niemand mehr eine funktionierende Zeile von einer markenspezifischen unterscheiden kann.

Was ist die beste Benennungskonvention für Design-Tokens?

Drei Ebenen (primitive, semantische, Komponenten) mit Namen, die vom Allgemeinen zum Spezifischen gelesen werden: Kategorie, Rolle, Variante, Zustand. Die genaue Reihenfolge ist weitaus weniger wichtig als die konsistente Anwendung, da die eigentlichen Kosten von Inkonsistenz in einer notwendigen Nachschlageaktion bei jeder einzelnen Verwendung liegen.

Was ist der Unterschied zwischen primitiven und semantischen Tokens?

Ein Primitive benennt einen Wert (blue-600) und sagt nichts darüber aus, wo er hingehört. Ein semantischer Token benennt eine Aufgabe (--color-primary) und verweist auf ein Primitive. Produktcode sollte ausschließlich semantische Tokens verwenden, sodass die Änderung eines Wertes eine einzeilige Bearbeitung statt einer Prüfung der gesamten Codebase ist.

Sollten Tokens nach Farben benannt werden?

Nur in der primitiven Ebene, wo die Benennung des Wertes der Zweck ist. In der semantischen Ebene niemals: --color-brand-blue wird in dem Moment zur Lüge, in dem ein Rebranding erfolgt, und niemand benennt ihn um, weil zu viel davon abhängt. Benennen Sie die Rolle und lassen Sie den Wert darunter variieren.

Wie viele Design-Tokens sollte ein System haben?

Weniger als man denkt. Eine semantische Schicht von etwa 25 bis 40 Farbrollen plus Skalen für Typografie, Spacing und Elevation deckt die meisten Produkte ab. Wenn die Zahl über hundert steigt, prüfen Sie, wie viele Tokens genau einen Konsumenten haben: Diese Zahl verrät Ihnen, ob Sie ein System oder eine Liste haben.

Spielen Token-Namen jetzt eine größere Rolle, da KI den Code schreibt?

Ja, weil sich die Fehlerquelle verschoben hat. Ein Mensch, der unsicher ist, welches Grau zu verwenden ist, fragt nach oder wird im Review korrigiert. Ein Modell wählt in jeder Datei, die es bearbeitet, stillschweigend eines aus, sodass sich Mehrdeutigkeiten schneller verbreiten, als ein Review sie erfassen kann. Eindeutige Rollennamen mit definierten Zwecken sind die Lösung.