Module HTML.9 – Accessibilité (A11Y)
Objectif
Maîtriser l'accessibilité web (A11Y) : WCAG, ARIA, navigation clavier, screen readers pour créer des sites accessibles à tous.
Théorie
Qu'est-ce que l'accessibilité ?
Accessibilité web = Rendre les sites utilisables par tous, y compris les personnes en situation de handicap.
Types de handicaps :
- Visuel (cécité, malvoyance)
- Auditif (surdité, malentendance)
- Moteur (mobilité réduite)
- Cognitif (troubles de l'apprentissage)
WCAG (Web Content Accessibility Guidelines)
Niveaux :
- A : Minimum (obligatoire)
- AA : Recommandé (standard)
- AAA : Optimal (difficile à atteindre)
Principes (POUR) :
- Perceptible : Visible/audible
- Opérable : Utilisable (clavier, souris)
- Universel : Compréhensible
- Robuste : Compatible (technologies d'assistance)
ARIA (Accessible Rich Internet Applications)
Rôle : Améliorer l'accessibilité quand HTML seul ne suffit pas.
aria-label
Texte alternatif pour les éléments.
<button aria-label="Fermer la fenêtre">×</button>
<img src="icon.svg" alt="" aria-label="Icône de recherche">
aria-labelledby
Référence vers un élément qui étiquette.
<div id="search-label">Rechercher</div>
<input type="search" aria-labelledby="search-label">
aria-describedby
Référence vers un élément qui décrit.
<input type="email" aria-describedby="email-help">
<span id="email-help">Nous ne partagerons jamais votre email</span>
aria-hidden
Masquer du contenu décoratif aux screen readers.
<span aria-hidden="true">★</span>
<span class="sr-only">Note: 5 étoiles</span>
aria-current
Indiquer l'élément actif.
<nav>
<a href="/" aria-current="page">Accueil</a>
<a href="/about.html">À propos</a>
</nav>
role
Définir le rôle d'un élément.
<div role="button" tabindex="0">Cliquer</div>
<div role="alert">Message d'erreur</div>
<div role="banner">En-tête</div>
Rôles courants :
button,link,navigationmain,complementary,contentinfoalert,status,dialog
Navigation clavier
Touches essentielles :
- Tab : Naviguer vers l'avant
- Shift+Tab : Naviguer vers l'arrière
- Entrée : Activer un lien/bouton
- Espace : Activer un bouton
- Flèches : Navigation dans les listes/menus
Focus visible :
a:focus,
button:focus {
outline: 2px solid blue;
outline-offset: 2px;
}
Ordre de focus :
- Logique (de haut en bas, gauche à droite)
- Cohérent
- Visible
Screen readers
Principaux :
- NVDA (Windows, gratuit)
- JAWS (Windows, payant)
- VoiceOver (macOS/iOS, intégré)
- TalkBack (Android, intégré)
Bonnes pratiques :
- Structure sémantique
- Labels descriptifs
- Textes alternatifs
- Landmarks ARIA
Bonnes pratiques A11Y
1. Contraste des couleurs
Ratio minimum (WCAG AA) :
- Texte normal : 4.5:1
- Texte large : 3:1
Outils :
- WebAIM Contrast Checker
- axe DevTools
2. Textes alternatifs
Images :
<img src="photo.jpg" alt="Description détaillée">
Icônes :
<button aria-label="Fermer">
<span aria-hidden="true">×</span>
</button>
3. Formulaires accessibles
<label for="email">Email :</label>
<input type="email" id="email" name="email" required aria-describedby="email-help">
<span id="email-help">Format: exemple@domaine.com</span>
4. Liens descriptifs
❌ Mauvais :
<a href="page.html">Cliquez ici</a>
✅ Bon :
<a href="page.html">En savoir plus sur nos services</a>
5. Skip links
<a href="#main-content" class="skip-link">Aller au contenu principal</a>
<nav>...</nav>
<main id="main-content">...</main>
Outils de test
Extensions navigateur :
- WAVE (Web Accessibility Evaluation Tool)
- axe DevTools
- Lighthouse (Chrome)
Tests manuels :
- Navigation clavier uniquement
- Screen reader
- Zoom 200%
- Contraste des couleurs
Exercices guidés
Exercice 1 : ARIA de base
Créez :
- Un bouton avec
aria-label - Un input avec
aria-describedby - Un élément avec
aria-hidden
Exercice 2 : Navigation clavier
Créez une page et :
- Naviguez uniquement au clavier (Tab)
- Vérifiez que tous les éléments interactifs sont accessibles
- Vérifiez que le focus est visible
Exercice 3 : Formulaires accessibles
Créez un formulaire avec :
- Labels explicites
aria-describedbypour l'aide- Messages d'erreur avec
role="alert"
Exercice 4 : Contraste
Testez le contraste de vos couleurs :
- Utilisez WebAIM Contrast Checker
- Corrigez les problèmes de contraste
Exercice 5 : Screen reader
Testez avec un screen reader :
- Installez NVDA ou utilisez VoiceOver
- Naviguez sur votre site
- Identifiez les problèmes
❌ Erreurs fréquentes
Erreur 1 : Ignorer l'accessibilité
❌ Mauvais :
<div onclick="doSomething()">Action</div>
✅ Bon :
<button onclick="doSomething()">Action</button>
Pourquoi : Les boutons sont accessibles par défaut.
Erreur 2 : Pas de labels
❌ Mauvais :
<input type="text" name="nom" placeholder="Nom">
✅ Bon :
<label for="nom">Nom :</label>
<input type="text" id="nom" name="nom">
Pourquoi : Obligatoire pour l'accessibilité.
Erreur 3 : Contraste insuffisant
❌ Mauvais :
color: #ccc; /* Gris clair sur blanc */
✅ Bon :
color: #333; /* Gris foncé sur blanc */
Pourquoi : WCAG exige un contraste minimum.
Erreur 4 : Focus invisible
❌ Mauvais :
*:focus {
outline: none;
}
✅ Bon :
*:focus {
outline: 2px solid blue;
}
Pourquoi : Les utilisateurs clavier doivent voir le focus.
Erreur 5 : ARIA mal utilisé
❌ Mauvais :
<div role="button">Cliquer</div>
✅ Bon :
<button>Cliquer</button>
Pourquoi : Utiliser HTML sémantique d'abord, ARIA seulement si nécessaire.
🚀 Mini-projet
Mission : Créer un site accessible
Créez un site avec :
Accessibilité :
- Structure sémantique complète
- Navigation clavier fonctionnelle
- Labels sur tous les formulaires
- Textes alternatifs sur toutes les images
- Contraste WCAG AA
- ARIA approprié
- Skip links
Tests :
- WAVE (0 erreurs)
- Navigation clavier uniquement
- Screen reader (si possible)
- Contraste vérifié
Critères :
- ✅ 0 erreurs WAVE
- ✅ Navigation clavier complète
- ✅ Contraste WCAG AA
- ✅ ARIA approprié
- ✅ Structure sémantique
Objectif : Créer un site accessible à tous, conforme WCAG AA.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez l'accessibilité et avez créé un site accessible conforme WCAG AA.