Dark mode webdesign: Best practices en implementatiegids
Dark mode is geëvolueerd van een ontwikkelaarsvoorkeur naar een mainstream ontwerpverwachting. Meer dan 80% van de ontwikkelaars gebruikt dark mode in hun IDE's, en grote besturingssystemen bevatten nu systeembrede donkere thema's. Gebruikers verwachten dat websites en applicaties hun voorkeur respecteren. Deze gids behandelt de ontwerpprincipes, kleurtheorie, CSS-implementatie en toegankelijkheidsoverwegingen die je nodig hebt om effectieve dark mode-ervaringen te creëren.
Waarom dark mode belangrijk is
Dark mode is niet alleen een esthetische keuze. Het biedt tastbare voordelen voor gebruikers. In omgevingen met weinig licht verminderen donkere achtergronden de belasting van de ogen door de hoeveelheid licht die door schermen wordt uitgezonden te minimaliseren. Voor OLED- en AMOLED-schermen verbruiken donkere pixels aanzienlijk minder stroom dan heldere, wat de batterijduur op mobiele apparaten verlengt. Dark mode creëert ook visuele hiërarchie door contrast, waardoor de aandacht wordt gevestigd op inhoud en interactieve elementen.
Slecht geïmplementeerde dark mode kan echter erger zijn dan geen dark mode. Hoog contrast tussen zuiver witte tekst en zuiver zwarte achtergronden veroorzaakt halatie, een visueel effect waarbij tekst lijkt te vervagen of te gloeien. De sleutel is het vinden van de juiste balans tussen contrast en comfort.
Kleurtheorie voor dark mode
De meest voorkomende fout in dark mode-ontwerp is simpelweg een licht kleurenschema inverteren. Deze aanpak faalt omdat kleurwaarneming verandert tegen donkere achtergronden. Kleuren die levendig lijken op wit kunnen garish of overweldigend lijken op donkere oppervlakken, terwijl subtiele verschillen in lichte tinten onzichtbaar worden op donkere.
Achtergrondkleuren
Vermijd zuiver zwart ( #000000 ) voor achtergronden. Zuiver zwart creëert overmatig contrast met witte tekst, wat leidt tot oogbelasting. Gebruik in plaats daarvan donkergrijze tinten met lichte kleuraccenten die diepte en visuele interesse toevoegen.
| Achtergrondniveau | Kleur | Gebruiksscenario |
|---|---|---|
| Basis | #0f172a | Pagina-achtergrond |
| Oppervlak | #1e293b | Kaarten, modals |
| Verhoogd | #334155 | Hover-statussen, dropdowns |
| Overlay | rgba(0,0,0,0.5) | Modal-backdrops |
Tekstkleuren
Vermijd eveneens zuiver wit ( #ffffff ) voor hoofdtekst. Gebruik gebroken witte tinten die de leesbaarheid behouden terwijl ze schittering verminderen. Houd zuiver wit achter voor koppen en nadruk.
- Primaire tekst: #e2e8f0 of #f1f5f9 voor comfortabel lezen
- Secundaire tekst: #94a3b8 voor beschrijvingen en labels
- Uitgeschakelde tekst: #64748b voor inactieve elementen
Accentkleuren
Accentkleuren hebben vaak aanpassing nodig voor dark mode. Verzadigde kleuren die goed werken op witte achtergronden kunnen lijken te trillen tegen donkere oppervlakken. Desatureer accentkleuren enigszins en verhoog hun lichtheid om de zichtbaarheid te behouden zonder visuele vermoeidheid te veroorzaken.
CSS-implementatie
De meest onderhoudbare aanpak voor dark mode gebruikt CSS-custom properties (variabelen) met de prefers-color-scheme media query. Hierdoor kun je kleuren één keer definiëren en thema's wisselen door variabele waarden te wijzigen.
CSS-custom properties gebruiken
:root {
--bg: #f8fafc;
--bg-card: #ffffff;
--text: #1e293b;
--text-muted: #64748b;
--primary: #3b82f6;
--border: #e2e8f0;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #0f172a;
--bg-card: #1e293b;
--text: #e2e8f0;
--text-muted: #94a3b8;
--primary: #60a5fa;
--border: #334155;
}
}
body {
background: var(--bg);
color: var(--text);
}Handmatige schakelaar met JavaScript
Terwijl prefers-color-scheme de systeemvoorkeur afhandelt, willen gebruikers ook een handmatige schakelaar. Sla de voorkeur op in localStorage en pas deze toe via een data-attribuut op het root-element.
function toggleTheme() {
const current = document.documentElement.dataset.theme;
const next = current === 'dark' ? 'light' : 'dark';
document.documentElement.dataset.theme = next;
localStorage.setItem('theme', next);
}
// On page load
const saved = localStorage.getItem('theme');
if (saved) {
document.documentElement.dataset.theme = saved;
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.dataset.theme = 'dark';
}Gebruik vervolgens attribuutkiezers in CSS naast de media query-aanpak:
[data-theme="dark"] {
--bg: #0f172a;
--bg-card: #1e293b;
--text: #e2e8f0;
}Omgaan met elevatie en diepte
In lichtmodus communiceren schaduwen elevatie. In dark mode zijn schaduwen minder zichtbaar tegen donkere oppervlakken. Gebruik in plaats daarvan progressief lichtere achtergrondkleuren om elevatie aan te geven. Elk elevatieniveau moet iets lichter zijn dan het niveau eronder, wat een visuele hiërarchie creëert die de manier nabootst waarop licht op verhoogde oppervlakken valt.
- Niveau 0: Basisachtergrond (donkerst)
- Niveau 1: Kaarten en containers (iets lichter)
- Niveau 2: Zwevende elementen zoals dropdowns (nog lichter)
- Niveau 3: Modals en dialogen (lichtst verhoogde oppervlak)
Afbeeldingen en media in dark mode
Heldere afbeeldingen kunnen schokkerend zijn tegen donkere achtergronden. Pas een lichte helderheidsreductie toe op afbeeldingen in dark mode met behulp van CSS-filters. Voor logo's en pictogrammen, voorzie in lichtgekleurde alternatieven.
[data-theme="dark"] img {
filter: brightness(0.9);
}
[data-theme="dark"] .logo-dark {
display: inline-block;
}
[data-theme="dark"] .logo-light {
display: none;
}Toegankelijkheidsoverwegingen
Dark mode moet dezelfde toegankelijkheidsstandaarden volgen als lichtmodus. De WCAG 2.1-richtlijnen vereisen een minimale contrastverhouding van 4.5:1 voor normale tekst en 3:1 voor grote tekst. Test je donkere thema met contrastcontroletools om naleving te garanderen.
- Vertrouw nooit alleen op kleur: Gebruik pictogrammen, patronen of labels naast kleur om informatie over te brengen.
- Test met schermlezers: Zorg ervoor dat thema-schakelaars toegankelijk zijn en hun status aankondigen.
- Respecteer prefers-reduced-motion: Schakel animaties uit of verminder ze voor gebruikers die de voorkeur geven aan verminderde beweging.
- Zorg voor voldoende focusindicatoren: Focusringen moeten in beide thema's zichtbaar zijn. Gebruik een contrasterende outlinekleur.
Veelvoorkomende dark mode-fouten
- Zuiver zwarte achtergronden gebruiken: Creëert overmatig contrast en halatie. Gebruik in plaats daarvan donkergrijze tinten.
- Vergeten schaduwen aan te passen: Donkere schaduwen op donkere achtergronden zijn onzichtbaar. Gebruik lichtere oppervlakkleuren voor elevatie.
- Afbeeldingen negeren: Heldere afbeeldingen op donkere achtergronden creëren visuele dissonantie. Pas helderheidsfilters toe of voorzie in donkere varianten.
- Kleuren hardcoderen: Maakt themawisseling onmogelijk. Gebruik altijd CSS-custom properties.
- Gebruikersvoorkeur niet bewaren: Als het thema bij navigatie wordt gereset, raken gebruikers gefrustreerd. Sla voorkeuren op in localStorage.
- Flash of unstyled content (FOUC): Gebruik een inline script vóór CSS om het thema in te stellen voordat de pagina wordt weergegeven.
Contrastverhoudingen nodig voor je dark mode-ontwerp? Probeer onze gratis Contrast Checker-tool om ervoor te zorgen dat je kleuren voldoen aan de WCAG-toegankelijkheidsstandaarden.
Controleer nu contrastVeelgestelde vragen
Moet ik zuiver zwart gebruiken voor dark mode-achtergronden?
Nee, zuiver zwart (#000000) creëert te veel contrast met witte tekst, wat oogbelasting en halatie-effecten veroorzaakt. Gebruik in plaats daarvan donkergrijze tinten zoals #121212, #1e293b of #0f172a. Deze bieden voldoende contrast voor leesbaarheid en zijn tegelijkertijd zachter voor de ogen.
Hoe detecteer ik de dark mode-voorkeur van de gebruiker in CSS?
Gebruik de prefers-color-scheme media query: @media (prefers-color-scheme: dark) { /* dark mode styles */ }. Hiermee worden automatisch donkere stijlen toegepast wanneer de gebruiker dark mode heeft ingeschakeld in de instellingen van het besturingssysteem.
Welke contrastverhouding moet dark mode-tekst hebben?
WCAG 2.1 vereist een minimale contrastverhouding van 4.5:1 voor normale tekst en 3:1 voor grote tekst. Gebruik in dark mode lichtgrijze tekst (#e2e8f0 of #f1f5f9) op donkere achtergronden in plaats van zuiver wit om schittering te verminderen met behoud van voldoende contrast.
Moet dark mode de standaard zijn?
Volg de systeemvoorkeur van de gebruiker met prefers-color-scheme. Als er geen voorkeur wordt gedetecteerd, is lichtmodus de veiligere standaard omdat deze bredere compatibiliteit heeft en door de meeste gebruikers de voorkeur krijgt tijdens dagelijks gebruik. Bied altijd een schakelaar zodat gebruikers handmatig kunnen wisselen.
Hoe ga ik om met afbeeldingen in dark mode?
Verminder de helderheid van afbeeldingen enigszins in dark mode met behulp van CSS-filter: brightness(0.9) om te voorkomen dat ze te helder lijken tegen donkere achtergronden. Voor logo's en pictogrammen, voorzie in lichtgekleurde versies. Overweeg het gebruik van opacity-aanpassingen voor decoratieve afbeeldingen.