12.1 — Accessibilité
⏱️ TL;DR — Bootstrap fournit une base accessible : rôles et attributs ARIA sur ses composants, gestion du focus (modale, offcanvas), classe
visually-hidden, palette 5.3 pensée pour le contraste. Mais l’accessibilité finale dépend de vous :altsur les images, labels sur les champs,aria-labelsur les boutons-icônes, hiérarchie correcte des titres, respect duprefers-reduced-motion.
🎯 Objectifs
- Connaître ce que Bootstrap gère automatiquement.
- Ajouter ce qui manque (labels, alt, aria).
- Utiliser les utilitaires d’accessibilité.
Ce que Bootstrap fait pour vous
- Focus management : modale et offcanvas piègent le focus et le restituent à la fermeture.
- ARIA de base : les composants portent des rôles (
role="alert",role="tablist"…) dans les exemples officiels. visually-hidden: masquer visuellement un texte tout en le laissant aux lecteurs d’écran.prefers-reduced-motion: Bootstrap réduit ses animations si l’utilisateur le demande.- Palette 5.3 : les couleurs
-emphasiset les combinaisonstext-bg-*visent un contraste correct.
Ce que VOUS devez ajouter
<!-- Images : alt descriptif (ou vide si décoratif) -->
<img src="graphique.png" alt="Ventes en hausse de 20 % au T1">
<!-- Champs : toujours un label lié -->
<label for="q" class="form-label">Recherche</label>
<input id="q" class="form-control">
<!-- Boutons-icônes : un aria-label -->
<button class="btn btn-primary" aria-label="Fermer">
<span aria-hidden="true">×</span>
</button>
<!-- Texte alternatif pour un composant visuel -->
<div class="spinner-border" role="status">
<span class="visually-hidden">Chargement…</span>
</div>Hiérarchie des titres
Gardez une structure logique h1 > h2 > h3 dans le DOM ; ajustez seulement l’apparence avec les classes (<h2 class="h4">). Ne sautez pas de niveau.
Focus visible
Ne supprimez jamais l’outline de focus sans le remplacer. Bootstrap fournit des styles :focus-visible ; personnalisez-les plutôt que de les enlever.
visually-hidden vs d-none
| Classe | Effet |
|---|---|
d-none | retiré du flux et des lecteurs d’écran |
visually-hidden | invisible mais lu par les lecteurs d’écran |
visually-hidden-focusable | invisible sauf au focus (skip links) |
Lien d’évitement (skip link)
<a href="#contenu" class="visually-hidden-focusable">Aller au contenu</a>⚠️ Piège — Un bouton qui ne contient qu’une icône (
<button><i class="bi-trash"></i></button>) est muet pour un lecteur d’écran. Ajoutez unaria-label="Supprimer". C’est l’oubli d’accessibilité le plus fréquent.
💡 Pour un dev React — react-bootstrap gère le focus trap et les attributs ARIA des composants interactifs, mais pas vos
alt/aria-label. Un lint d’accessibilité (eslint-plugin-jsx-a11y) attrape la plupart de ces oublis à la compilation.
✏️ Exercices
- Rendre accessible un bouton qui n’affiche qu’une croix de fermeture.
✅ Solution
Ajouter aria-label="Fermer" (et aria-hidden="true" sur l’icône). Ou utiliser .btn-close qui prévoit déjà ce motif.
- Afficher un lien « Aller au contenu » visible seulement au focus clavier.
✅ Solution
<a href="#contenu" class="visually-hidden-focusable">Aller au contenu</a>.
🧠 Quiz de révision
1. Quelle classe masque visuellement en gardant l’accès lecteur d’écran ?
visually-hidden.
2. Que faut-il sur un bouton-icône ?
Un aria-label.
3. Bootstrap respecte-t-il prefers-reduced-motion ?
prefers-reduced-motion ?Oui, il réduit ses animations.
4. Peut-on styliser un titre sans casser la hiérarchie ?
Oui : <h2 class="h4"> (sémantique H2, apparence H4).
5. Différence d-none / visually-hidden ?
d-none / visually-hidden ?d-none retire aussi des lecteurs d’écran ; visually-hidden les laisse lire le contenu.
Chapitre suivant : 12.2 — RTL (droite à gauche)