Aller au contenu

L'accessibilité : les 4 points de la grille (WCAG AA)

L'essentiel en 3 points

  1. Un site accessible s'utilise sans souris, sans voir les images et sans une vue parfaite. La norme de référence s'appelle WCAG; votre grille exige le niveau AA.
  2. La grille nomme 4 points : la sémantique HTML5, les attributs alt, le contraste et la navigation au clavier. Chacun se teste en quelques minutes.
  3. Les outils (WAVE, Lighthouse) trouvent une partie des problèmes. Le test au clavier, fait par un humain, trouve le reste.

Pour qui? Une personne aveugle qui utilise un lecteur d'écran, une personne qui ne peut pas utiliser de souris, une personne âgée qui voit moins bien les contrastes, quelqu'un qui consulte votre site en plein soleil sur son téléphone... et le recruteur pressé qui navigue avec Tab. L'accessibilité améliore le site pour tout le monde.

  • 3. Le contraste

    4,5:1 pour le texte courant, 3:1 pour le gros texte.

    Le contraste

Retour aux consignes QA du portfolio

WAVE en ligne (aucune installation)

Allez sur wave.webaim.org , collez l'adresse de votre site en ligne (GitHub Pages), puis Entrée. Ça fonctionne dans tous les navigateurs, même sur un téléphone. Votre page s'affiche avec des icônes de couleur. Repérez-les par leur couleur : chaque catégorie a la sienne.

Couleur Catégorie Ce que ça signale Quoi faire
🔴 Errors (erreurs) Un vrai problème : image sans alt, lien ou bouton vide, lang manquant Corriger
🔴 Contrast Errors (erreurs de contraste) Texte sous le ratio AA (4,5:1 ou 3:1) Corriger
🟡 Alerts (avertissements) À juger : titre sauté, alt douteux, lien redondant Vérifier
🟢 Features (bonnes pratiques) Ce qui est déjà bien fait : alt présent, <label> relié Rien à faire
🔵 Structural Elements (structure) Vos titres et vos régions (header, nav, main...) Vérifier l'ordre
🟣 ARIA Attributs aria-* détectés (ex. aria-label) Vérifier le sens

L'onglet Structure du panneau de gauche montre le plan de vos titres et de vos régions.

Ce que WAVE ne voit pas

WAVE analyse la page telle qu'elle se charge. Une modale fermée ou un menu replié n'est pas analysé : le test au clavier (point 4) s'en charge. En multipages, collez aussi l'adresse d'un détail de projet (ex. .../project.html?id=biome).

Lexique WAVE : anglais → français

Le panneau de gauche

WAVE En français Quoi faire
Errors Erreurs À corriger, sans exception
Contrast Errors Erreurs de contraste À corriger
Alerts Avertissements À vérifier : pas toujours un problème
Features Éléments d'accessibilité présents Rien : c'est positif (ex. un alt présent)
Structural Elements Éléments de structure Vos titres et vos régions
Details / Structure / Contrast Onglets : détail, plan, contraste

Les erreurs les plus fréquentes

WAVE En français
Missing alternative text Image sans alt
Linked image missing alternative text Image dans un lien, sans alt
Empty link Lien sans texte (souvent une icône seule)
Empty button Bouton sans texte (ex. le menu hamburger)
Empty heading Titre vide
Missing form label Champ de formulaire sans <label>
Language missing or invalid lang absent ou invalide sur <html>
Very low contrast Contraste insuffisant

Les avertissements les plus fréquents

WAVE En français
Skipped heading level Niveau de titre sauté (ex. h2 → h4)
Missing first level heading Aucun h1 dans la page
Redundant alternative text Le alt répète le texte voisin
Suspicious alternative text alt douteux (ex. « image », « photo »)
Redundant link Deux liens côte à côte vers la même adresse

Pour le détail d'une erreur : cliquez sur son icône dans la page, puis sur Reference (en anglais, mais avec un exemple de code).

1. La sémantique HTML5

Le bon élément pour le bon rôle. Un lecteur d'écran s'en sert pour annoncer la page et permettre de sauter d'une région ou d'un titre à l'autre.

Comparaison de deux pages. À gauche, une page faite uniquement de div : le lecteur d'écran n'annonce que « groupe, groupe, groupe » et il faut tout écouter. À droite, une page avec header, nav, main (contenant un h1 et deux h2) et footer : le lecteur d'écran annonce « navigation, contenu principal, titre 1 » et on peut sauter directement à une région ou à un titre.

À vérifier Correct À éviter
Les régions de la page <header>, <nav>, <main> (un seul), <footer> Que des <div>
Les titres Un seul <h1> par page, puis <h2>, <h3> dans l'ordre Choisir <h4> parce qu'il est plus petit : c'est le CSS qui gère la taille
Ce qui se clique pour aller ailleurs <a href="..."> <div onclick>
Ce qui se clique pour faire une action (ouvrir le menu, la modale) <button> <div> ou <span> cliquable : impossible à atteindre au clavier
La langue de la page <html lang="fr"> lang="en" laissé par le gabarit de VS Code

Le bouton du menu mobile (hamburger)

Un bouton qui ne contient qu'une icône n'a pas de nom pour un lecteur d'écran. Donnez-lui-en un :

<button class="menu-toggle"
        aria-label="Ouvrir le menu"
        aria-expanded="false">
  <svg aria-hidden="true">...</svg>
</button>

aria-expanded passe à "true" quand le menu est ouvert : c'est une ligne de plus dans votre JS.

Tester : WAVE, onglet Structure. Vos titres doivent former un plan logique, sans trou.

2. Les attributs alt

Le alt remplace l'image pour ceux qui ne la voient pas (et quand elle ne charge pas). La question à se poser : qu'est-ce que l'image apporte?

Arbre de décision pour écrire un alt. Question 1 : l'image apporte-t-elle une information? Si non, alt vide (image décorative). Si oui, question 2 : est-elle le seul contenu d'un lien ou d'un bouton? Si oui, l'alt dit où mène le lien, par exemple « Voir le projet Biome ». Si non, l'alt dit ce qu'elle montre en une phrase, par exemple « Interface mobile de Biome : carte des sentiers ».

Type d'image alt Exemple
Informative : elle montre quelque chose d'utile Ce qu'elle montre, en une phrase alt="Interface mobile de l'application Biome : carte des sentiers"
Décorative : elle ne fait qu'embellir Vide, mais présent alt=""
Dans un lien : elle est le seul contenu du lien Où mène le lien alt="Voir le projet Biome"

Pas de « image de... »

Le lecteur d'écran annonce déjà « image ». alt="Image de mon projet" ne dit rien d'utile; alt="Affiche du festival Écho, typographie rouge sur fond noir" dit tout.

Deux cartes de projet « Biome » dont l'image ne charge pas. Sans alt, la carte montre une zone vide avec une icône d'image brisée, et le lecteur d'écran annonce le nom du fichier ou rien. Avec un alt utile, la carte affiche « Interface mobile de Biome : carte des sentiers », et c'est aussi ce que le lecteur d'écran annonce.

Vos cartes générées en JavaScript : le alt vient de vos données. Utilisez le titre du projet, ou ajoutez une propriété alt à votre source de données.

`<img src="${project.image}" alt="${project.title}">`

Tester : WAVE signale les alt manquants (Error). Un alt présent mais inutile (alt="img1", alt="photo"), seul un humain peut le voir : survolez les icônes alt dans WAVE pour les lire.

3. Le contraste

Texte Ratio minimum (AA)
Texte courant 4,5:1
Gros texte : 24 px et plus, ou 18,5 px et plus en gras 3:1
Bordures de champs, icônes utiles, indicateur de focus 3:1

Les pièges fréquents dans les portfolios : le texte gris pâle « élégant », le texte blanc sur une image, la couleur d'accent utilisée pour du texte, le texte des boutons au survol.

Testez une paire de couleurs

Pièges fréquents

Gros titre

Texte courant d'une carte de projet, en 16 px.

Tester sur votre site :

  1. Inspecteur → sélectionnez le texte → onglet Styles.
  2. Cliquez sur le petit carré de couleur à côté de color.
  3. La fenêtre affiche le Contrast ratio, avec un crochet ✔️ ou un ✖️ pour AA. Elle propose même une couleur corrigée (les deux lignes dans le dégradé).
  1. Inspecteur → onglet Accessibilité.
  2. Menu Vérifier les problèmes → Contraste.
  3. Chaque texte au contraste insuffisant est listé, avec son ratio. Cliquez sur une ligne pour le retrouver dans la page.

WAVE liste aussi les erreurs de contraste, mais il ne peut pas mesurer un texte posé sur une image : celui-là, vérifiez-le à l'œil et à l'inspecteur.

4. La navigation au clavier

Mettez la souris de côté, hors de portée de la main, et ne la touchez plus. Cliquez une dernière fois dans la barre d'adresse, puis appuyez sur Tab pour entrer dans la page. Sur votre site :

Touche Ce qu'elle doit faire
Tab / Shift+Tab Passer à l'élément interactif suivant / précédent, dans un ordre logique
Enter Suivre un lien, activer un bouton
Space Activer un bouton
Esc Fermer une modale ou un menu ouvert

Ce qu'on vérifie :

  • Tout ce qui se clique est atteignable avec Tab (liens, boutons, cartes, menu).
  • On voit toujours où est le focus.
  • L'ordre suit la lecture de la page.
  • Une modale ouverte garde le focus à l'intérieur, et Échap la ferme.

Le focus visible

Le contour du focus est souvent retiré parce qu'on le trouve laid. C'est l'erreur la plus fréquente :

/* ✖️ À ne jamais faire seul : le focus devient invisible */
button:focus { outline: none; }

/* ✔️ Un focus visible, à vos couleurs,
   seulement pour la navigation au clavier */
:focus-visible {
  outline: 3px solid var(--color-accent);
  outline-offset: 3px;
}

:focus-visible s'affiche au clavier, mais pas au clic de la souris : le meilleur des deux mondes.

Essayez au clavier

Cliquez sur Départ, puis appuyez sur Tab plusieurs fois. Décochez la case et recommencez.

La modale : utilisez <dialog>

Si votre détail de projet est une modale, l'élément <dialog> ouvert avec showModal() fait le travail difficile à votre place : le focus entre dans la modale, le reste de la page devient inactif, Échap la ferme, et les navigateurs récents redonnent le focus au bouton qui l'a ouverte.

const dialog = document.querySelector('.project-dialog');
dialog.showModal(); // et non dialog.show(), qui n'est pas modal

Prévoyez quand même un <button> de fermeture visible.

Selon votre navigateur

Rien à régler : Tab parcourt les liens et les boutons.

Rien à régler. En bonus, l'inspecteur peut afficher l'ordre de tabulation : onglet Accessibilité → cochez Afficher l'ordre de tabulation. Chaque élément atteignable reçoit un numéro, directement sur la page.

Par défaut, Safari ne fait pas passer Tab sur les liens. Activez Safari → Réglages → Avancés → « Appuyer sur Tab pour mettre en évidence chaque élément », ou utilisez Option+Tab.

Bonus : le mouvement

Vos animations au défilement respectent-elles prefers-reduced-motion? C'est vu dans la page Animations pilotées par le défilement.

Lighthouse : un point de départ

Inspecteur → onglet Lighthouse → cochez Accessibility → Analyze page load.

Firefox n'a pas Lighthouse, mais son inspecteur a un onglet Accessibilité → Vérifier les problèmes (contraste, clavier, libellés).

Utile pour un premier ménage, mais rappelez-vous : un score de 100 ne veut pas dire que votre site est accessible. Le test au clavier et la lecture des alt restent indispensables.

Références