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.
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
Container Queries – Komponenten, die auf ihren Platz reagieren, nicht auf den Bildschirm
Media Queries fragen die Bildschirmbreite ab. Container Queries fragen, wie breit der Container einer Komponente gerade ist – so passt sich eine Karte in der Sidebar anders an als dieselbe Karte im Hauptbereich. Endlich wirklich wiederverwendbare Bausteine.
Sanfte Übergänge in CSS – Hover-Effekte mit transition statt harter Sprünge
Ein guter Hover-Effekt springt nicht, er gleitet. Mit transition animierst du Farbe, Größe und Schatten weich – in einer Zeile. Ich zeige das Muster, warum du niemals transition: all nimmst und wie du Nutzer mit Bewegungsempfindlichkeit respektierst.
position: sticky – ein Header, der beim Scrollen oben kleben bleibt
Für einen mitfahrenden Header brauchst du kein JavaScript. Zwei CSS-Zeilen genügen mit position: sticky. Ich zeige das Muster, erkläre die eine Voraussetzung, die oft vergessen wird, und den häufigsten Grund, warum es „nicht klebt".