Accessibilité web (RGAA) pour les dev
HTML sémantique, images, navigation clavier, formulaires, contrastes et ARIA. Rendre tes interfaces utilisables par toutes et tous, en s'appuyant sur le RGAA et les principes WCAG.
À la fin du cours, tu sais
- Comprendre pourquoi l'accessibilité est une nécessité, technique et légale
- Situer le RGAA par rapport aux principes WCAG
- Écrire un HTML sémantique, socle de toute accessibilité
- Rendre images et médias accessibles (alt, transcriptions)
- Garantir une navigation complète au clavier avec un focus visible
- Concevoir des formulaires compréhensibles par les technologies d'assistance
- Gérer contrastes et attributs ARIA sans en abuser, puis tester
Prérequis
- Connaître les bases de HTML et CSS (voir le cours « Introduction à HTML et CSS »)
- Aucune connaissance préalable en accessibilité n'est requise
Étape 1 sur 11 : Pourquoi l'accessibilité
Chapitre 1
Pourquoi l'accessibilité
L'accessibilité n'est pas une option pour une minorité : c'est une exigence qui concerne des millions de personnes, et une obligation légale.
L'accessibilité numérique désigne le fait de concevoir des sites et applications utilisables par toutes les personnes, y compris celles en situation de handicap. On pense spontanément aux personnes aveugles utilisant un lecteur d'écran, mais le spectre est bien plus large : personnes malvoyantes, daltoniennes, sourdes ou malentendantes, à mobilité réduite qui naviguent au clavier, atteintes de troubles cognitifs. En France, environ une personne sur cinq vit avec une forme de handicap. Ignorer l'accessibilité, c'est exclure une part énorme de tes utilisateur·ices.
L'accessibilité recouvre aussi des situations temporaires ou contextuelles : un bras cassé, un écran en plein soleil, un environnement bruyant, une connexion lente. Concevoir accessible, c'est concevoir robuste pour tout le monde. C'est l'idée du design universel : ce qui aide les personnes handicapées améliore l'expérience de tous, à l'image des rampes d'accès qui servent aussi aux poussettes et aux valises.
Une obligation légale, pas seulement morale
En France, l'accessibilité numérique est une obligation légale pour les services publics et de nombreuses entreprises (au-delà d'un certain chiffre d'affaires). Le cadre de référence est le RGAA (Référentiel Général d'Amélioration de l'Accessibilité). Le non-respect expose à des sanctions financières et à l'obligation d'afficher son niveau de conformité. Au niveau européen, la directive sur l'accessibilité renforce encore ces exigences pour les acteurs privés.
Un atout pour un profil junior
Vrai ou faux ?
L'accessibilité web ne concerne que les personnes aveugles.
Chapitre 2
Le RGAA et les principes WCAG
Le RGAA n'invente rien : il applique en France les règles internationales WCAG, organisées autour de quatre grands principes faciles à retenir.
Au niveau mondial, les règles d'accessibilité sont définies par les WCAG (Web Content Accessibility Guidelines), publiées par le W3C, l'organisme qui standardise le web. Le RGAA est la traduction et l'application française de ces WCAG : il reprend leurs exigences et fournit une méthode de test précise, avec 106 critères vérifiables. En clair : les WCAG posent les principes, le RGAA dit comment les vérifier concrètement en France.
Les quatre principes : P.O.U.R.
Toutes les règles WCAG se rangent sous quatre grands principes, faciles à mémoriser avec l'acronyme POUR. Un contenu accessible doit être :
- Perceptible : l'information doit pouvoir être perçue par tous les sens (texte alternatif pour les images, sous-titres pour les vidéos, contrastes suffisants).
- Utilisable : l'interface doit être manipulable par tous (navigation au clavier, temps suffisant, pas de contenu qui provoque des crises).
- Compréhensible : le contenu et le fonctionnement doivent être clairs (langue déclarée, libellés explicites, erreurs compréhensibles).
- Robuste : le contenu doit fonctionner avec les technologies d'assistance actuelles et futures (code valide, sémantique correcte).
Ces quatre principes structurent tout le reste du cours : les chapitres qui suivent les déclinent en gestes concrets. Retiens l'acronyme POUR, il te donne une grille de lecture pour toute question d'accessibilité : « ce que je code est-il perceptible, utilisable, compréhensible et robuste ? »
Trois niveaux de conformité : A, AA, AAA
Vrai ou faux ?
Le RGAA est une norme française totalement indépendante des règles internationales.
Chapitre 3
HTML sémantique, la fondation
80 % de l'accessibilité tient dans un HTML propre. Utiliser la bonne balise pour le bon usage, c'est déjà être accessible presque gratuitement.
Voici la meilleure nouvelle du cours : la plus grande partie de l'accessibilité s'obtient gratuitement, simplement en écrivant un HTML sémantique, c'est-à-dire en utilisant chaque balise pour ce à quoi elle sert. Un lecteur d'écran s'appuie sur ces balises pour annoncer la nature de chaque élément : « titre de niveau 1 », « bouton », « liste de 5 éléments ». Un <div> ne dit rien ; un <button> dit tout.
Les repères de la page (landmarks)
<header>...</header> <!-- l'en-tête -->
<nav>...</nav> <!-- la navigation principale -->
<main>...</main> <!-- le contenu principal, unique -->
<aside>...</aside> <!-- contenu complémentaire -->
<footer>...</footer> <!-- le pied de page -->Ces balises de structure créent des repères (landmarks) que les technologies d'assistance permettent de parcourir directement : une personne au lecteur d'écran peut sauter au <main> ou lister les zones de navigation. Remplacer ces balises par des <div> génériques prive l'utilisateur·ice de ces repères. La règle est simple : une seule balise <main> par page, et chaque grande zone dans sa balise sémantique.
La hiérarchie des titres
<h1>Le titre principal de la page (un seul par page)</h1>
<h2>Une grande section</h2>
<h3>Une sous-section</h3>
<h3>Une autre sous-section</h3>
<h2>Une autre grande section</h2>Les titres (<h1> à <h6>) forment le plan de la page, comme une table des matières. Une personne au lecteur d'écran navigue de titre en titre pour comprendre la structure et accéder directement à la section voulue. La règle : un seul <h1>, puis une hiérarchie logique sans sauter de niveau (ne passe pas d'un <h2> à un <h4>). Ne choisis jamais un niveau de titre pour sa taille visuelle, c'est le rôle du CSS.
Le piège du div-bouton
<div onclick="..."> stylé en bouton est inaccessible : il n'est pas focalisable au clavier, ne réagit pas à la touche Entrée, et n'est pas annoncé comme un bouton. Utilise toujours un vrai <button> pour une action, et un <a> pour un lien qui mène ailleurs. Ces éléments natifs sont accessibles par défaut : c'est autant de travail en moins et de bugs évités.Vrai ou faux ?
Un <div> stylé en bouton avec un onclick est aussi accessible qu'un vrai <button>.
Chapitre 4
Images, médias et contenus non textuels
Une image, une vidéo, un son ne sont pas perçus par tout le monde. Leur équivalent textuel est ce qui les rend accessibles.
Le principe Perceptible impose que toute information non textuelle ait un équivalent texte. Pour une image, c'est l'attribut alt : une description textuelle que le lecteur d'écran énonce et qui s'affiche si l'image ne charge pas. Bien rédiger un alt est un art : il doit décrire l'information portée par l'image, pas l'image en elle-même, et rester concis.
<!-- Image porteuse d'information : alt descriptif -->
<img src="graphique.png"
alt="Ventes en hausse de 20 % entre janvier et juin 2026" />
<!-- Image purement décorative : alt VIDE (mais présent) -->
<img src="ornement.svg" alt="" />
<!-- Logo cliquable : l'alt décrit la destination -->
<a href="/"><img src="logo.png" alt="Accueil de Mon Entreprise" /></a>Cas crucial souvent raté : l'image décorative. Une image qui n'apporte aucune information (un ornement, un fond) doit avoir un alt vide (alt=""), mais présent. Ainsi, le lecteur d'écran l'ignore poliment. Un alt totalement absent, à l'inverse, pousse certains lecteurs à lire le nom du fichier (« ornement point s v g »), ce qui pollue l'écoute. Vide pour le décoratif, descriptif pour l'informatif : c'est la règle.
Vidéos et sons
- Sous-titres : toute vidéo parlée a des sous-titres synchronisés, pour les personnes sourdes ou malentendantes.
- Transcription : un équivalent texte complet (audio et vidéo) permet de tout consulter sans le son ni l'image.
- Audiodescription : pour les contenus visuels essentiels, une description audio de ce qui se passe à l'écran.
- Pas de lecture automatique avec du son : elle perturbe et peut masquer un lecteur d'écran.
Le test du alt : « et si je ne voyais pas l'image ? »
alt, imagine qu'on te lise la page à voix haute. L'alt transmet-il la même information que l'image ? Une photo d'illustration sans information ? alt="". Un graphique de données ? Décris la tendance. Un bouton icône « poubelle » ? alt="Supprimer". Tu te mets à la place de la personne : c'est le meilleur guide.Vrai ou faux ?
Une image purement décorative doit avoir un attribut alt avec une description détaillée.
Chapitre 6
Formulaires accessibles
Les formulaires concentrent les enjeux d'accessibilité : sans étiquette ni message d'erreur clair, ils deviennent infranchissables.
Un formulaire inaccessible bloque l'utilisateur·ice au moment le plus important : celui de l'action. Le point de départ, tu le connais déjà du cours Opquast : chaque champ a une étiquette associée. En accessibilité, c'est vital : sans <label> correctement lié, le lecteur d'écran annonce « champ de saisie » sans dire de quoi il s'agit. La personne ne sait pas quoi taper.
<!-- Étiquette liée au champ par for/id : le lecteur annonce "Adresse e-mail" -->
<label for="email">Adresse e-mail</label>
<input type="email" id="email" name="email" required
aria-describedby="aide-email" />
<p id="aide-email">Nous ne partagerons jamais votre adresse.</p>L'attribut aria-describedby relie un champ à un texte d'aide ou d'explication, que le lecteur d'écran énonce en plus de l'étiquette. Le type="email" aide aussi : il déclenche le clavier adapté sur mobile et une validation de base. Utiliser les bons types de champ (email, tel, date) est un geste d'accessibilité et d'ergonomie.
Grouper avec fieldset et legend
<fieldset>
<legend>Choisissez votre formule</legend>
<input type="radio" id="mensuel" name="formule" />
<label for="mensuel">Mensuelle</label>
<input type="radio" id="annuel" name="formule" />
<label for="annuel">Annuelle</label>
</fieldset>Pour un groupe de champs liés (des boutons radio, une série de cases), on les rassemble dans un <fieldset> avec une <legend> qui donne le sens du groupe. Le lecteur d'écran annonce alors « Choisissez votre formule, Mensuelle » : la question et l'option, au lieu d'un « Mensuelle » isolé et incompréhensible.
Des erreurs accessibles
- Message explicite : « Le format de l'e-mail est invalide », pas juste « Erreur » ou un champ rouge.
- À proximité du champ : l'erreur est affichée près du champ concerné et lui est reliée (
aria-describedby). - Pas seulement la couleur : un texte et une icône accompagnent le rouge, jamais la couleur seule.
- Annoncée : une zone « live » (
aria-live) permet au lecteur d'écran d'énoncer l'erreur dès son apparition.
Vrai ou faux ?
Signaler une erreur de formulaire uniquement en colorant le champ en rouge est accessible.
Chapitre 7
Couleurs, contrastes et ARIA
Deux sujets qui font peur mais reposent sur des règles simples : le contraste des couleurs, et le bon usage (parcimonieux) d'ARIA.
Un texte gris clair sur fond blanc est illisible pour beaucoup de monde, pas seulement les personnes malvoyantes : pense à un écran en plein soleil. Le principe Perceptible impose un contraste suffisant entre le texte et son fond. La règle WCAG de niveau AA : un rapport de contraste d'au moins 4,5:1 pour le texte normal, et 3:1 pour les grands textes. Ce ratio se mesure avec des outils gratuits.
L'information ne repose jamais sur la seule couleur
<!-- ❌ L'information passe par la seule couleur -->
<span style="color: green">Disponible</span>
<span style="color: red">Rupture</span>
<!-- ✅ Un texte et une icône, en plus de la couleur -->
<span class="ok">✔ Disponible</span>
<span class="ko">✘ Rupture de stock</span>ARIA : à utiliser avec prudence
ARIA est un ensemble d'attributs (role, aria-label, aria-live...) qui ajoutent de l'information d'accessibilité là où le HTML ne suffit pas, typiquement pour des composants complexes (onglets, fenêtres modales). Mais ARIA est un outil à double tranchant : mal employé, il rend un site moins accessible qu'un HTML simple. D'où la première règle d'ARIA, un brin provocatrice : « la meilleure règle ARIA, c'est de ne pas utiliser ARIA » quand une balise HTML native fait le travail.
<!-- Inutile : le bouton natif est déjà annoncé comme bouton -->
<button role="button">Valider</button> <!-- role redondant -->
<!-- Usage légitime : un bouton icône sans texte visible -->
<button aria-label="Fermer la fenêtre">✕</button>L'usage le plus courant et légitime d'ARIA pour un junior est aria-label : donner un nom accessible à un élément qui n'a pas de texte visible, comme un bouton icône (une croix de fermeture, une loupe de recherche). Sans lui, le lecteur d'écran annoncerait « bouton » sans plus. Au-delà de ces cas simples, privilégie toujours le HTML natif, et n'ajoute ARIA que si tu sais précisément pourquoi.
🧭 Une personne au lecteur d'écran ne peut pas utiliser ton menu déroulant
Tu as codé un menu déroulant custom avec des <code><div></code> et du JavaScript. Il marche à la souris, mais une personne au clavier et au lecteur d'écran ne peut ni l'ouvrir, ni comprendre ce que c'est. Comment corriges-tu ?
Le menu est fait de <div class="menu" onclick>. Quelle est ta première réaction ?
Pour aller plus loin
- Le référentiel RGAA officiel (numerique.gouv.fr) · numerique.gouv.fr (nouvel onglet)
- Introduction à l'accessibilité web (MDN, en français) · MDN (nouvel onglet)
- Vérifier le contraste des couleurs (outil en ligne) · WebAIM (en anglais) (nouvel onglet)
- Complément direct : Qualité web avec Opquast · Ce site (nouvel onglet)
Chapitre 8
Tester et intégrer l'accessibilité
L'accessibilité se vérifie avec des outils et des tests manuels, et s'intègre au fil du projet plutôt qu'en correction finale.
On ne « devine » pas l'accessibilité, on la teste. La bonne approche combine trois niveaux : les outils automatiques (rapides mais partiels), les tests manuels (clavier, zoom) et, idéalement, l'écoute au lecteur d'écran. Les outils automatiques ne détectent qu'environ 30 % des problèmes : ils sont un point de départ, pas une garantie.
- axe DevTools ou Lighthouse : des extensions qui analysent une page et listent les erreurs (contrastes, alt manquants, labels).
- Le test clavier : navigue toute la page avec Tab, sans souris. Le test le plus rentable.
- Le zoom : agrandis la page à 200 %, tout doit rester lisible et utilisable.
- Un lecteur d'écran : VoiceOver (Mac), NVDA (Windows, gratuit) pour entendre ta page comme un utilisateur·ice.
Intégrer plutôt que corriger
Comme pour la qualité web, l'erreur est de reléguer l'accessibilité à la fin. Corriger un site inaccessible coûte cher ; concevoir accessible dès le départ ne coûte presque rien. Le secret est d'intégrer les réflexes à chaque étape : HTML sémantique quand tu structures, alt quand tu ajoutes une image, label quand tu crées un champ, test clavier avant chaque livraison. L'accessibilité devient alors une habitude, pas une contrainte de dernière minute.
Enfin, la loi impose aux organismes concernés de publier une déclaration d'accessibilité indiquant leur niveau de conformité au RGAA, et un plan d'amélioration. En tant que dev, tu contribues à ce niveau de conformité par chaque ligne de code accessible que tu écris. C'est une responsabilité concrète, et un argument fort en entretien comme devant un jury RNCP.
L'accessibilité, une compétence qui te distingue
Vrai ou faux ?
Les outils automatiques d'accessibilité (axe, Lighthouse) détectent la totalité des problèmes d'accessibilité d'une page.
🛠️ Exercice optionnel
Rendre une carte produit accessible
On te donne une carte produit codée « à l'ancienne », avec des <div> partout, une image sans alt, un faux bouton et une information portée par la seule couleur. Ton rôle : la réécrire de façon accessible, en appliquant les réflexes du cours.
Ta mission
- Structure : la carte est un
<div>contenant un titre en<div class="titre">. Utilise les bonnes balises (élément d'article, vrai titre). - Image : l'image produit n'a pas d'
alt. Ajoute un texte alternatif pertinent. - Disponibilité : le statut « En stock » est affiché en vert uniquement. Rends l'information indépendante de la couleur.
- Action : le bouton « Ajouter au panier » est un
<div onclick>. Remplace-le par un élément accessible au clavier. - Bouton icône : un cœur « ajouter aux favoris » n'a qu'une icône, sans texte. Donne-lui un nom accessible.
- Bonus : décris comment tu testerais l'accessibilité de cette carte en deux minutes.
Tu bloques ? Des indices, à dévoiler quand tu en as besoin.
Indice 1
Indice masqué.
Indice 2
Indice masqué.
Indice 3
Indice masqué.
✅ QCM de fin de cours
Teste tes acquis
10 questions, plusieurs réponses parfois possibles. Coche tout ce qui te semble juste, puis valide pour voir ton score et les explications.
- 1
Que désigne le RGAA ?
- 2
Que signifie l'acronyme POUR des principes WCAG ?
- 3
Pourquoi utiliser un
<button>plutôt qu'un<div onclick>? - 4
Quel
altdonner à une image purement décorative ? - 5
Que se passe-t-il si on écrit
button:focus { outline: none }sans alternative ? - 6
Comment associer une étiquette à un champ de formulaire pour un lecteur d'écran ?
- 7
Quel est le rapport de contraste minimal (WCAG AA) pour un texte normal ?
- 8
Pourquoi ne jamais faire reposer une information sur la seule couleur ?
- 9
Quel est le bon état d'esprit vis-à-vis d'ARIA ?
- 10
Que couvrent les outils automatiques d'accessibilité comme axe ou Lighthouse ?
Tu peux laisser des questions sans réponse, elles compteront comme fausses.
🎓 Attestation
Ton attestation de réussite
Termine le QCM avec au moins 80% de bonnes réponses pour débloquer ton attestation de réussite.
Tu veux ce cours pour ton équipe ?
Je peux adapter et animer ce cours pour tes formateur·ices ou tes apprenant·es, en présentiel ou en distanciel. Parlons-en pendant l'audit gratuit.
Réserver un audit gratuit →