Module Bootstrap.7 – Accessibilité & performance
Objectif
Maîtriser l'accessibilité Bootstrap (A11Y) et optimiser les performances pour créer des sites Bootstrap accessibles et performants.
Théorie
Accessibilité Bootstrap
Bootstrap inclut :
- ✅ Support ARIA
- ✅ Navigation clavier
- ✅ Contraste des couleurs
- ✅ Focus visible
- ✅ Screen readers
ARIA dans Bootstrap
Bootstrap ajoute automatiquement :
<!-- Navbar -->
<nav class="navbar" role="navigation" aria-label="Navigation principale">
<!-- Modal -->
<div class="modal" role="dialog" aria-modal="true" aria-labelledby="modalTitle">
<!-- Dropdown -->
<button aria-expanded="false" aria-haspopup="true">
Bonnes pratiques :
- Utiliser les composants Bootstrap (ARIA inclus)
- Ajouter
aria-labelsi nécessaire - Vérifier avec outils d'accessibilité
Navigation clavier
Bootstrap supporte :
- Tab : Navigation entre éléments
- Entrée : Activer boutons/liens
- Espace : Activer boutons
- Flèches : Navigation dans dropdowns/carousels
- ESC : Fermer modals
Focus visible :
/* Bootstrap inclut des styles de focus */
.btn:focus {
outline: 0;
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
}
Contraste des couleurs
Bootstrap respecte WCAG :
- Texte sur fond : Contraste suffisant
- Liens : Contraste approprié
- Boutons : Contraste vérifié
Vérifier :
- Utiliser WAVE ou axe DevTools
- Tester avec Color Contrast Checker
- Vérifier tous les états (hover, active)
Performance Bootstrap
Bundle size
Bootstrap complet :
- CSS : ~200KB (non minifié)
- CSS : ~150KB (minifié)
- JS : ~60KB (minifié)
Optimisations :
1. Imports sélectifs (SCSS) :
// Importer seulement ce dont vous avez besoin
@import "bootstrap/grid";
@import "bootstrap/buttons";
@import "bootstrap/cards";
// Pas tout Bootstrap
2. Purge CSS :
// webpack.config.js ou tailwind.config.js
purge: {
content: ['./src/**/*.html'],
}
3. Lazy load JavaScript :
<script src="bootstrap.bundle.min.js" defer></script>
Critical CSS
Extraire le CSS critique :
<head>
<style>
/* CSS critique (above-the-fold) */
.navbar { }
.hero { }
</style>
<link rel="preload" href="bootstrap.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
</head>
Optimisation des images
Dans les composants Bootstrap :
<!-- Carousel avec images optimisées -->
<img src="image.webp"
srcset="image-small.webp 300w, image-large.webp 1200w"
loading="lazy"
alt="Description">
Bonnes pratiques A11Y
1. Utiliser les composants Bootstrap
✅ Bon :
<button class="btn btn-primary" type="button">Bouton</button>
❌ Mauvais :
<div class="btn btn-primary" onclick="...">Div stylé comme bouton</div>
Pourquoi : Composants Bootstrap = accessibilité incluse.
2. Labels sur les formulaires
✅ Bon :
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email">
❌ Mauvais :
<input type="email" class="form-control" placeholder="Email">
Pourquoi : Labels = accessibilité.
3. Navigation clavier
Tester :
- Navigation uniquement au clavier (Tab)
- Tous les éléments interactifs accessibles
- Focus visible
4. Contraste
Vérifier :
- Texte sur fond : Ratio 4.5:1 minimum
- Liens : Contraste suffisant
- Boutons : Contraste vérifié
5. ARIA approprié
Ajouter si nécessaire :
<nav aria-label="Navigation principale">
<button aria-label="Fermer la modal">
<div role="alert">Message important</div>
Outils de test
Accessibilité :
- WAVE : Extension navigateur
- axe DevTools : Extension Chrome
- Lighthouse : Audit accessibilité
- Screen readers : NVDA, JAWS, VoiceOver
Performance :
- Lighthouse : Score performance
- PageSpeed Insights : Analyse complète
- Bundle Analyzer : Taille du bundle
Exercices guidés
Exercice 1 : Test d'accessibilité
Testez votre site Bootstrap :
- WAVE (0 erreurs)
- Navigation clavier
- Contraste des couleurs
- Screen reader (si possible)
Exercice 2 : Optimisation bundle
Optimisez Bootstrap :
- Imports sélectifs
- Purge CSS
- Comparez la taille avant/après
Exercice 3 : Critical CSS
Extrayez le CSS critique :
- Identifiez le CSS above-the-fold
- Inline dans
<head> - Chargez le reste en async
Exercice 4 : ARIA
Ajoutez ARIA approprié :
- Labels manquants
- Roles si nécessaire
- aria-label pour icônes
Exercice 5 : Performance
Optimisez les performances :
- Lazy load images
- Defer JavaScript
- Minification
- Testez avec Lighthouse
❌ Erreurs fréquentes
Erreur 1 : Ignorer l'accessibilité
❌ Mauvais :
<div class="btn" onclick="...">Action</div>
✅ Bon :
<button class="btn btn-primary" type="button">Action</button>
Pourquoi : Utiliser les éléments sémantiques.
Erreur 2 : Bundle trop gros
❌ Mauvais :
@import "bootstrap"; // Tout Bootstrap
✅ Bon :
// Imports sélectifs
@import "bootstrap/grid";
@import "bootstrap/buttons";
Pourquoi : Réduire la taille = meilleure performance.
Erreur 3 : Pas de labels
❌ Mauvais :
<input type="email" class="form-control" placeholder="Email">
✅ Bon :
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email">
Pourquoi : Accessibilité et UX.
Erreur 4 : Contraste insuffisant
❌ Mauvais :
<button class="btn btn-light">Texte clair sur fond clair</button>
✅ Bon :
<button class="btn btn-dark">Texte clair sur fond foncé</button>
Pourquoi : WCAG exige un contraste minimum.
Erreur 5 : JavaScript bloquant
❌ Mauvais :
<script src="bootstrap.js"></script>
<!-- Bloque le rendu -->
✅ Bon :
<script src="bootstrap.js" defer></script>
<!-- Non bloquant -->
Pourquoi : Performance (First Contentful Paint).
🚀 Mini-projet
Mission : Optimiser un site Bootstrap pour A11Y et performance
Prenez un site Bootstrap et optimisez-le :
Accessibilité :
- WAVE : 0 erreurs
- Navigation clavier fonctionnelle
- Contraste WCAG AA
- ARIA approprié
- Labels sur tous les formulaires
Performance :
- Bundle optimisé (imports sélectifs)
- Critical CSS extrait
- Images optimisées
- JavaScript defer
- Lighthouse score > 90
Critères :
- ✅ Accessibilité complète (WCAG AA)
- ✅ Performance optimisée
- ✅ Bundle réduit
- ✅ Tests passés (WAVE, Lighthouse)
Objectif : Créer un site Bootstrap accessible et performant.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez l'accessibilité et la performance Bootstrap et avez optimisé un site.