1. Amélioration progressive
L'approche en amélioration progressive pour le développement web
1. L'approche en amélioration progressive
L'amélioration progressive (progressive enhancement) est une philosophie de développement web qui place le contenu et l'accessibilité au cœur de la conception. L'idée est simple : partir d'une base solide qui fonctionne partout, puis enrichir l'expérience pour les navigateurs et appareils qui le permettent.
Cette approche repose sur une séparation stricte entre le fond (le contenu) et la forme (la présentation et les interactions). Elle permet de :
- Garantir un contenu accessible à tous, peu importe la connexion, le navigateur ou l'appareil
- Enrichir progressivement l'expérience selon les capacités de l'équipement
À chaque étape, l'expérience reste fonctionnelle : vieux navigateur ou dernier modèle, écran étroit ou large, avec ou sans images, JavaScript activé ou non.
Amélioration progressive vs dégradation gracieuse
Ces deux approches visent le même objectif, mais partent de directions opposées.
| Approche | Point de départ | Philosophie |
|---|---|---|
| Amélioration progressive | Fonctionnalités de base | Construire vers le haut |
| Dégradation gracieuse | Fonctionnalités avancées | Retirer ce qui ne fonctionne pas |
Avec l'amélioration progressive, on construit sur le plus petit dénominateur commun et on ajoute des couches. Avec la dégradation gracieuse, on part du maximum et on espère que ça tienne si certaines fonctionnalités manquent.
L'amélioration progressive est plus robuste : le site fonctionne toujours, même si une couche échoue.
Les trois couches
- Contenu (HTML) : structure sémantique et accessible
- Présentation (CSS) : mise en page et styles visuels
- Comportement (JavaScript) : interactions et fonctionnalités avancées
Chaque couche est indépendante. Si le CSS ne charge pas, le contenu reste lisible. Si JavaScript est désactivé, les formulaires fonctionnent toujours (validation HTML et côté serveur).
Exemples de code
Couche 1 : HTML sémantique
<nav aria-label="Navigation principale">
<ul>
<li><a href="/accueil">Accueil</a></li>
<li><a href="/services">Services</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</nav>
Sans CSS ni JavaScript, cette navigation reste parfaitement utilisable.
Couche 2 : CSS pour la présentation
nav ul {
display: flex;
gap: 1rem;
list-style: none;
padding: 0;
}
nav a {
padding: 0.5rem 1rem;
text-decoration: none;
border-radius: 4px;
}
nav a:hover {
background-color: #f0f0f0;
}
Couche 3 : JavaScript pour l'interactivité
// Menu mobile uniquement si l'écran est petit
if (window.matchMedia('(max-width: 768px)').matches) {
const nav = document.querySelector('nav');
// Transformer en menu hamburger ≡
}
Détection de fonctionnalités
Plutôt que de détecter le navigateur ou la plateforme, on détecte si une fonctionnalité est supportée.
Pourquoi éviter la détection de navigateur ? Parce que les user agents peuvent être modifiés par l'utilisateur ou mentir volontairement (Chrome qui se fait passer pour Safari, par exemple). De plus, savoir qu'un visiteur utilise Firefox ne dit rien sur la version installée ni sur les fonctionnalités disponibles. La détection de fonctionnalités (feature detection) est directe : on teste si la fonctionnalité existe, point final.
En CSS avec @supports
/* Base : flexbox (très bien supporté) */
.container {
display: flex;
flex-wrap: wrap;
}
/* Amélioration : grid si disponible */
@supports (display: grid) {
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}
}
En JavaScript
// Vérifier avant d'utiliser
if ('geolocation' in navigator) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
// Alternative : demander l'adresse manuellement
showAddressForm();
}
Cas concrets
| Fonctionnalité | Base (toujours disponible) | Amélioré (si supporté) |
|---|---|---|
| Navigation | Liste de liens cliquables | Menu animé, sous-menus au survol |
| Formulaire | Validation côté serveur | Validation en temps réel |
| Images | <img> avec alt descriptif |
<picture> avec srcset pour différentes résolutions |
| Vidéo | Lien vers le fichier | Lecteur intégré avec sous-titres |
| Carte | Adresse en texte | Carte interactive |
Liens avec les pratiques modernes
L'amélioration progressive n'est pas une vieille technique dépassée. Elle est au cœur des bonnes pratiques actuelles :
- Mobile-first : on commence par les styles pour petit écran, on enrichit pour les grands
- Core Web Vitals : un site en amélioration progressive charge plus vite (HTML d'abord, le reste ensuite)
- Accessibilité (WCAG) : le contenu est accessible dès la première couche
- SEO (Search Engine Optimization, ou référencement naturel) : les moteurs de recherche indexent le HTML sans dépendre de JavaScript
Erreur courante
L'amélioration progressive ne signifie pas « faire deux versions du site ». C'est une seule base de code qui s'adapte automatiquement aux capacités du navigateur.
Pourquoi adopter cette approche
- Robustesse : le site ne casse pas si une ressource échoue
- Performance : le contenu s'affiche rapidement, les améliorations arrivent ensuite
- Accessibilité : intégrée dès le départ, pas ajoutée après coup
- Maintenance : chaque couche peut évoluer indépendamment
Références
- Amélioration progressive (Wikipedia)
- Resilient Web Design – Jeremy Keith
- Understanding Progressive Enhancement – A List Apart
- The Web Standards Model – W3C