Aller au contenu

🌗 Changez de Thème en Un Clic ! 🎨 [Tutoriel HTML, CSS, JS]

Javascript HTML / CSS

⏱️ 14 min

Ce tutoriel approfondi explique comment ajouter une fonctionnalité de basculement entre un thème clair et un thème sombre. Nous détaillerons chaque étape pour comprendre les concepts et le code utilisé.

Étape 1 : Comprendre la structure HTML

Le fichier HTML est la base de notre page. Voici ses éléments principaux :

  1. Le bouton : Identifié par l’ID toggle-theme, il permet de basculer entre les thèmes.
  2. Les fichiers externes : Le fichier CSS styles.css contient les styles, et le fichier JavaScript scripts.js gère la logique.
  3. Contenu de base : Une structure minimaliste avec un titre et un paragraphe pour observer le changement des styles.

HTML :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="css/styles.css">
<script src="js/scripts.js" defer></script>
</head>
<body>
<button id="toggle-theme">Changer de thème</button>
<h1>Ma page</h1>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Optio error, quas necessitatibus, cumque quam voluptatem facilis doloremque eligendi aliquid sit, quod veritatis debitis aspernatur explicabo aperiam alias ut nemo odit.</p>
</body>
</html>

Étape 2 : Styles avec CSS et variables personnalisées

Les variables CSS permettent de centraliser les couleurs pour les thèmes clair et sombre.

1. Déclaration des variables :

Dans :root, on définit les couleurs pour les deux thèmes :

  • Thème clair : DĂ©finies par les variables --color-primary-light, --background-light, et --text-light.
  • Thème sombre : DĂ©finies par les variables --color-primary-dark, --background-dark, et --text-dark.
  • Valeurs par dĂ©faut : Utilisent les couleurs du thème clair.
:root {
/* Thème clair */
--color-primary-light: #1a73c8;
--background-light: #ffffff;
--text-light: #000000;

/* Thème sombre */
--color-primary-dark: #bb86fc;
--background-dark: #121212;
--text-dark: #ffffff;

/* Par défaut : thème clair */
--primary-color: var(--color-primary-light);
--background-color: var(--background-light);
--text-color: var(--text-light);
}

2. Application des variables :

  • Le body utilise les variables pour dĂ©finir le fond et la couleur du texte.
  • Lorsqu’on ajoute la classe dark au body, les variables prennent les valeurs du thème sombre.
body {
background-color: var(--background-color);
color: var(--text-color);
}

.dark {
--primary-color: var(--color-primary-dark);
--background-color: var(--background-dark);
--text-color: var(--text-dark);
}

3. Stylisation du bouton :

Le bouton utilise les variables pour son fond et son texte.

button {
background: var(--primary-color);
color: var(--text-color);
border: none;
padding: 10px 20px;
cursor: pointer;
font-size: 1rem;
}

Étape 3 : Ajout de la logique JavaScript

Le fichier scripts.js implémente les fonctionnalités dynamiques. Détaillons chaque partie.

1. Sélectionner les éléments HTML :

const toggleButton = document.querySelector('#toggle-theme');
const body = document.body;
  • toggleButton : Le bouton permettant de changer le thème.
  • body : L'Ă©lĂ©ment principal oĂą la classe dark est ajoutĂ©e ou retirĂ©e.

2. Appliquer le thème sauvegardé :

const savedTheme = localStorage.theme;

if (savedTheme) {
body.classList.add(savedTheme);
}
  • La variable savedTheme rĂ©cupère la valeur stockĂ©e dans le LocalStorage (soit "dark", soit une chaĂ®ne vide).
  • Si un thème est sauvegardĂ©, il est appliquĂ© dès le chargement.

3. Basculer entre les thèmes :

toggleButton.addEventListener("click", () => {
body.classList.toggle("dark"); // Ajoute ou enlève la classe "dark"
const theme = body.classList.contains("dark") ? "dark" : "";
localStorage.theme = theme; // Sauvegarde le thème dans LocalStorage
});
  • classList.toggle() : Ajoute ou retire la classe dark.
  • Sauvegarde : Le thème actif est stockĂ© dans LocalStorage pour ĂŞtre appliquĂ© lors du prochain chargement.

4. Synchroniser avec les préférences système :

window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (event) => {
body.classList.remove("dark");
localStorage.theme = "";
if (event.matches) {
body.classList.add("dark");
localStorage.theme = "dark";
}
});
  • matchMedia dĂ©tecte si l’utilisateur prĂ©fère le mode sombre.
  • ÉvĂ©nement change : Met Ă  jour le thème lorsque l’utilisateur modifie ses prĂ©fĂ©rences système.

Étape 4 : Résultat final

  • La page affiche le thème clair par dĂ©faut ou le dernier thème sauvegardĂ©.
  • L'utilisateur peut basculer entre les thèmes en cliquant sur le bouton.
  • Les prĂ©fĂ©rences système sont automatiquement dĂ©tectĂ©es et appliquĂ©es.

Étape 5 : Points à approfondir

1. Améliorer l’expérience utilisateur :

Ajoutez une transition pour rendre le changement de thème plus fluide.

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

2. Étendre les fonctionnalités :

  • Thèmes supplĂ©mentaires : Ajoutez un menu dĂ©roulant pour permettre le choix entre plusieurs thèmes.
  • AccessibilitĂ© : VĂ©rifiez le contraste des couleurs pour assurer une bonne lisibilitĂ©.

3. Compatibilité :

Assurez-vous que votre code fonctionne sur tous les navigateurs modernes en vérifiant la prise en charge de matchMedia et LocalStorage.

Résumé

Ce tutoriel vous a montré comment :

  • CrĂ©er une page web avec un bouton pour basculer entre les thèmes clair et sombre.
  • Utiliser CSS et JavaScript pour gĂ©rer les styles dynamiques et la persistance des prĂ©fĂ©rences utilisateur.
  • Synchroniser l’affichage avec les prĂ©fĂ©rences système.

Avec ces techniques, vous pouvez améliorer l'expérience utilisateur en adaptant votre site aux besoins et préférences visuelles des visiteurs. 🎉

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat.