
Dark mode en CSS natif : thème sombre automatique, mode manuel, aucun composant à réécrire

Votre bouton dark mode change bien les couleurs, mais au rechargement le site repart en clair, et un lecteur d'écran l'annonce comme un simple bouton sans état. Ce cours construit l'interrupteur de thème complet, du HTML sémantique au JavaScript : un vrai switch accessible au clavier, qui suit d'abord le thème du système, puis retient le choix du visiteur d'une visite à l'autre. Vous repartez avec un composant autonome, rangé dans une bibliothèque que vous réutilisez sur n'importe quel projet.
Le composant mobilise tout ce que la série CSS moderne a posé jusqu'ici, appliqué à un cas réel.
Plutôt que de détourner une case à cocher, le cours part d'un élément button, déjà focalisable et activable au clavier, et lui donne le rôle de switch. L'état ne vit qu'à un seul endroit, l'attribut aria-checked : le CSS s'en sert pour déplacer la pastille et changer la couleur, le JavaScript le met à jour, le lecteur d'écran le lit. Le libellé visible suit le mouvement, « Passer en thème sombre » ou « Passer en thème clair », pour que chacun sache ce que fera le clic. Pour creuser les rôles ARIA posés sur un élément non natif, le cours sur le bouton accessible sans balise button en détaille les mécanismes.
Au premier passage, le site respecte le réglage du système via prefers-color-scheme. Dès que le visiteur touche l'interrupteur, son choix est enregistré dans le localStorage et prend le dessus, y compris lorsqu'il revient quelques jours plus tard. Si le JavaScript est désactivé, l'attribut data-theme posé dans le HTML garantit un thème par défaut. Les couleurs claires et sombres viennent du cours précédent sur le dark mode en CSS natif : ici, on branche l'interrupteur dessus.
Le dernier chapitre range le switch dans un dossier autonome : HTML, CSS, JavaScript, fichier exemple et README. Le CSS s'importe avec @import et layer() pour respecter l'ordre des couches du projet hôte, sans alourdir la feuille principale. Le code du cours et cette bibliothèque font partie des fichiers fournis, et la série y ajoutera un composant accordéon au prochain épisode.
Le badge Intermédiaire est juste, à une condition : ce cours est le sixième épisode d'une série et s'appuie sur la feuille de style modèle construite dans les épisodes précédents, en particulier les variables CSS et design tokens. Il faut aussi être à l'aise avec les bases de JavaScript : constantes, fonctions, écouteurs d'événements. Aucun framework : HTML, CSS et JavaScript natifs, dans un navigateur récent.
Vous découvrez la série par cet épisode et voulez comprendre pourquoi tout repose sur les couches CSS : commencez par cascade, spécificité et layers, le premier épisode.
Que contient le fichier source ?
Le cours traite-t-il le flash de thème clair au chargement ?
Le switch est-il conforme au RGAA ?
Ce switch fonctionne-t-il avec React ou Tailwind ?
Quelle différence avec le cours « switch jour / nuit » d'Objectif Frontend ?
Le cours est-il inclus dans l'abonnement Tuto.com ?
Peut-on valider ses acquis à la fin du cours ?
Les apprenants qui suivent cette formation s'intéressent aussi à :

Dark mode en CSS natif : thème sombre automatique, mode manuel, aucun composant à réécrire

Cascade, spécificité et layers : comprendre les règles qui pilotent votre CSS

Variables CSS et design tokens : une charte graphique que vous changez en quelques lignes

Créer un menu accordéon FAQ accessible en HTML, CSS et JS

Comment faire un menu burger sans programmation ?

Le pseudo-élément marker en CSS / Concept + Exercice


Mini FullStack #2: Créer un formulaire de contact

Formation Tailwind CSS : de la théorie au déploiement avec React et Vercel

Bundle Flexbox CSS - Maîtrise moderne, bonnes pratiques et projets concrets