Bibliothèque · Résumé et avis

Web Accessibility Cookbook

De Manuel Matuzović. 70+ recettes qui enseignent l'accessibilité en enseignant le HTML pour de vrai : le livre a11y le plus pratique qui soit.

FR EN
Couverture de Web Accessibility Cookbook, Manuel Matuzović

Web Accessibility Cookbook

Web Accessibility Cookbook: Creating Inclusive Experiences

8.8 /10

« Le livre d'accessibilité déguisé en meilleur tutoriel HTML que vous lirez. »

  • AuteurManuel Matuzović
  • Année2024 · O'Reilly · 1re éd.
  • Pages382
  • Fiche~10 min de lecture
Notation du livre sur 5 dimensionsIdées7/10Applicable10/10Lisibilité9/10Actualité9/10Exemples9/10

Des composants accessibles prêts à l'emploi : le livre a11y le plus récent et le plus pratique.

Pourquoi ce livre

La plupart des livres sur l'accessibilité commencent par essayer de vous convaincre qu'elle compte. Celui-ci, non. Dès la préface, Jeremy Keith le dit franchement : « ce n'est pas ce livre-là ». Matuzović part du principe que vous êtes déjà d'accord, et vous tend un guide pratique à la place : plus de 70 recettes pour les problèmes que vous rencontrez vraiment.

J'anime un cours d'accessibilité sur ce site : je l'ai donc ouvert d'un œil méfiant. Il tient la route. Mieux : Keith le présente comme « l'un des meilleurs tutoriels HTML que vous lirez jamais », et c'est exact. On vient pour les recettes d'accessibilité, on repart en ayant enfin compris le HTML lui-même, parce qu'une bonne accessibilité n'est rien d'autre que du bon HTML.

Les idées qui restent

1Tout élément a un nom, un rôle, un état

Le livre est un vrai livre de cuisine (treize chapitres de recettes autonomes), mais sous les recettes il y a un modèle mental unique, et c'est lui qu'il faut emporter. Une personne aveugle ne voit pas votre bouton ; son lecteur d'écran le lui annonce, en trois informations : un nom (le texte lu), un rôle (quel genre de chose c'est) et un état (coché, ouvert, désactivé…).

<button aria-pressed="true">Favori</button>
<!-- annoncé : "Favori, bouton, activé" -->
<!--            ^nom    ^rôle   ^état -->

Toute l'accessibilité tient dans cette boucle : à chaque composant, demandez-vous « son nom, son rôle et son état sont-ils corrects et annoncés ? ». Un <div> cliquable n'a ni rôle ni état : pour le lecteur d'écran, il n'existe pas. C'est pour ça que la première règle (idée 2) est d'utiliser le bon élément HTML, qui fournit ces trois informations gratuitement. Et comme le dit la préface, l'accessibilité « ne fait pas qu'effleurer les disciplines du web, elle les relie » : la recette de l'un est souvent celle de tous.

2La première règle d'ARIA : ne pas utiliser ARIA

La colonne vertébrale de tout le livre : prenez d'abord l'élément HTML natif, et n'ajoutez ARIA que si aucun élément ne fait le travail. Un vrai <button> arrive avec un rôle, le support clavier et le focus ; un <div role="button"> vous oblige à tout reconstruire à la main, et le WebAIM Million a trouvé que 27,5 % des sites le ratent.

Tout élément interactif a besoin de deux choses sur lesquelles le livre revient sans cesse : un rôle (quel genre d'élément c'est) et un nom accessible (le texte que le lecteur d'écran annonce). Réussissez ça en HTML simple, et l'essentiel de l'accessibilité est déjà fait.

4Respecter les réglages de l'utilisateur, pas les écraser

Les navigateurs et les systèmes exposent déjà ce dont les gens ont besoin :

  • le mode sombre (prefers-color-scheme) ;
  • le mouvement réduit (prefers-reduced-motion) ;
  • le contraste accru et les couleurs forcées ;
  • une police de base plus grande.

Le chapitre CSS est un long plaidoyer : ignorer ces signaux n'est pas neutre, c'est un manque de respect.

Le détail qui reste : la media query s'appelle prefers-reduced-motion, « et pas prefers-no-motion, pour une raison » (ch. 5). Le but est de couper le mouvement gratuit, pas de tuer toute animation. Et le CSS peut casser le sens en silence : list-style: none peut retirer la sémantique de liste dans Safari, obligeant parfois à remettre role="list".

5Le focus, c'est le curseur de ceux qui n'ont pas de souris

Pour les utilisateurs au clavier et au lecteur d'écran, l'anneau de focus EST le pointeur. La formule de Matuzović est sans détour : « supprimer les indicateurs de focus pour les utilisateurs clavier, c'est comme cacher le curseur pour les utilisateurs souris » (ch. 6). On ne supprime donc jamais l'outline ; on le stylise, idéalement avec :focus-visible, et on le garde visible en mode Forced Colors grâce à l'astuce de l'outline transparent.

Deux règles ferment le chapitre. L'ordre de lecture suit le DOM : réordonner en CSS avec order ou flex-direction désynchronise le vu et le lu. Et pour les modales, préférez le <dialog> natif ou l'attribut inert à un piège à focus fait maison.

6Cacher du contenu : cinq méthodes, des effets opposés

« Caché » ne veut pas dire une seule chose. Cacher visuellement n'est pas cacher au lecteur d'écran, et on confond les deux avec des résultats douloureux. Le livre met les compromis côte à côte.

Pour le cas courant (une section qu'on déplie), le <details> natif fonctionne sans une ligne de JavaScript ; le chapitre le pèse honnêtement contre un disclosure widget maison quand on veut un comportement cohérent d'un navigateur à l'autre.

7La moitié des champs de formulaire du web n'ont pas d'étiquette

Le chiffre qui cadre le chapitre : selon le WebAIM Million 2023, « 45,9 % des sites testés contenaient des champs de formulaire sans étiquette » (ch. 9), comprenez sans <label>, l'élément HTML qui nomme un champ. Une étiquette visible, reliée à son champ par for/id, est le seul non-négociable ; tout le reste (indications, messages d'erreur, regroupement) ne fait que réduire l'effort par-dessus.

Les recettes sont celles qu'on réutilise à vie :

  • <fieldset> + <legend> pour les groupes de boutons radio et de cases ;
  • aria-describedby pour les indications et les messages d'erreur ;
  • un résumé d'erreurs en haut qui prend le focus à la soumission.

Le placeholder en guise d'étiquette, rappelle le livre, est un anti-pattern : il disparaît dès qu'on tape.

8Les tests automatiques sont un filet, pas un certificat

Le dernier chapitre est une douche froide. Les outils comme axe, Lighthouse et WAVE attrapent les erreurs mécaniques, mais pas le sens. La différence est nette :

<img src="chart.png">              <!-- axe LE VOIT : alt manquant, erreur -->
<img src="chart.png" alt="image">  <!-- axe NE VOIT RIEN : alt présent…
                                          mais "image" ne dit rien d'utile -->

« Un score parfait ne veut pas dire que votre site est accessible » (ch. 13) : l'outil vérifie qu'un alt existe, jamais qu'il décrit vraiment l'image. C'est un filet de départ, pas une ligne d'arrivée. L'avertissement le plus moderne concerne les web components : l'encapsulation du Shadow DOM casse les références par ID, donc une étiquette dans le light DOM ne peut pas pointer vers un champ dans le shadow DOM. Pire, plusieurs auditeurs populaires ne voient rien du tout à l'intérieur d'un shadow root. Construisez des composants accessibles, puis testez-les avec un vrai lecteur d'écran.

L'avertissement le plus moderne concerne les web components : l'encapsulation du Shadow DOM casse les références par ID, donc une étiquette dans le light DOM ne peut pas pointer vers un champ dans le shadow DOM. Pire, plusieurs auditeurs populaires ne voient rien du tout à l'intérieur d'un shadow root. Construisez des composants accessibles, puis testez-les avec un vrai lecteur d'écran.

Un robot souriant brandit une check-list de coches vertes avec un badge 100, tandis qu'une personne à son laptop fronce les sourcils et pointe un escalier sans rampe affiché à l'écran, la barrière que le robot a ratée
Un score vert est un filet qui a attrapé les cas faciles, pas une preuve que la page est utilisable.

Trois choses que je ne savais pas

Mon avis, honnêtement

C'est le livre d'accessibilité que je mettrais aujourd'hui entre les mains d'un développeur front-end en poste. Il ne moralise jamais, ne remplit jamais, et mérite le compliment de Keith : enseigner l'accessibilité aussi concrètement oblige à enseigner le HTML pour de vrai, et c'est précisément ce qui nous manque à la plupart. Les recettes sont copiables telles quelles et, plus rare, honnêtes sur leurs compromis : plus d'une fois, la réponse est « il n'y a pas de solution parfaite, voici les options, testez avec des utilisateurs ».

Les réserves tiennent surtout au format. En cookbook, c'est une référence où l'on pioche, pas une histoire qu'on retient ; lu d'un bout à l'autre, le « utilisez d'abord le HTML natif » qui revient peut sembler répétitif (il est répété parce qu'il est vrai). Et les parties les plus précieuses (les tableaux de support des lecteurs d'écran, datés) sont aussi les plus périssables : dans deux ans, certaines lignes seront fausses. Prenez les principes comme permanents et re-vérifiez les tableaux.

En 2026, il a un second métier qu'il n'avait pas prévu : relire le markup généré par IA. Les modèles produisent volontiers de la soupe de <div> avec de l'ARIA plaqué dessus, exactement le défaut que ce livre apprend à repérer et refuser. À lire à côté du soin de la ligne de Clean Code et de la structure d'Ousterhout ; celui-ci occupe la couche du milieu, le HTML que l'utilisateur touche vraiment.

Odilon

Toujours valable en 2026 ?

Très. C'est un livre de 2024 qui s'appuie déjà sur le CSS moderne (:has(), :focus-visible, inert, l'animation de grid-template-rows) : les techniques sont d'actualité, pas datées. La seule partie à lire avec une date en tête, ce sont les tableaux de support des lecteurs d'écran (début 2024) et l'histoire encore mouvante d'ARIA dans les web components. Les principes, HTML sémantique et première règle d'ARIA, n'expirent pas.

Pour qui ?

Lisez-le si

  • Vous écrivez du HTML/CSS/JS et voulez des composants accessibles sans six mois de cours d'abord
  • Vous dégainez role et aria-* avant de vérifier qu'un élément natif existe
  • Vous relisez du markup généré par IA et voulez une grille pour le juger
  • Vous voulez une seule référence d'étagère pour liens, boutons, formulaires, focus, tables et composants

Passez si

  • Vous cherchez le plaidoyer « pourquoi l'accessibilité compte » : ce livre le saute volontairement
  • Vous n'écrivez pas de front-end : c'est du HTML/CSS/JS concret, pas de la stratégie
  • Vous attendez un cours linéaire : c'est un livre de recettes, à picorer

Pour aller plus loin

Le cours d'accessibilité de ce site pratique exactement ces fondations (HTML sémantique, focus, formulaires), et le cours HTML pose les bases que le livre suppose acquises. Le code de chaque recette vit sur accessibility-cookbook.com. Dans cette bibliothèque, Clean Code et A Philosophy of Software Design sont ses compagnons naturels sur l'art d'écrire du code réellement utilisable.

Commentaires (0)

Voir toute la bibliothèque

D'autres fiches arrivent : un livre à la fois, la substantifique moelle seulement.