CSS-Variablen und Dark Mode – ein Theme, das sich selbst umschaltet
Mit CSS Custom Properties definierst du Farben an einer Stelle und nutzt sie überall. Der Clou: Für den Dark Mode überschreibst du nur die Variablen – nicht jede einzelne Regel. Ich zeige beides, inklusive automatischer System-Erkennung.
CSS-Variablen (offiziell „Custom Properties") sind der einfachste Weg zu einem konsistenten Design – und die Grundlage für einen sauberen Dark Mode. Du definierst Farben einmal und nutzt sie überall.
Variablen definieren und nutzen
:root {
--bg: #ffffff;
--text: #1a1a1a;
--accent: #2563eb;
}
body {
background: var(--bg);
color: var(--text);
}
a { color: var(--accent); }Alles hängt jetzt an drei Werten. Willst du die Akzentfarbe ändern, tust du das an einer Stelle statt in 50 Regeln.
Dark Mode: nur die Variablen überschreiben
Der eleganteste Teil: Für den dunklen Modus tauschst du nur die Werte aus – alle Regeln, die var(--bg) nutzen, ziehen automatisch mit.
/* folgt der System-Einstellung des Nutzers */
@media (prefers-color-scheme: dark) {
:root {
--bg: #0f172a;
--text: #e2e8f0;
--accent: #60a5fa;
}
}Kein Duplizieren von Regeln, kein .dark .karte { … } für jedes Element. Ein Variablen-Block, fertig.
Manueller Umschalter
Willst du zusätzlich einen Button anbieten, hängst du die Werte an ein Attribut und setzt es per JavaScript:
:root[data-theme="dark"] {
--bg: #0f172a;
--text: #e2e8f0;
}document.documentElement.dataset.theme = "dark"; // umschaltenSo folgt die Seite standardmäßig dem System, lässt sich aber per Klick übersteuern. Genau dieses Muster nutze ich auf meinen Websites und im Admin-Backend. Mehr Snippets auf code.bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
color-mix() – Hover- und Dark-Mode-Farben ausrechnen lassen, statt sie zu pflegen
Für jede Markenfarbe eine hellere, eine dunklere und eine transparente Variante von Hand zu pflegen, ist Fleißarbeit mit Fehlerquote. color-mix() mischt sie im Browser – aus genau einer Quellfarbe.
:is() und :where() – kürzere Selektoren, und einer davon wiegt nichts
Drei fast gleiche Selektoren untereinander, nur weil die Überschrift mal h2 und mal h3 heißt? :is() fasst das zusammen. Und :where() macht dasselbe, ohne die Spezifität hochzutreiben – der Unterschied ist der ganze Trick.
content-visibility – lange Seiten rendern, ohne dass der Browser alles auf einmal baut
Bei sehr langen Seiten rechnet der Browser Layout und Malen für jeden Abschnitt – auch für die, die 8.000 Pixel weiter unten liegen. Eine CSS-Eigenschaft verschiebt diese Arbeit auf den Moment, in dem sie gebraucht wird.