Toggle switch dark mode en CSS : un interrupteur de thème accessible qui retient le choix
Problème de lecture
Cette vidéo ne semble pas disponible
00:00
00:00
Sous-titres non disponibles
2h
de formation
24
leçons vidéo
3
chapitres
Intermédiaire
niveau requis
Carl Brison
Carl Brison
Formateur certifié

Toggle switch dark mode en CSS : un interrupteur de thème accessible qui retient le choix

Vente flash ! -20%
4.8/5 Trustpilot (1391 avis) Satisfait ou remboursé
2h
de formation
24
leçons vidéo
3
chapitres

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.

Toggle switch dark mode : ce que vous saurez faire

Le composant mobilise tout ce que la série CSS moderne a posé jusqu'ici, appliqué à un cas réel.

  • Transformer un button en switch accessible avec role et aria-checked
  • Relier un libellé visible à son contrôle avec aria-labelledby
  • Offrir un lien d'évitement aux visiteurs qui naviguent au clavier
  • Donner à chaque composant son propre contrat de tokens locaux
  • Styler les états d'un composant à partir de ses attributs ARIA
  • Hiérarchiser choix mémorisé, préférence système et thème par défaut
  • Livrer un composant autonome, intégrable avec @import et layer()

Un switch piloté par aria-checked, sans case à cocher

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.

Préférence système ou choix mémorisé : qui décide du thème

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.

Une bibliothèque de composants réutilisables

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.

Pour qui

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.

Pour aller plus loin

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.

Qu’allez-vous apprendre dans ce cours ?

Plan de cours
Chapitre 1
Construire le toggle switch dark mode accessible
Chapitre 2
Créer sa bibliothèque de composants réutilisables
Chapitre 3
Suite de la série

Table des matières

Chapitre 1 : Construire le toggle switch dark mode accessible

1h46
 
Leçon 1Structurer la page en HTML sémantique
Leçon 2Nommer les blocs et éléments en BEM
Leçon 3Ajouter un lien d'évitement (skip link)
Leçon 4ARIA du header : role switch et aria-checked
Leçon 5ARIA de l'article : aria-labelledby et aria-label
Leçon 6Corriger le role status et l'aria-label
Leçon 7Styler la card avec son contrat de tokens
Leçon 8Styler les éléments de la card : titre, texte, actions
Leçon 9Styler le composant badge
Leçon 10Styler le bouton : hover, transition et focus-visible
Leçon 11Styler le header en flexbox
Leçon 12Poser la structure du composant theme-switch
Leçon 13Dessiner la piste du switch : label et track
Leçon 14Changer la couleur du switch selon aria-checked
Leçon 15Rendre le focus du switch visible au clavier
Leçon 16Créer et animer la pastille du switch (thumb)
Leçon 17Corriger la transition et la couleur du label
Leçon 18JavaScript : cibler html, le bouton et le label
Leçon 19Écrire la fonction updateTheme
Leçon 20Appliquer prefers-color-scheme ou le choix mémorisé
Leçon 21Basculer le thème au clic et le mémoriser

Chapitre 2 : Créer sa bibliothèque de composants réutilisables

11m53
 
Leçon 1Organiser la bibliothèque : index, exemple, README
Leçon 2Intégrer le composant avec @import et layer()

Chapitre 3 : Suite de la série

01m38
 
Leçon 1Aperçu du prochain composant : l'accordéon

Vos questions sur le cours

Que contient le fichier source ?

Le code source de ce tuto + La bibliothèque de composants.

Le cours traite-t-il le flash de thème clair au chargement ?

Non. Le script est chargé en fin de page, donc un visiteur en mode sombre peut apercevoir le thème clair une fraction de seconde avant la bascule. Pour l'éviter, on place la lecture du localStorage dans un court script en tête de document, avant l'affichage.

Le switch est-il conforme au RGAA ?

Le composant respecte les critères qui le concernent : rôle et état exposés, libellé associé, focus visible, utilisation complète au clavier. La conformité RGAA s'évalue toutefois sur un site entier, pas sur un composant isolé : un audit reste nécessaire pour la déclarer.

Ce switch fonctionne-t-il avec React ou Tailwind ?

Le cours est écrit en HTML, CSS et JavaScript natifs, sans framework. La logique (aria-checked, data-theme, localStorage) se transpose dans n'importe quel framework, mais le nesting CSS et @layer supposent une feuille de style native et un navigateur à jour.

Quelle différence avec le cours « switch jour / nuit » d'Objectif Frontend ?

Les deux cours sont de Carl Brison. Le switch jour / nuit d'Objectif Frontend installe rapidement un interrupteur en une demi-heure environ. Celui-ci s'inscrit dans la série CSS moderne : il construit le switch comme un composant accessible, branché sur des tokens et une architecture @layer, et réutilisable d'un projet à l'autre.

Le cours est-il inclus dans l'abonnement Tuto.com ?

Oui. Il est disponible à l'unité ou dans l'abonnement. Dans les deux cas, vous téléchargez les vidéos et les fichiers sources, et vous accédez au salon d'entraide tant que l'accès est actif.

Peut-on valider ses acquis à la fin du cours ?

Oui, un QCM permet de vérifier que vous maîtrisez les notions vues : rôles ARIA, contrats de tokens, ordre de priorité du thème.

Deux façons de suivre cette formation

À l'unité
Pour vous former sur ce sujet précis
24,95€ 19,95€
Vente flash ! -20%
Paiement unique, sans abonnement
Accès à vie à cette formation
2h de vidéo • 3 chapitres
Satisfait ou remboursé voir conditions
Accès immédiat après paiement
Avec l'abonnement
Pour progresser en continu
34,90€ /mois
Sans engagement
Cette formation + 6 779 autres en illimité
Plus de 20 nouvelles formations par mois
Résiliable en 1 clic, à tout moment
Commencer avec l’abonnement
Accès immédiat, pendant votre abonnement

Inclus dans les deux formules

  • Hors connexion via l'app Tuto.com
  • Salon d'entraide pour vos questions
  • Certificat de complétion
Paiement sécurisé 1,4 million d'apprenants 4.8/5 Trustpilot
Logo carte-bancaire-monoLogo visa-monoLogo mastercardLogo paypal-monoLogo klarna-monoLogo apple-pay-monoLogo google-pay-mono
Une question avant de choisir ? Écrivez-nous ou appelez le 01 84 80 80 29 (du lundi au vendredi, 10h-12h et 14h-16h)

Formations complémentaires

Les apprenants qui suivent cette formation s'intéressent aussi à :

Abonnement 34,90€/mois

Attendez ! 🤗

Accédez à plus de 1425 tutos gratuits

Notre politique de protection des données