Mode sombre et mode claire
2 juin 2023CSS
-
Utiliser les propriétés personnalisées (custom properties en anglais) pour gérer vos couleurs
Donné un nom fonctionnel ou plus simplement numérote vos couleurs !body { background:var(--color1); color:var(--color2); }
-
Créer le thème par défaut dans
:root
Mode clair par défaut
:root { --color1:white; --color2:black; --color3:#F2F2F2; }
Mode sombre par défaut
:root { --color1:#222; --color2:#FFF; --color3:#555; }
-
Définissez le jeu de couleurs du navigateur avec la propriété
color-scheme
;Lorsqu'un utilisateur sélectionne un de ces jeux de couleurs, le système d'exploitation fait des ajustements à l'interface utilisateur. Cela comprend les contrôles de formulaires, les barres de défilement et les valeurs utilisées par le système de couleurs CSS.
Mode clair par défaut
:root { --color1:white; --color2:black; --color3:#F2F2F2; color-scheme: only light; }
La valeur
only
sert à désactiver le remplacement de couleur du mode nuit du moteur de rendu BlinkMode sombre par défaut
:root { --color1:#222; --color2:#FFF; --color3:#555; color-scheme: dark; }
-
Créé le thème équivalent pour l'autre mode
Mode clair par défaut
.dark { --color1:#222; --color2:#FFF; --color3:#555; color-scheme: dark; }
Mode sombre par défaut
.light { --color1:white; --color2:black; --color3:#F2F2F2; color-scheme: only light; }
JavaScript
-
let root = document.querySelector(":root");
-
Détecter la préférence de l'utilisateur
Mode clair par défaut
if ( window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches ) { root.classList.toggle("dark"); }
Mode sombre par défaut
Comme dans la grande majorité des cas, le thème clair n'est pas demandé (car par défaut), je conserve le thème sombre du site
-
Détecter le changement de préférence utilisateur
Mode clair par défaut
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => { if(e.matches) { root.classList.add("dark"); } else { root.classList.remove("dark"); } });
Mode sombre par défaut
Pas de détection non plus
-
Basculer de mode à tout instant en une action
Mode clair par défautdocument.querySelector("button").addEventListener("click", () => { event.preventDefault(); root.classList.toggle("dark"); });
Mode sombre par défautdocument.querySelector("button").addEventListener("click", () => { event.preventDefault(); root.classList.toggle("light"); });
-
Je recommande de sauvegarder dans le
localStorage
tout changement de mode afin de pouvoir le configurer lors de la prochaine visite
Démonstration
Basculer en mode sombre
See the Pen color-scheme by Pierre TL (@pierre_tl) on CodePen.
Mode sombre par défaut
See the Pen color-scheme : dark mode default by Pierre TL (@pierre_tl) on CodePen.