Rilevare lo schema colori del sistema
Leggere la preferenza della modalità scura del sistema operativo dell'utente con prefers-color-scheme e aggiornare lo stato React quando cambia
Rilevare lo schema colori del sistema è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
La media query prefers-color-scheme
La media query CSS prefers-color-scheme rileva se l'utente ha configurato il sistema operativo per utilizzare un tema con colori scuri o chiari. Accetta due valori: dark e light. Questa preferenza viene impostata a livello di sistema nelle impostazioni del sistema operativo, non nel browser.
Modalità scura CSS tramite media query
È possibile applicare gli stili scuri esclusivamente in CSS utilizzando @media (prefers-color-scheme: dark) { ... }. All'interno di questo blocco, sovrascrivere colori, sfondi e bordi per adattarli a una palette scura. Questo approccio non richiede JavaScript e funziona anche prima del montaggio di React.
window.matchMedia in JavaScript
In JavaScript, window.matchMedia('(prefers-color-scheme: dark)') restituisce un oggetto MediaQueryList. È possibile utilizzarlo per leggere programmaticamente la preferenza di sistema corrente all'interno degli hook di React o dei gestori di eventi. È il collegamento tra le media query CSS e la logica JavaScript.
Lettura del valore iniziale
L'oggetto MediaQueryList dispone di una proprietà matches che restituisce un valore booleano. Se matches è true, il sistema è in modalità scura; se è false, è in modalità chiara. In genere si legge questa proprietà una volta al montaggio per inizializzare lo stato del tema.
Rilevamento delle modifiche di sistema
Gli utenti possono modificare in qualsiasi momento lo schema di colori del sistema operativo. Per rispondere dinamicamente, chiamare mediaQuery.addEventListener('change', handler), dove handler riceve l'oggetto MediaQueryListEvent aggiornato. Anche l'oggetto dell'evento dispone di un valore booleano matches che riflette la nuova preferenza.
Creazione dell'hook usePrefersDarkMode
Un approccio efficace consiste nel creare un hook personalizzato utilizzando useSyncExternalStore. L'hook si sottoscrive a mediaQuery.addEventListener e fornisce una funzione snapshot che restituisce mediaQuery.matches. In questo modo l'hook rimane sincronizzato con l'API esterna del browser senza dover gestire manualmente lo stato.
Rimozione della sottoscrizione durante la pulizia
Quando il componente viene smontato, è necessario rimuovere il listener dell'evento per evitare perdite di memoria. Nella funzione di pulizia di un useEffect, chiamare mediaQuery.removeEventListener('change', handler). Con useSyncExternalStore, la funzione subscribe deve restituire una funzione di annullamento della sottoscrizione che esegua la stessa operazione.
Preferenza di sistema e override dell'utente
La preferenza di sistema è quella comunicata dal sistema operativo. Tuttavia, spesso gli utenti desiderano sovrascrivere indipendentemente il tema dell'app, ad esempio mantenendo l'app in modalità chiara mentre il sistema operativo è in modalità scura. L'architettura dovrebbe distinguere tra il valore predefinito di sistema e un override esplicito dell'utente memorizzato in localStorage.
Emulazione dello schema di colori nei DevTools
Chrome DevTools consente di emulare le preferenze dello schema di colori senza modificare le impostazioni del sistema operativo. Aprire DevTools, accedere alla scheda Rendering e individuare il menu a discesa "Emulate CSS media feature prefers-color-scheme". È uno strumento prezioso per testare rapidamente entrambi i temi durante lo sviluppo.
Rispetto predefinito della preferenza dell'utente
Una buona implementazione della modalità scura legge la preferenza di sistema come punto di partenza predefinito e la applica immediatamente. In questo modo si rispetta l'impostazione di accessibilità scelta dall'utente. Solo dopo che l'utente ha cambiato esplicitamente il tema nell'app si dovrebbe memorizzare e utilizzare un override diverso.
Considerazioni SSR sulla preferenza di sistema
Sul server, window.matchMedia non esiste. Se si esegue il rendering sul server, verificare typeof window !== 'undefined' prima di chiamare matchMedia. Nelle app SSR, leggere invece la preferenza dell'utente da un cookie o da un'intestazione HTTP per evitare incongruenze durante l'hydration.
Verifica dell'API matchMedia
Quale proprietà di un oggetto MediaQueryList indica se la media query corrisponde attualmente?
Riepilogo della lezione: rilevare lo schema di colori del sistema
La media query prefers-color-scheme espone la preferenza di colori del sistema operativo sia in CSS sia in JavaScript. Utilizzare window.matchMedia per leggere le modifiche e ascoltarle, rimuovere sempre i listener degli eventi e distinguere i valori predefiniti di sistema dagli override dell'utente. L'emulazione in Chrome DevTools accelera i test di entrambi i temi.
Domande Frequenti
La lezione «Rilevare lo schema colori del sistema» è gratuita?
Sì — il testo completo di «Rilevare lo schema colori del sistema» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Rilevare lo schema colori del sistema»?
Leggere la preferenza della modalità scura del sistema operativo dell'utente con prefers-color-scheme e aggiornare lo stato React quando cambia Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Rilevare lo schema colori del sistema»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Rilevare lo schema colori del sistema
- Variabili CSS per cambiare tema
- React Context per lo stato del tema
- Persistenza del tema e prevenzione del flash