Zum Inhalt springen
Design Tokens

Dark Mode mit Tailwind CSS sauber umsetzen

Wie du Dark Mode über Rollen statt über Farbwerte baust, ihn ohne Flackern umschaltest und die Stellen kennst, die im Dunkeln kippen: Bilder, Schatten und Kontrast.

9 Min. LesezeitStand: 24. August 2026
Design TokensTailwindCSSBarrierefreiheit
nordfeld.studio10 Werte4 Rollen
  • primary#1f5eff
  • surface#f8fafc
  • text#0f172a
  • border#e2e8f0

Dark Mode ist keine zweite Farbpalette, sondern dieselbe Seite bei anderem Licht. Wer nur Schwarz und Weiß tauscht, bekommt graue Flächen, unlesbare Ränder und Bilder, die aus der Seite herausleuchten. Dieser Leitfaden zeigt, wie du den dunklen Modus über Rollen aufbaust, ihn ohne Flackern umschaltest und die Stellen prüfst, an denen es fast immer klemmt.

Das Wichtigste in Kürze
  • Nicht Farben umschalten, sondern Rollen. Hintergrund, Fläche, Text und Rand bekommen je Modus einen Wert.
  • Reines Schwarz ist selten richtig. Ein sehr dunkles Grau wirkt ruhiger und lässt Flächen überhaupt erst sichtbar werden.
  • Schatten funktionieren im Dunkeln nicht. Tiefe entsteht dort über hellere Flächen, nicht über dunklere Kanten.
  • Die Einstellung des Systems ist die Vorgabe, die Auswahl des Nutzers schlägt sie. Beides zusammen braucht eine Zeile im head, sonst flackert die Seite beim Laden.
01

Rollen statt Farbwerte

Der häufigste Fehler steht schon im Markup: An jedem Element hängen zwei Farben, eine für hell und eine für dunkel. Bei zwanzig Komponenten sind das vierzig Entscheidungen, die niemand zusammenhält.

Sauberer ist eine Schicht dazwischen. Du benennst, wofür eine Farbe da ist, nicht welche sie ist: Grund für die Seite, Fläche für alles, was darauf liegt, Text für die Schrift, Rand für die Trennung. Diese Rollen bekommen je Modus einen Wert, und die Komponenten kennen nur noch die Rolle.

Der Gewinn zeigt sich beim nächsten Wunsch. Soll das Dunkle einen Tick wärmer werden, änderst du vier Werte an einer Stelle statt vierzig im Code verteilt.

Ausgelesen16 Farben, viele davon fast gleich.
#1f5eff#1f5dfe#2060ff#0f172a#0f172b#111827#ffffff#fefefe#f8fafc#f7f9fb#e2e8f0#e3e8f1#64748b#65748a#94a3b8#1f5eff
BehaltenVier Rollen, jede mit einer Aufgabe.
  • primaryPrimärfarbe#1f5eff
  • surfaceFläche#f8fafc
  • textText#0f172a
  • borderRand#e2e8f0

Links viele einzelne Farbwerte, rechts vier Rollen, die den Modus tragen.

Erst der helle Modus, dann der dunkleSolange die Rollen im Hellen nicht sitzen, verdoppelst du im Dunkeln nur das Durcheinander. Ist der helle Modus sauber, ist der dunkle eine Liste von vier bis acht Werten.
02

Der Aufbau in Tailwind

In Tailwind hängen die Rollen an CSS-Variablen, und der dunkle Modus überschreibt genau diese Variablen. Die Klassen im Markup bleiben dabei unverändert, denn bg-surface heißt in beiden Modi dasselbe, nur der Wert dahinter wechselt.

Für das Umschalten gibt es zwei Wege. Die Systemeinstellung liest die Abfrage prefers-color-scheme, eine eigene Auswahl hängt an einer Klasse am html-Element. Wer beides anbietet, definiert die Werte zweimal: einmal in der Abfrage, einmal an der Klasse.

Ein Detail wird gern vergessen: color-scheme. Diese Angabe sagt dem Browser, wie er Scrollbalken, Auswahlfelder und Eingaben zeichnen soll. Ohne sie bleiben mitten in der dunklen Seite ein paar strahlend helle Bedienelemente stehen.

:root {  color-scheme: light;  --color-base: #ffffff;  --color-surface: #f5f5f4;  --color-text: #1c1917;  --color-border: #e7e5e4;} @media (prefers-color-scheme: dark) {  :root:not(.light) {  color-scheme: dark;    --color-base: #0c0a09;    --color-surface: #1c1917;    --color-text: #e7e5e4;    --color-border: #292524;  }}
Die Rollen einmal hell, einmal dunkel. Die Klasse gewinnt gegen die Systemeinstellung.
03

Umschalten ohne Flackern

Wenn die gespeicherte Auswahl erst läuft, nachdem React geladen hat, zeichnet der Browser vorher eine helle Seite. Der Wechsel danach ist als kurzes Aufblitzen sichtbar, und genau daran erkennt man einen nachträglich eingebauten Dark Mode.

Die Lösung ist unspektakulär: ein kurzes Skript im head, das die gespeicherte Auswahl liest und die Klasse am html-Element setzt, bevor der erste Pixel steht. Es läuft ohne Framework, ohne Import und braucht keine zehn Zeilen.

Der Umschalter selbst kennt danach drei Zustände: hell, dunkel und der Einstellung des Systems folgen. Der dritte gehört dazu, denn viele Geräte wechseln abends von selbst, und diese Automatik sollte man nicht mit einer einmaligen Auswahl abschalten.

Kein Übergang auf dem GrundtonEine Farbanimation auf Hintergrund und Text sieht beim Umschalten schmutzig aus, weil jede Fläche eine eigene Zwischenfarbe durchläuft. Lass den Wechsel hart sein, er dauert ohnehin nur einen Frame.

Wenige Rollen schlagen viele Werte.

Eine Liste aus Hex-Zahlen ist eine Bestandsaufnahme. Ein System wird daraus erst, wenn jeder Wert eine Aufgabe hat.

FarbeVier Rollen statt sechzehn Werten.
TypografieEine Skala, keine Einzelfälle.
AbstandVier Pixel als Schritt reichen.
04

Was im Dunkeln kippt

Farben sind der einfache Teil. Auffällig wird ein dunkler Modus an den Stellen, die niemand als Farbe gedacht hat: Bilder mit weißem Hintergrund, Schatten, Logos als schwarze Datei und Diagramme mit hellem Raster.

Bilder brauchen entweder einen transparenten Hintergrund oder einen Rahmen, der sie in die Seite einbindet. Ein Foto darf hell bleiben, ein Logo nicht: Für Logos und Icons lohnt sich eine zweite Fassung, die dem Text folgt statt einer festen Farbe.

Häufig gesehen
  • Reines Schwarz als Grund. Jede Fläche darauf wirkt wie ein Loch, und Ränder verschwinden.
  • Derselbe Schatten wie im Hellen. Man sieht ihn nicht, die Karte klebt am Hintergrund.
  • Weiße Schrift in dünnem Schnitt. Sie blüht auf dunklem Grund aus und wird schwer lesbar.
Trägt
  • Sehr dunkles Grau als Grund, die Flächen darüber eine Stufe heller.
  • Tiefe über Helligkeit: Was vorne liegt, ist heller, nicht dunkler umrandet.
  • Gebrochenes Weiß für Text und ein Schnitt, der nicht zu dünn ist.
05

Vor dem Ausliefern prüfen

Der dunkle Modus fällt selten beim Bauen durch, sondern in den Zuständen, die man beim Bauen nicht sieht.

  1. Formulare in allen Zuständen. Leer, ausgefüllt, mit Fehler, deaktiviert und im Fokus. Besonders der Fokusring geht im Dunkeln gern unter, weil er dieselbe Helligkeit hat wie der Rand daneben.
  2. Alles, was über der Seite liegt. Menüs, Dialoge und Hinweise haben oft eine eigene Fläche im Code. Wenn eine davon vergessen wurde, leuchtet sie hell auf der dunklen Seite.
  3. Der erste Aufruf im privaten Fenster. Ohne gespeicherte Auswahl greift die Systemeinstellung. Nur so siehst du, was neue Besucher wirklich bekommen.
  4. Der Ausdruck. Ein dunkler Grund wird auf Papier zu einer schwarzen Seite. Eine kleine Regel für den Druck spart Toner und Ärger.

Ein guter dunkler Modus fällt nicht auf. Er wirkt nur so, als wäre die Seite immer so gemeint gewesen.

Teilen
Geschrieben von
Amelie RoesmannCreative DirectionLeonie RoesmannDesign Engineering

Wir bauen Websites und Web-Apps bei Systra Studios in Münster und legen die Bausteine daraus hier ab. Was in den Beiträgen steht, kommt aus echten Projekten, nicht aus einem Werbeprospekt.

Systra Studios: Webdesign aus Münster

Du weißt, worauf es ankommt.
Das Auslesen übernimmt das Werkzeug.

URL eingeben, Farben, Typografie und Abstände bekommen. Als DESIGN.md für Menschen oder als tokens.json für den Build.

  • Farben werden am gerenderten Bild geprüft.
  • Nahe beieinander liegende Werte werden zusammengefasst.
  • Ausgabe als Markdown oder JSON, beides zum Kopieren.
Style Extractor öffnen
Ergebnis
  • primary#1f5eff
  • surface#f8fafc
  • text#0f172a
  • border#e2e8f0
TypografieAaInter · 16 / 20 / 28 / 40
FAQ

Häufige Fragen

Weil die Tiefe fehlt. Im Hellen trennt ein Schatten die Karte vom Hintergrund, im Dunkeln sieht man ihn nicht. Dreh die Logik um: Je weiter vorne eine Fläche liegt, desto heller ist sie. Zwei bis drei Stufen reichen für eine ganze Oberfläche.

Deine Frage war nicht dabei? Wir helfen gern weiter.

Kontakt aufnehmen