Détecter le thème de couleurs du système
Lisez la préférence du mode sombre de l’OS avec prefers-color-scheme et mettez à jour l’état React lorsqu’elle change
Détecter le thème de couleurs du système est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 1 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 React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.
La requête média prefers-color-scheme
La requête média CSS prefers-color-scheme détecte si l’utilisateur a configuré son système d’exploitation pour utiliser un thème de couleurs sombre ou clair. Elle accepte deux valeurs : dark et light. Cette préférence est définie au niveau de l’OS dans les paramètres système, et non dans le navigateur.
Mode sombre CSS via une requête média
Vous pouvez appliquer des styles sombres uniquement en CSS avec @media (prefers-color-scheme: dark) { ... }. Dans ce bloc, remplacez les couleurs, arrière-plans et bordures pour les adapter à une palette sombre. Cette approche ne nécessite aucun JavaScript et fonctionne même avant le montage de React.
window.matchMedia en JavaScript
En JavaScript, window.matchMedia('(prefers-color-scheme: dark)') renvoie un objet MediaQueryList. Vous pouvez l’utiliser pour lire par programmation la préférence système actuelle dans des hooks React ou des gestionnaires d’événements. Cela fait le lien entre les requêtes média CSS et votre logique JS.
Lecture de la valeur initiale
L’objet MediaQueryList possède une propriété matches qui renvoie une valeur booléenne. Si matches vaut true, le système est en mode sombre ; si false, il est en mode clair. Vous lisez généralement cette valeur une seule fois lors du montage pour initialiser l’état de votre thème.
Écoute des changements du système
Les utilisateurs peuvent modifier leur schéma de couleurs OS à tout moment. Pour réagir dynamiquement, appelez mediaQuery.addEventListener('change', handler), où handler reçoit l’élément MediaQueryListEvent mis à jour. L’objet événement possède également une valeur booléenne matches qui reflète la nouvelle préférence.
Création du hook usePrefersDarkMode
Une approche claire consiste à créer un hook personnalisé avec useSyncExternalStore. Le hook s’abonne à mediaQuery.addEventListener et fournit une fonction qui renvoie l’instantané mediaQuery.matches. Cela maintient le hook synchronisé avec l’API externe du navigateur sans gestion manuelle de l’état.
Désabonnement lors du nettoyage
Lorsque votre composant est démonté, vous devez supprimer l’écouteur d’événement pour éviter les fuites de mémoire. Dans le nettoyage de useEffect, appelez mediaQuery.removeEventListener('change', handler). Avec useSyncExternalStore, la fonction d’abonnement doit renvoyer une fonction de désabonnement qui fait de même.
Préférence système ou surcharge utilisateur
La préférence système correspond à ce que l’OS signale. Cependant, les utilisateurs souhaitent souvent remplacer indépendamment le thème de l’application, par exemple pour conserver l’application en mode clair alors que l’OS est en mode sombre. Votre architecture doit distinguer la valeur système par défaut d’une surcharge utilisateur explicite stockée dans localStorage.
Émulation du schéma de couleurs dans DevTools
Chrome DevTools vous permet d’émuler les préférences de schéma de couleurs sans modifier les paramètres de votre OS. Ouvrez DevTools, accédez à l’onglet Rendu et recherchez la liste déroulante « Émuler la fonctionnalité de média CSS prefers-color-scheme ». Cette fonction est très utile pour tester rapidement les deux thèmes pendant le développement.
Respect de la préférence utilisateur par défaut
Une bonne implémentation du mode sombre lit la préférence système comme point de départ par défaut et l’applique immédiatement. Cela respecte le paramètre d’accessibilité de l’utilisateur. Ce n’est qu’après que l’utilisateur a explicitement changé le thème dans votre application que vous devez stocker et utiliser une autre surcharge.
Prise en compte de la préférence système avec SSR
Sur le serveur, window.matchMedia n’existe pas. Si vous effectuez un rendu côté serveur, vérifiez typeof window !== 'undefined' avant d’appeler cette API. Pour les applications SSR, lisez plutôt la préférence utilisateur depuis un cookie ou un en-tête HTTP afin d’éviter les incohérences d’hydratation.
Vérification de l’API matchMedia
Quelle propriété d’un objet MediaQueryList indique si la requête média correspond actuellement ?
Récapitulatif de la leçon : détection du schéma de couleurs système
La requête média prefers-color-scheme expose la préférence de couleurs de l’OS en CSS comme en JavaScript. Utilisez window.matchMedia pour lire les changements et les écouter, nettoyez toujours les écouteurs d’événements et distinguez les valeurs système par défaut des surcharges utilisateur. L’émulation dans Chrome DevTools accélère le test des deux thèmes.
Questions Fréquemment Posées
La leçon « Détecter le thème de couleurs du système » est-elle gratuite ?
Oui — le texte complet de « Détecter le thème de couleurs du système » 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 React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Détecter le thème de couleurs du système » ?
Lisez la préférence du mode sombre de l’OS avec prefers-color-scheme et mettez à jour l’état React lorsqu’elle change Tu pratiques React 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 React Academy ?
Aucune expérience préalable n'est requise. React 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 1 sur 4.
Combien de temps prend la leçon « Détecter le thème de couleurs du système » ?
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 React Academy ?
Oui. Chaque leçon React 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
- Détecter le thème de couleurs du système
- Variables CSS pour changer de thème
- Contexte React pour l’état du thème
- Conserver le thème et éviter le flash