TL;DR
- CSS kan godt være klar til dark mode, men JavaScript kan styre, hvornår temaet skifter.
- Et almindeligt mønster er at toggle en
dark-klasse påhtml. - Klassen kan bruges til at skifte
color-scheme. - Når det virker, kan du bagefter gøre løsningen mere brugervenlig og gemme brugerens valg.
Hvis du kun husker én ting: Lad JavaScript skifte én klasse, og lad CSS stå for hele temaets udseende.
Lad JavaScript styre temaet
Hvis temaet skal skifte, når brugeren klikker på en knap, skal JavaScript reagere på klikket og ændre noget i DOM’en.
Et helt klassisk begyndermønster er:
const html = document.querySelector("html");const btn = document.querySelector("#theme-btn");
function toggleTheme() { html.classList.toggle("dark");}
btn.addEventListener("click", toggleTheme);Her er idéen:
- find
html - find knappen
- lav en funktion
- koble funktionen til et klik
CSS’en reagerer på klassen
Når JavaScript toggler dark, kan CSS’en skifte tilstand:
html { color-scheme: light; --color-brand: light-dark(#5000ca, #e0d3ff); --background-primary: light-dark(#eee, #1b1b1b);}
html.dark { color-scheme: dark;}Det smarte er, at JavaScript ikke selv sætter farver. Det tænder bare en class, og så gør CSS resten.
Et godt samarbejde mellem HTML, CSS og JS
Denne type løsning er et godt eksempel på, at de tre teknologier arbejder sammen:
- HTML giver dig knappen
- CSS bestemmer udseendet
- JavaScript ændrer tilstanden
Det er et godt begyndermønster, fordi ansvaret er tydeligt fordelt.
Øvelser
Start med at få temaet til at skifte på klik:
Hvis du vil gøre løsningen mere brugervenlig, kan du bagefter prøve at huske brugerens valg: