SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
ARIA pour l’accessibilité, quand
et comment l’utiliser ?
WordCamp Paris
25 avril 2019
Claire Bizingre
Claire Bizingre
Experte en Accessibilité numérique
et Qualité Web
claire.bizingre@temesis.com
Twitter : @accesbilis
WAI-ARIA
Web Accessibility Initiative
Accessible Rich Internet Applications
OU
Comment rendre les composants d’interface dynamiques
plus accessibles
Les principaux usages concernés
Lecteur d’écran Commande vocale
WAI-ARIA peut influencer ces usages :
les améliorer ou les dégrader
Mais concrètement ?
• Attribut role : button, search…
• Attribut d’état : aria-disabled, aria-expanded, aria-hidden…
• Attribut de propriété : aria-required, aria-describedby…
Intégrés dans les balises HTML, pour ajouter du sens si besoin
Spécification : https://www.w3.org/TR/wai-aria-1.1
Utilisation de Aria
1. Privilégier les éléments HTML natifs
2. Changer la sémantique d’un élément que si nécessaire
3. Assurer l’usage d’un composant dynamique au clavier
4. Ne pas supprimer la restitution des éléments visibles atteignables
au clavier
5. Tous les éléments interactifs doivent avoir un nom accessible.
https://w3c.github.io/using-aria/
WAI – ARIA 1.1
Note : https://www.w3.org/TR/wai-aria-practices-1.1/
Ne pas tromper l’utilisateur !
• Une listbox (liste déroulante) pour un carrousel
• Un tabpanel (onglet) pour des colonnes de
présentation
• Un tabpanel pour un menu de navigation
• Un tabpanel pour un accordéon (obsolète)
• Un menu, menubar pour un menu de navigation
Trio Navigateur - OS - Technologie d’assistance
ex : API accessibilité sous Windows
ex : Firefox
ex : NVDA
Illustration : http://wicg.github.io/aom/demos/#7
L’arbre d’accessibilité (Accessibility tree)
<button type="button">
Afficher plus d’actualités
</button>
Role : button
Nom accessible : "Afficher plus d’actualités"
État, propriété : enabled, focusable
Visualisation de l’arbre avec Firefox
Arbre d’accessibilité et restitution
<button type="button">
Afficher plus d’actualités
</button>
Restitution avec NVDA
Afficher plus d’actualités bouton
Nom accessible d’un champ de saisie
<label>Votre nom</label>
<input id="id-nom" type="text" name="nom" />
Sans liaison,
<input> nom accessible : "" Édition
Nom accessible d’un champ de saisie lié à
son étiquette
<label for="id-nom">Votre nom</label>
<input id="id-nom" type="text" name="nom" />
Avec la liaison,
<input> nom accessible : "Votre nom" Votre nom Édition
Nom accessible d’un lien avec un intitulé
<a href="https://2019.paris.wordcamp.org/">
<img src="logo-wcp19.png" alt="WordCamp Paris 2019" />
</a>
<a> nom accessible :
"WordCamp Paris 2019"
WordCamp Paris 2019 lien
Nom accessible d’un lien sans intitulé
<a href="https://2019.paris.wordcamp.org/">
<img src="logo-wcp19.png" alt="WordCamp Paris 2019" />
</a>
<a> nom accessible : "" lien
Les landmarks – balise et role
<header role="banner">…</header>
<form role="search">…</form>
<nav role="navigation">…</nav>
<main role="main">…</main>
<footer role="contentinfo">…</footer>
Attribut role encore nécessaire
Jeu de tests : https://www.scottohara.me/blog/2019/04/05/landmarks-exposed.html
Icon font
<a href="urlpage">
À la une
<span class="arrow-left"></span>
</a>
Propriété CSS « content » de l’icône pouvant être restituée
Icon font non restitué avec aria-hidden
<a href="urlpage">
À la une
<span class="arrow-left" aria-hidden="true"></span>
</a>
Icon svg - aria-hidden et focusable
<a href="urlpage">
À la une
<svg aria-hidden="true" focusable="false">…</svg>
</a>
Show/hide et aria-expanded utile
<button type="button" aria-expanded="false">
Menu
</button>
Menu bouton réduitAprès activation
<button type="button" aria-expanded="true">
Menu
</button>
Menu bouton développé
Pattern Accordéon
service-public.fr
<h2>
<button type="button" aria-expanded="false">
Où et comment faire la démarche
</button>
</h2>
Niveau de titre à adapter
Plugin respectant le pattern accordéon ARIA : https://fr.wordpress.org/plugins/ad-sliding-faq /
Show/hide et aria-expanded inutile
<button type="button" >
Plus de critères
</button>
Plus de critères boutonAprès activation
<button type="button">
Moins de critères
</button>
Moins de critères boutonIntitulé du bouton
suffisamment explicite
Nom d’un bouton - Font icon uniquement
<button type="button" aria-expanded="false">
<span class="icon-burger" aria-hidden="true" ></span>
</button>
<button> nom accessible : "" bouton réduit
Nom d’un bouton - Font icon - aria-label
<button type="button" aria-expanded="false" aria-label="Menu">
<span class="icon-burger" aria-hidden="true" ></span>
</button>
<button> nom accessible : "Menu"
CSS désactivé, bouton vide
visuellement
Nom d’un bouton - Font icon - texte caché
<button type="button" aria-expanded="false">
<span class="screen-reader-text">Menu</span>
<span class="icon-burger" aria-hidden="true" ></span>
</button>
<button> nom accessible : "Menu" Menu bouton réduit
https://make.wordpress.org/accessibility/handbook/markup/the-css-class-screen-reader-text/
Activer vocalement un bouton
<button type="button" aria-label="Afficher plus">
Voir plus
</button>
<button> nom accessible : " Afficher plus"
<button type="button"
aria-label="Voir plus d’actualités">
Voir plus
</button>
<button> nom accessible : " Voir plus d’actualités "
Déguiser un lien en bouton
<a href="papiers-citoyennete"
role="button" aria-expanded="true">
Papiers - Citoyenneté
</a>
Prévoir l’activation avec
Enter et barre d’espace
Champ obligatoire et aria-required
<label for="email">E-mail *
(nom@domaine.fr)</label>
<input id="email" aria-required="true"
type="email" name="email" />
E-mail * (nom@domaine.fr)
édition obligatoire
Si aria-required présent,
ajouter une indication visible
Erreur de saisie et aria-describedby
<label for="email">E-mail*
(nom@domaine.fr)</label>
<input id="email" aria-required="true"
type="email" name="email"
aria-describedby="id-error" />
<div id="id-error">
<p>L’adresse e-mail n’est pas
valide</p>
</div>
E-mail * (nom@domaine.fr) édition
obligatoire L’adresse e-mail n’est pas
valide
Loader et aria-live
<div aria-live="polite" class="screen-reader-text"></div>
Avant ou après le chargement
<div aria-live="polite" class="screen-reader-text">
<p>En cours de chargement</p>
</div>
Pendant le chargement
https://make.wordpress.org/accessibility/handbook/markup/wp-a11y-speak/
Carrousel et aria-disabled
Campus Malesherbes
<button type="button" aria-disabled="true" class="disabled">
<img src="previous.svg" alt="Image pécédente" />
</button>
Ne pas utiliser l’attribut disabled
https://2019.paris.wordcamp.org/2019/01/15/campus-malesherbes/
Toggle et aria-pressed
Mode avion
<button type="button" aria-pressed="true">
Mode avion
<span class="switch-toggle" aria-hidden="true"></span>
</button>
Mode avion
<button type="button" aria-pressed="false">
Mode avion
<span class="switch-toggle" aria-hidden="true"></span>
</button>
Composants réutilisables
• https://van11y.net/
• https://a11y.nicolas-hoffmann.net/
• https://pidila.gitlab.io/scampi/
• https://pattern-library.dequelabs.com/components
Merci de votre attention !

Contenu connexe

Plus de Claire Bizingre

WPNdigital ux et a11y par Claire Bizingre et Thomas Villain
WPNdigital ux et a11y par Claire Bizingre et Thomas VillainWPNdigital ux et a11y par Claire Bizingre et Thomas Villain
WPNdigital ux et a11y par Claire Bizingre et Thomas VillainClaire Bizingre
 
A11y et WordPress meetup de Nice
A11y et WordPress meetup de NiceA11y et WordPress meetup de Nice
A11y et WordPress meetup de NiceClaire Bizingre
 
Accessibilité numérique : comment la prendre en compte dans vos projets WordP...
Accessibilité numérique : comment la prendre en compte dans vos projets WordP...Accessibilité numérique : comment la prendre en compte dans vos projets WordP...
Accessibilité numérique : comment la prendre en compte dans vos projets WordP...Claire Bizingre
 
Pourquoi et comment améliorer l'accessibilité des sites WordPress - WordCamp ...
Pourquoi et comment améliorer l'accessibilité des sites WordPress - WordCamp ...Pourquoi et comment améliorer l'accessibilité des sites WordPress - WordCamp ...
Pourquoi et comment améliorer l'accessibilité des sites WordPress - WordCamp ...Claire Bizingre
 
Conseil formation Web et accessibilité numérique
Conseil formation Web et accessibilité numériqueConseil formation Web et accessibilité numérique
Conseil formation Web et accessibilité numériqueClaire Bizingre
 

Plus de Claire Bizingre (6)

WPNdigital ux et a11y par Claire Bizingre et Thomas Villain
WPNdigital ux et a11y par Claire Bizingre et Thomas VillainWPNdigital ux et a11y par Claire Bizingre et Thomas Villain
WPNdigital ux et a11y par Claire Bizingre et Thomas Villain
 
A11y et WordPress meetup de Nice
A11y et WordPress meetup de NiceA11y et WordPress meetup de Nice
A11y et WordPress meetup de Nice
 
Accessibilité numérique : comment la prendre en compte dans vos projets WordP...
Accessibilité numérique : comment la prendre en compte dans vos projets WordP...Accessibilité numérique : comment la prendre en compte dans vos projets WordP...
Accessibilité numérique : comment la prendre en compte dans vos projets WordP...
 
A11y et WordPress
A11y et WordPressA11y et WordPress
A11y et WordPress
 
Pourquoi et comment améliorer l'accessibilité des sites WordPress - WordCamp ...
Pourquoi et comment améliorer l'accessibilité des sites WordPress - WordCamp ...Pourquoi et comment améliorer l'accessibilité des sites WordPress - WordCamp ...
Pourquoi et comment améliorer l'accessibilité des sites WordPress - WordCamp ...
 
Conseil formation Web et accessibilité numérique
Conseil formation Web et accessibilité numériqueConseil formation Web et accessibilité numérique
Conseil formation Web et accessibilité numérique
 

WordCamp Paris 2019

  • 1. ARIA pour l’accessibilité, quand et comment l’utiliser ? WordCamp Paris 25 avril 2019 Claire Bizingre
  • 2. Claire Bizingre Experte en Accessibilité numérique et Qualité Web claire.bizingre@temesis.com Twitter : @accesbilis
  • 3. WAI-ARIA Web Accessibility Initiative Accessible Rich Internet Applications OU Comment rendre les composants d’interface dynamiques plus accessibles
  • 4. Les principaux usages concernés Lecteur d’écran Commande vocale WAI-ARIA peut influencer ces usages : les améliorer ou les dégrader
  • 5. Mais concrètement ? • Attribut role : button, search… • Attribut d’état : aria-disabled, aria-expanded, aria-hidden… • Attribut de propriété : aria-required, aria-describedby… Intégrés dans les balises HTML, pour ajouter du sens si besoin Spécification : https://www.w3.org/TR/wai-aria-1.1
  • 6. Utilisation de Aria 1. Privilégier les éléments HTML natifs 2. Changer la sémantique d’un élément que si nécessaire 3. Assurer l’usage d’un composant dynamique au clavier 4. Ne pas supprimer la restitution des éléments visibles atteignables au clavier 5. Tous les éléments interactifs doivent avoir un nom accessible. https://w3c.github.io/using-aria/
  • 7. WAI – ARIA 1.1 Note : https://www.w3.org/TR/wai-aria-practices-1.1/
  • 8. Ne pas tromper l’utilisateur ! • Une listbox (liste déroulante) pour un carrousel • Un tabpanel (onglet) pour des colonnes de présentation • Un tabpanel pour un menu de navigation • Un tabpanel pour un accordéon (obsolète) • Un menu, menubar pour un menu de navigation
  • 9. Trio Navigateur - OS - Technologie d’assistance ex : API accessibilité sous Windows ex : Firefox ex : NVDA Illustration : http://wicg.github.io/aom/demos/#7
  • 10. L’arbre d’accessibilité (Accessibility tree) <button type="button"> Afficher plus d’actualités </button> Role : button Nom accessible : "Afficher plus d’actualités" État, propriété : enabled, focusable Visualisation de l’arbre avec Firefox
  • 11. Arbre d’accessibilité et restitution <button type="button"> Afficher plus d’actualités </button> Restitution avec NVDA Afficher plus d’actualités bouton
  • 12. Nom accessible d’un champ de saisie <label>Votre nom</label> <input id="id-nom" type="text" name="nom" /> Sans liaison, <input> nom accessible : "" Édition
  • 13. Nom accessible d’un champ de saisie lié à son étiquette <label for="id-nom">Votre nom</label> <input id="id-nom" type="text" name="nom" /> Avec la liaison, <input> nom accessible : "Votre nom" Votre nom Édition
  • 14. Nom accessible d’un lien avec un intitulé <a href="https://2019.paris.wordcamp.org/"> <img src="logo-wcp19.png" alt="WordCamp Paris 2019" /> </a> <a> nom accessible : "WordCamp Paris 2019" WordCamp Paris 2019 lien
  • 15. Nom accessible d’un lien sans intitulé <a href="https://2019.paris.wordcamp.org/"> <img src="logo-wcp19.png" alt="WordCamp Paris 2019" /> </a> <a> nom accessible : "" lien
  • 16. Les landmarks – balise et role <header role="banner">…</header> <form role="search">…</form> <nav role="navigation">…</nav> <main role="main">…</main> <footer role="contentinfo">…</footer> Attribut role encore nécessaire Jeu de tests : https://www.scottohara.me/blog/2019/04/05/landmarks-exposed.html
  • 17. Icon font <a href="urlpage"> À la une <span class="arrow-left"></span> </a> Propriété CSS « content » de l’icône pouvant être restituée
  • 18. Icon font non restitué avec aria-hidden <a href="urlpage"> À la une <span class="arrow-left" aria-hidden="true"></span> </a>
  • 19. Icon svg - aria-hidden et focusable <a href="urlpage"> À la une <svg aria-hidden="true" focusable="false">…</svg> </a>
  • 20. Show/hide et aria-expanded utile <button type="button" aria-expanded="false"> Menu </button> Menu bouton réduitAprès activation <button type="button" aria-expanded="true"> Menu </button> Menu bouton développé
  • 21. Pattern Accordéon service-public.fr <h2> <button type="button" aria-expanded="false"> Où et comment faire la démarche </button> </h2> Niveau de titre à adapter Plugin respectant le pattern accordéon ARIA : https://fr.wordpress.org/plugins/ad-sliding-faq /
  • 22. Show/hide et aria-expanded inutile <button type="button" > Plus de critères </button> Plus de critères boutonAprès activation <button type="button"> Moins de critères </button> Moins de critères boutonIntitulé du bouton suffisamment explicite
  • 23. Nom d’un bouton - Font icon uniquement <button type="button" aria-expanded="false"> <span class="icon-burger" aria-hidden="true" ></span> </button> <button> nom accessible : "" bouton réduit
  • 24. Nom d’un bouton - Font icon - aria-label <button type="button" aria-expanded="false" aria-label="Menu"> <span class="icon-burger" aria-hidden="true" ></span> </button> <button> nom accessible : "Menu" CSS désactivé, bouton vide visuellement
  • 25. Nom d’un bouton - Font icon - texte caché <button type="button" aria-expanded="false"> <span class="screen-reader-text">Menu</span> <span class="icon-burger" aria-hidden="true" ></span> </button> <button> nom accessible : "Menu" Menu bouton réduit https://make.wordpress.org/accessibility/handbook/markup/the-css-class-screen-reader-text/
  • 26. Activer vocalement un bouton <button type="button" aria-label="Afficher plus"> Voir plus </button> <button> nom accessible : " Afficher plus" <button type="button" aria-label="Voir plus d’actualités"> Voir plus </button> <button> nom accessible : " Voir plus d’actualités "
  • 27. Déguiser un lien en bouton <a href="papiers-citoyennete" role="button" aria-expanded="true"> Papiers - Citoyenneté </a> Prévoir l’activation avec Enter et barre d’espace
  • 28. Champ obligatoire et aria-required <label for="email">E-mail * (nom@domaine.fr)</label> <input id="email" aria-required="true" type="email" name="email" /> E-mail * (nom@domaine.fr) édition obligatoire Si aria-required présent, ajouter une indication visible
  • 29. Erreur de saisie et aria-describedby <label for="email">E-mail* (nom@domaine.fr)</label> <input id="email" aria-required="true" type="email" name="email" aria-describedby="id-error" /> <div id="id-error"> <p>L’adresse e-mail n’est pas valide</p> </div> E-mail * (nom@domaine.fr) édition obligatoire L’adresse e-mail n’est pas valide
  • 30. Loader et aria-live <div aria-live="polite" class="screen-reader-text"></div> Avant ou après le chargement <div aria-live="polite" class="screen-reader-text"> <p>En cours de chargement</p> </div> Pendant le chargement https://make.wordpress.org/accessibility/handbook/markup/wp-a11y-speak/
  • 31. Carrousel et aria-disabled Campus Malesherbes <button type="button" aria-disabled="true" class="disabled"> <img src="previous.svg" alt="Image pécédente" /> </button> Ne pas utiliser l’attribut disabled https://2019.paris.wordcamp.org/2019/01/15/campus-malesherbes/
  • 32. Toggle et aria-pressed Mode avion <button type="button" aria-pressed="true"> Mode avion <span class="switch-toggle" aria-hidden="true"></span> </button> Mode avion <button type="button" aria-pressed="false"> Mode avion <span class="switch-toggle" aria-hidden="true"></span> </button>
  • 33. Composants réutilisables • https://van11y.net/ • https://a11y.nicolas-hoffmann.net/ • https://pidila.gitlab.io/scampi/ • https://pattern-library.dequelabs.com/components
  • 34. Merci de votre attention !