Dark mode toevoegen aan een website (CSS, Tailwind, Next.js)

Dark mode toevoegen aan een website

Dark mode toevoegen: CSS, Tailwind en Next.js | We.Inc

Voeg dark mode toe met prefers-color-scheme, CSS-variabelen en light-dark(), een schakelaar voor Licht/Donker/Systeem, Tailwind v4 en next-themes, zonder flits bij het laden.

De eenvoudigste dark mode is pure CSS: declareer color-scheme: light dark, bewaar kleuren in custom properties en wissel ze binnen @media (prefers-color-scheme: dark). Voor een handmatige schakelaar zet u een class of data-attribuut op het html-element, slaat u de keuze op in localStorage en past u die toe met een klein inline script in de head, zodat het verkeerde thema nooit even oplicht.

Welke aanpak past bij uw stack

Dark mode heeft drie bewegende delen: kleuren die kunnen wisselen, een manier om te bepalen welke set wordt gebruikt, en timing zodat de pagina de eerste keer meteen goed wordt getekend. Met de preview hieronder wisselt u op een voorbeeldlayout tussen licht, donker en systeem, en daarna geeft elke sectie de exacte code voor gewone CSS, Tailwind en Next.js.

Veelgestelde vragen

Hoe voorkom ik de witte flits als de pagina in dark mode laadt?

Bepaal het thema vóór de eerste paint. Zet een klein blokkerend script bovenaan de head dat de opgeslagen keuze en de systeemvoorkeur leest en de class of het attribuut op het html-element zet. Scripts aan het einde van de body of in een frameworkcomponent draaien te laat.

Hoe werkt dark mode in Tailwind?

In Tailwind v4 gebruikt de variant dark: standaard prefers-color-scheme, dus dark:bg-gray-900 geldt wanneer het systeem donker is. Om het met een schakelaar aan te sturen, voegt u @custom-variant dark (&:where(.dark, .dark *)); toe aan uw CSS en zet u de class dark op het html-element.

Hoe voeg ik dark mode toe in Next.js?

De gangbare route is het package next-themes met MIT-licentie. Wikkel de app in de ThemeProvider binnen de root layout, voeg suppressHydrationWarning toe aan de html-tag en roep setTheme uit useTheme aan in een client component. Het voegt het script tegen flitsen voor u in.

Wat doet color-scheme?

Het vertelt de browser welke schema's uw pagina ondersteunt, zodat ingebouwde onderdelen zoals formulierelementen, scrollbalken en de pagina-achtergrond bijpassende kleuren gebruiken. color-scheme: light dark op de root is ook vereist om de functie light-dark() zijn tweede waarde te laten kiezen.

Moet dark mode het systeem volgen of een schakelaar hebben?

Allebei. Gebruik standaard de systeemvoorkeur, want mensen hebben die al gekozen, en bied een schakelaar met Licht, Donker en Systeem zodat een bezoeker hem alleen voor uw site kan overschrijven.

Bouw eerst het palet met variabelen

De schakelaar toegankelijk maken

Server rendering en hydration

1. Pure CSS die het systeem volgt

Variabelen gewisseld via prefers-color-scheme

Het resultaatkader volgt de instelling van uw apparaat. Zet uw systeem op donker en het werkt bij zonder herladen.

Hetzelfde idee met light-dark()

Eén declaratie per kleur. Het vereist color-scheme op de root, en MDN vermeldt het als Baseline 2024.

2. Een schakelaar voor Licht, Donker en Systeem zonder flits

Inline script bovenaan de head

Draait voordat de body wordt getekend. Als er niets is opgeslagen, doet het niets, zodat de media query het systeem blijft volgen.

CSS die zowel het attribuut als het systeem respecteert

Het attribuut wint als het aanwezig is. Zonder attribuut beslist de media query.

De schakelaar zelf

Een select met drie opties. Systeem kiezen verwijdert de opgeslagen waarde.

3. Tailwind CSS v4

dark: utilities met een class-schakelaar

Zonder de regel @custom-variant volgt dark: prefers-color-scheme. Met die regel bepaalt de class dark op html het thema.

4. Next.js App Router met next-themes

Root layout en een client provider

ThemeProvider is een client component en staat dus in een eigen bestand. attribute="class" koppelt hem aan de Tailwind-class dark.

Schakelaar die wacht tot hij gemount is

De server kent het thema niet, dus het bedieningselement rendert na het mounten om een hydration mismatch te voorkomen.

Themapreview

Wissel tussen Licht, Donker en Systeem om een voorbeeldlayout te zien veranderen, inclusief de formulierelementen.

Thema

Licht

Donker

Systeem (nu donker)

Systeem (nu licht)

Bakkerij De Haven

Voorbeeld

Menu

Bezoek

Vers om 7 uur

Elke ochtend zuurdesem, rogge en meergranenbrood.

Bestel per e-mail

[email protected]

Weekaanbiedingen

Actief palet: donker, color-scheme: dark.

Actief palet: licht, color-scheme: light.

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap