Vai al contenuto

Tema scuro con CSS

Da WikiJournal.
Versione del 5 feb 2025 alle 21:31 di Philip (discussione | contributi) (Creata pagina con "Negli ultimi anni, la modalità scura è diventata parte integrante del design web moderno. Non solo riduce l'affaticamento degli occhi quando si lavora in condizioni di scarsa illuminazione, ma risparmia anche la batteria sui dispositivi con display OLED. Implementare un tema scuro su un sito web utilizzando CSS è abbastanza semplice, ma è importante farlo correttamente in modo che gli utenti possano passare facilmente tra le versioni chiara e scura. == Principi Base...")
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Negli ultimi anni, la modalità scura è diventata parte integrante del design web moderno. Non solo riduce l'affaticamento degli occhi quando si lavora in condizioni di scarsa illuminazione, ma risparmia anche la batteria sui dispositivi con display OLED. Implementare un tema scuro su un sito web utilizzando CSS è abbastanza semplice, ma è importante farlo correttamente in modo che gli utenti possano passare facilmente tra le versioni chiara e scura.

Principi Base del Lavoro con i Temi

I temi chiari e scuri sono due set di stili che possono essere applicati dinamicamente agli elementi del sito web. Idealmente, gli utenti dovrebbero avere la possibilità di scegliere quale tema utilizzare, ma si possono anche considerare le preferenze di sistema del sistema operativo.

Ci sono due modi principali per implementare un tema scuro:

  • Utilizzo di variabili CSS e cambio degli stili tramite JavaScript
  • Applicazione automatica del tema basata sulle impostazioni di sistema utilizzando prefers-color-scheme

Entrambi gli approcci possono essere combinati per rendere la gestione dei temi più flessibile.

Utilizzo delle Variabili CSS per i Temi

Uno dei modi più convenienti per implementare un tema scuro è utilizzare le variabili CSS (custom properties). Questo facilita la gestione dei colori e di altri parametri di stile.

Prima, creiamo variabili root in :root che verranno utilizzate in tutto il documento:

:root {
    --bg-color: #ffffff;
    --text-color: #000000;
}

.dark-theme {
    --bg-color: #121212;
    --text-color: #ffffff;
}

Poi, applichiamo queste variabili agli elementi della pagina:

body {
    background-color: var(--bg-color);
    color: var(--text-color);
    transition: background-color 0.3s, color 0.3s;
}

Ora, basta aggiungere la classe .dark-theme a <html> o <body> per cambiare i colori.

Cambio dei Temi con JavaScript

Per permettere agli utenti di passare tra i temi chiaro e scuro, puoi utilizzare JavaScript:

const toggleThemeBtn = document.getElementById('theme-toggle');

toggleThemeBtn.addEventListener('click', () => {
    document.documentElement.classList.toggle('dark-theme');

    // Salvare la scelta dell'utente in localStorage
    if (document.documentElement.classList.contains('dark-theme')) {
        localStorage.setItem('theme', 'dark');
    } else {
        localStorage.setItem('theme', 'light');
    }
});

// Controllare le impostazioni salvate quando la pagina si carica
if (localStorage.getItem('theme') === 'dark') {
    document.documentElement.classList.add('dark-theme');
}

In questo modo, la scelta dell'utente viene conservata dopo il ricaricamento della pagina.

Rilevamento Automatico del Tema di Sistema

Se vuoi rispettare le impostazioni di sistema dell'utente, puoi utilizzare prefers-color-scheme. Questa media query applica automaticamente il tema appropriato:

@media (prefers-color-scheme: dark) {
    :root {
        --bg-color: #121212;
        --text-color: #ffffff;
    }
}

Questo metodo è conveniente perché adatta immediatamente il sito web alle preferenze di sistema. Tuttavia, se l'utente desidera selezionare manualmente un tema, dovrai combinare questo approccio con JavaScript.

Combinazione di Rilevamento Automatico e Selezione Manuale

Per tenere conto di entrambi i metodi, puoi prima controllare se c'è una scelta del tema salvata in localStorage. Se non c'è, applica le impostazioni di sistema:

const userTheme = localStorage.getItem('theme');
const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';

if (userTheme) {
    document.documentElement.classList.toggle('dark-theme', userTheme === 'dark');
} else {
    document.documentElement.classList.toggle('dark-theme', systemTheme === 'dark');
}

Creazione di un Interruttore Facile da Usare

Ora, aggiungiamo un pulsante per il cambio del tema in HTML:

<button id="theme-toggle">Cambia Tema</button>

Il pulsante permette all'utente di cambiare manualmente il tema, e la logica per salvare la scelta rende l'interazione conveniente.

Miglioramento delle Animazioni di Transizione

Per rendere il cambio del tema fluido, puoi aggiungere un'animazione:

* {
    transition: background-color 0.3s, color 0.3s;
}

Questo crea un effetto di oscuramento o illuminazione graduale quando si cambia tema.

Esempio di Cambio Tema Chiaro e Scuro

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Esempio di Tema Chiaro e Scuro</title>
    <style>
        /* Stili di base e variabili CSS */
        :root {
            --bg-color: #ffffff;
            --text-color: #000000;
        }

        .dark-theme {
            --bg-color: #121212;
            --text-color: #ffffff;
        }

        body {
            background-color: var(--bg-color);
            color: var(--text-color);
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 20px;
            transition: background-color 0.3s, color 0.3s;
        }

        button {
            padding: 10px 20px;
            font-size: 16px;
            cursor: pointer;
            background-color: var(--text-color);
            color: var(--bg-color);
            border: none;
            border-radius: 5px;
            transition: background-color 0.3s, color 0.3s;
        }

        /* Animazione per transizioni fluide */
        * {
            transition: background-color 0.3s, color 0.3s;
        }

        /* Rilevamento automatico del tema di sistema */
        @media (prefers-color-scheme: dark) {
            :root {
                --bg-color: #121212;
                --text-color: #ffffff;
            }
        }
    </style>
</head>
<body>
    <h1>Esempio di Tema Chiaro e Scuro</h1>
    <p>Questo è un esempio di implementazione di temi chiari e scuri usando CSS, JavaScript e localStorage.</p>
    <button id="theme-toggle">Cambia Tema</button>

    <script>
        // Logica di cambio tema
        const toggleThemeBtn = document.getElementById('theme-toggle');

        // Controllare le impostazioni salvate al caricamento della pagina
        const userTheme = localStorage.getItem('theme');
        const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';

        if (userTheme) {
            document.documentElement.classList.toggle('dark-theme', userTheme === 'dark');
        } else {
            document.documentElement.classList.toggle('dark-theme', systemTheme === 'dark');
        }

        // Cambiare tema al click
        toggleThemeBtn.addEventListener('click', () => {
            document.documentElement.classList.toggle('dark-theme');

            // Salvare la scelta dell'utente in localStorage
            if (document.documentElement.classList.contains('dark-theme')) {
                localStorage.setItem('theme', 'dark');
            } else {
                localStorage.setItem('theme', 'light');
            }
        });
    </script>
</body>
</html>

Conclusione

Implementare un tema scuro su un sito web utilizzando CSS e JavaScript è un compito relativamente semplice ma importante. L'uso di variabili CSS rende il codice pratico e scalabile, mentre la combinazione di prefers-color-scheme e localStorage offre agli utenti flessibilità nelle loro scelte. Come risultato, il sito web sarà adattabile e comodo da usare in qualsiasi condizione di illuminazione.

Articoli CSS Correlati

Template:Encyclopedia CSS/Navigation Template:Navigation/CSS