0Pricing
CSS Academy · Leçon

Bascule automatique et manuelle du mode sombre

Créez une bascule de thème qui respecte par défaut la préférence du système et permet aux utilisateurs de la remplacer manuellement.

Bascule automatique et manuelle du mode sombre est une leçon CSS Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage CSS Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours CSS Academy comprend 4 leçons au total.

Objectif

Une implémentation idéale du mode dark détecte automatiquement par défaut la préférence de l'OS et fournit un bouton toggle permettant aux utilisateurs de la remplacer indépendamment, la préférence étant conservée entre les chargements de page.

Vue d'ensemble de l'architecture

Trois states à gérer :

  1. Préférence du system : utilisez prefers-color-scheme avec des variables CSS
  2. Surcharge utilisateur : dark : définissez une classe ou un attribut de données sur <html>
  3. Surcharge utilisateur : clair : définissez une autre classe pour empêcher le mode dark automatique

Configuration des jetons CSS

Définissez des variables CSS qui se transmettent correctement dans tous les states :

<div class="demo" data-theme="dark">Dark token demo</div>
<div class="demo" data-theme="light">Light token demo</div>

Logique du toggle en JavaScript

Lisez la préférence enregistrée, appliquez-la et mettez-la à jour lors du toggle :

<div class="demo" id="theme-demo">Toggle my theme</div>
<div class="demo" data-theme="dark">Dark override example</div>
<button id="toggle-btn">Toggle Theme</button>
<script>
  function toggleTheme() {
    const current = document.getElementById('theme-demo').dataset.theme;
    const system = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
    if (!current) {
      const next = system === 'dark' ? 'light' : 'dark';
      document.getElementById('theme-demo').dataset.theme = next;
    } else {
      delete document.getElementById('theme-demo').dataset.theme;
    }
  }
  document.getElementById('toggle-btn').addEventListener('click', toggleTheme);
</script>

Toggle à trois états

Un toggle à trois états plus précis : Clair | Système | dark :

<div class="demo" id="theme-demo">Cycles: light → system → dark</div>
<div class="demo" data-theme="dark">Dark state example</div>
<p id="state-label">system</p>
<button id="cycle-btn">Cycle Theme</button>
<script>
  const states = ['light', 'system', 'dark'];
  let current = 'system';
  const demo = document.getElementById('theme-demo');
  const label = document.getElementById('state-label');
  document.getElementById('cycle-btn').addEventListener('click', () => {
    current = states[(states.indexOf(current) + 1) % states.length];
    label.textContent = current;
    if (current === 'system') { delete demo.dataset.theme; } else { demo.dataset.theme = current; }
  });
</script>

Prévenir le flash du mauvais thème

Appliquez le thème enregistré de manière synchrone avant le rendu de la page :

<pre class="code-sample">&lt;!-- In &lt;head&gt;, before any styles --&gt;
&lt;script&gt;
  const t = localStorage.getItem("theme");
  if (t) document.documentElement.dataset.theme = t;
&lt;/script&gt;</pre>

Accessibilité du bouton toggle

Le bouton toggle doit communiquer le state current aux lecteurs d'écran. Mettez à jour le label accessible lors de la bascule :

<button id="theme-toggle" aria-label="Switch to dark mode">🌙</button>

Transition animée du thème

Transitions fluides des couleurs lorsque le thème change :

<div class="demo" id="at-demo">Smooth theme transition</div>
<button onclick="document.documentElement.classList.add('theme-transitioning'); const d=document.getElementById('at-demo'); const dark = d.style.background==='rgb(17, 17, 17)'; d.style.background = dark ? '#fff' : '#111'; d.style.color = dark ? '#111' : '#fff'; setTimeout(()=>document.documentElement.classList.remove('theme-transitioning'),250);">Toggle</button>

Écoute des changements du system

Réagissez également si l'utilisateur modifie sa préférence d'OS pendant que la page est ouverte :

<p id="status">Listening for system theme changes…</p>
<script>
  window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
    document.getElementById('status').textContent = 'System changed to ' + (e.matches ? 'dark' : 'light');
  });
</script>

Icônes du mode dark

Remplacez les icônes pour chaque mode. Utilisez l'élément picture pour les images adaptées au thème, ou CSS pour afficher ou masquer différentes icônes :

<div>Light: <span class="icon-sun">☀️</span><span class="icon-moon">🌙</span></div>
<div data-theme="dark">Dark: <span class="icon-sun">☀️</span><span class="icon-moon">🌙</span></div>

Résumé : liste de vérification de l'implémentation

Liste de vérification du mode dark :

  • Variables CSS pour tous les jetons de couleur
  • Requête de média prefers-color-scheme pour la détection automatique
  • Attribut data-theme pour la surcharge manuelle
  • localStorage pour la persistance
  • Script intégré dans head pour éviter le flash
  • Bouton toggle accessible avec un aria-label dynamique

Vérification rapide

Quelle technique empêche un « flash du mauvais thème » lors du chargement de la page ?

Récapitulatif

Un toggle complet du mode dark utilise des variables CSS pour les jetons du thème, une requête prefers-color-scheme pour la détection automatique, un attribut data-theme pour la surcharge manuelle, localStorage pour la persistance et un script synchrone dans head pour éviter le flash. Fournissez un toggle accessible à trois états (clair/system/dark) pour une expérience utilisateur optimale.

Questions Fréquemment Posées

La leçon « Bascule automatique et manuelle du mode sombre » est-elle gratuite ?

Oui — le texte complet de « Bascule automatique et manuelle du mode sombre » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours CSS Academy, passe à CoddyKit PRO. Le cours CSS Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Bascule automatique et manuelle du mode sombre » ?

Créez une bascule de thème qui respecte par défaut la préférence du système et permet aux utilisateurs de la remplacer manuellement. Tu pratiques CSS Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer CSS Academy ?

Aucune expérience préalable n'est requise. CSS Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Bascule automatique et manuelle du mode sombre » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon CSS Academy ?

Oui. Chaque leçon CSS Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Requête média prefers-color-scheme
  2. Variables CSS pour les thèmes
  3. Propriété color-scheme
  4. Bascule automatique et manuelle du mode sombre
← Retour à CSS Academy