0Pricing
CSS Academy · Lezione

Attivazione automatica e manuale della modalità scura

Costruisca un selettore del tema che rispetti per impostazione predefinita la preferenza del sistema e consenta agli utenti di modificarla manualmente.

Attivazione automatica e manuale della modalità scura è una lezione CSS Academy gratuita su CoddyKit. Questa è la lezione 4 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 CSS Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso CSS Academy include 4 lezioni in totale.

Obiettivo

Un'implementazione ideale della modalità scura rileva automaticamente la preferenza del sistema operativo per impostazione predefinita e offre un pulsante di attivazione che consente agli utenti di sostituirla in modo indipendente, mantenendo la preferenza tra i caricamenti della pagina.

Panoramica dell'architettura

È necessario gestire tre stati:

  1. Preferenza di sistema: utilizzare prefers-color-scheme con le variabili CSS
  2. Override dell'utente: scuro: impostare una classe o un attributo data su <html>
  3. Override dell'utente: chiaro: impostare una classe diversa per impedire l'attivazione automatica della modalità scura

Configurazione dei token CSS

Definire variabili CSS che si propaghino correttamente in tutti gli stati:

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

Logica del pulsante in JavaScript

Leggere la preferenza salvata, applicarla e aggiornarla quando si attiva il pulsante:

<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>

Interruttore a tre stati

Un interruttore a tre stati più completo: Light | System | 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>

Prevenzione del flash del tema errato

Applicare il tema salvato in modo sincrono prima del rendering della pagina:

<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à del pulsante di attivazione

Il pulsante di attivazione dovrebbe comunicare lo stato corrente agli screen reader. Aggiornare l'etichetta accessibile quando cambia lo stato:

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

Transizione animata del tema

Transizioni fluide dei colori quando cambia il tema:

<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>

Rilevamento delle modifiche di sistema

Reagire anche alle modifiche della preferenza del sistema operativo mentre la pagina è aperta:

<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>

Icone della modalità scura

Sostituire le icone per ogni modalità. Utilizzare l'elemento picture per immagini adattate al tema, oppure il CSS per mostrare o nascondere icone diverse:

<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>

Riepilogo: checklist di implementazione

Checklist della modalità scura:

  • Variabili CSS per tutti i token dei colori
  • Media query prefers-color-scheme per il rilevamento automatico
  • Attributo data-theme per l'override manuale
  • localStorage per la persistenza
  • Script inline nell'head per prevenire il flash
  • Pulsante di attivazione accessibile con aria-label dinamico

Verifica rapida

Quale tecnica impedisce il "flash del tema errato" durante il caricamento della pagina?

Riepilogo

Un interruttore completo per la modalità scura utilizza variabili CSS per i token del tema, una query prefers-color-scheme per il rilevamento automatico, un attributo data-theme per l'override manuale, localStorage per la persistenza e uno script sincrono nell'head per prevenire il flash. Per la migliore esperienza utente, è opportuno fornire un interruttore accessibile a tre stati: chiaro, sistema e scuro.

Domande Frequenti

La lezione «Attivazione automatica e manuale della modalità scura» è gratuita?

Sì — il testo completo di «Attivazione automatica e manuale della modalità scura» è 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 CSS Academy, passa a CoddyKit PRO. Il corso CSS Academy include 4 lezioni in totale.

Cosa imparerò in «Attivazione automatica e manuale della modalità scura»?

Costruisca un selettore del tema che rispetti per impostazione predefinita la preferenza del sistema e consenta agli utenti di modificarla manualmente. Eserciti CSS 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 CSS Academy?

Non è richiesta alcuna esperienza precedente. CSS 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 4 di 4.

Quanto tempo richiede la lezione «Attivazione automatica e manuale della modalità scura»?

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 CSS Academy?

Sì. Ogni lezione CSS 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

  1. Media query prefers-color-scheme
  2. Variabili CSS per i temi
  3. Proprietà color-scheme
  4. Attivazione automatica e manuale della modalità scura
← Torna a CSS Academy