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
@layer in CSS: Kaskadenebenen statt !important-Wettrüsten
Irgendwann steht in jedem gewachsenen Stylesheet das erste !important – und ein halbes Jahr später das dreißigste. Mit @layer legst du die Reihenfolge einmal fest, und ab da gewinnt nicht mehr der längste Selektor, sondern die Ebene, die du bestimmt hast.
Tooltips ohne JavaScript – CSS Anchor Positioning
Ein Tooltip an einen Button hängen, der ausweicht, wenn oben kein Platz ist, und nicht am overflow: hidden der Elternbox scheitert – das brauchte jahrelang eine Bibliothek. Seit Firefox 147 kann das jeder große Browser in reinem CSS.
Schöne Zeilenumbrüche in CSS – text-wrap balance und pretty
Eine Überschrift, bei der ein einzelnes Wort einsam in der letzten Zeile hängt, sieht unruhig aus. Mit text-wrap balance und pretty überlässt du dem Browser das saubere Umbrechen – ohne manuelle <br> und ohne JavaScript.