Aller au contenu principal

Guide d’implémentation d’un darkmode accessible

Introduction

Permettre aux utilisateurs de basculer entre les modes clair et sombre améliore l'expérience utilisateur en s'adaptant à leurs préférences et à leur confort visuel. Assurer que ce sélecteur est accessible garantit une utilisation fluide pour tous, y compris les personnes utilisant des technologies d’assistance.

Description technique

Structure HTML accessible

La structure HTML doit être sémantique et inclure des attributs ARIA pour une meilleure compréhension par les technologies d’assistance.

  • Bouton (<button>) : Utilisé pour déclencher le changement de mode.
  • Attributs ARIA :
    • aria-label pour décrire l'action du bouton, par exemple, "Activer le mode sombre" ou "Activer le mode clair".
    • aria-live="polite" sur un élément contenant le nom du mode actuel pour informer les utilisateurs des changements.

Comportement javascript accessible

  • Gestion des Événements : Le bouton doit écouter les événements de clic pour basculer entre les modes.
  • Mise à Jour des Attributs ARIA : Mettre à jour dynamiquement le aria-label du bouton en fonction du mode actif.
  • Stockage des Préférences : Utiliser le localStorage pour mémoriser la préférence de l'utilisateur et appliquer le mode choisi lors des visites ultérieures.

Bonnes pratiques d’accessibilité

  • Respect des standards :
    • Suivre les directives WCAG 2.1, notamment le critère 1.4.3 sur le contraste des couleurs.
  • Messages visuels et auditifs :
    • Fournir des retours visuels clairs lors du changement de mode, comme une transition douce entre les thèmes.
  • Compatibilité multi-appareils :
    • Tester le sélecteur sur différents appareils et navigateurs pour garantir une expérience uniforme.

Recommandations supplémentaires

  • Amélioration de l’expérience utilisateur :
    • Ajouter des transitions CSS pour adoucir le changement de mode.
    • Permettre la détection automatique du mode préféré de l'utilisateur via le media query prefers-color-scheme.

Exemple de code accessible

<button id="mode-toggle" aria-label="Activer le mode sombre">Changer de mode</button>

<script>
const toggleButton = document.getElementById('mode-toggle');
const currentMode = localStorage.getItem('color-mode') || 'light';

document.body.classList.add(currentMode);

toggleButton.setAttribute(
'aria-label',
currentMode === 'light' ? 'Activer le mode sombre' : 'Activer le mode clair'
);

toggleButton.addEventListener('click', () => {
const newMode = document.body.classList.contains('light') ? 'dark' : 'light';
document.body.classList.remove('light', 'dark');
document.body.classList.add(newMode);
localStorage.setItem('color-mode', newMode);
toggleButton.setAttribute(
'aria-label',
newMode === 'light' ? 'Activer le mode sombre' : 'Activer le mode clair'
);
});
</script>

<style>
body.light {
background-color: #ffffff;
color: #000000;
}
body.dark {
background-color: #000000;
color: #ffffff;
}
button {
margin: 20px;
padding: 10px 20px;
cursor: pointer;
}
</style>