Développer des sites web accessibles
et conformes au RGAA

Dernière mise à jour : 14 novembre 2025

  • Coopérative (SCOP) et entreprise solidaire d’utilité sociale (ESUS), spécialisée en accessibilité numérique.
  • Accompagnement, conseil, audit et formations.
  • Rédaction de référentiels (RGAA 3, RAAM, RAPDF, RAWeb, etc.).
  • Ressources et outils sous licence libre.

Tour de table

  • Présentation de l’animatrice/animateur de la formation.
  • Présentation des personnes présentes :
    • qui êtes-vous ?
    • quel est votre niveau de connaissance de l’accessibilité numérique ?

Programme de la formation

Jour 1

  1. Découvrir l’accessibilité du Web, les enjeux humains, le contexte juridique et technique
  2. HTML : sémantique et structuration
  3. Navigation
  4. Contenu

Jour 2

  1. Avertir et laisser le contrôle à l’utilisateur
  2. Couleurs
  3. Présentation et CSS
  4. Multimédia
  5. Formulaire

Jour 3

  1. Interactivité et contenus complexes

Exercices

  1. HTML : structure de la page et navigation.
  2. Contenu : listes, titres, tableaux.
  3. Contenu : images et liens.
  4. Création d’une liste : implémentation de nouveaux contenus
  5. Nouvelle zone de contenu : implémentation d’une zone de contenu.
  6. Couleurs : contrastes, indications visuelles, visibilité du parcours.
  7. Présentation : ordre logique, présentation des contenus et des textes cachés.
  8. Formulaire : réparer un formulaire.
  9. Interactivité et contenus complexes : toggle button, fenêtre modale, contrôle de saisie.

Handicap et accessibilité numérique

Accessibilité et universalité

Définition de l’accessibilité du web

« L’accessibilité du Web signifie que les personnes handicapées peuvent utiliser le Web. Plus précisément qu’elles peuvent percevoir, comprendre, naviguer et interagir avec le Web, et qu’elles peuvent contribuer sur le Web.

7 avril 1997 : création de la Web Accessibility Initiative (WAI)

L’accessibilité, un droit fondamental

« Par personnes handicapées on entend des personnes qui présentent des incapacités physiques, mentales, intellectuelles ou sensorielles durables dont l’interaction avec diverses barrières peut faire obstacle à leur pleine et effective participation à la société sur la base de l’égalité avec les autres. »

Article premier — Convention relative aux droits des personnes handicapées de l’ONU (13 décembre 2006)

Ratifiée par plus de 180 États.

Comprendre la situation de handicap

On parle de situation de handicap lorsqu’une personne ayant une déficience se trouve empêchée de faire quelque chose du fait de l’inadaptation de son environnement à ses capacités.

C’est donc le manque d’adaptation qui crée la situation de handicap et non la déficience elle-même.

Différents types de handicaps

  • Handicaps physiques et sensoriels :
    • visuels,
    • auditifs,
    • moteurs.
  • Handicaps mentaux :
    • handicaps intellectuels,
    • handicaps cognitifs (ex. troubles DYS),
    • handicaps psychiques.
  • Polyhandicap : un handicap moteur et un handicap mental.
  • Troubles de santé invalidants : cancer, douleurs chroniques, allergies…

Chaque personne est différente.

Exemples de différents besoins pour naviguer sur le web

  • Naviguer seulement au clavier
  • Naviguer seulement à la souris
  • Lire les descriptions des éléments visuels
  • Lire les descriptions des éléments audios
  • Maîtriser son environnement et naviguer à son rythme
  • Personnaliser l’affichage (couleurs, taille des caractères, police…)
  • Besoins liés au vieillissement des utilisateurs

Pour aller plus loin : « Personnes handicapées et navigation sur le Web » du guide « Défauts d’accessibilité : impacts sur les utilisateurs ».

Technologies d’assistance

Permettre l’accès par un autre moyen.

Quelques exemples :

  • plage braille ;
  • clavier monomanuel ;
  • headstick ;
  • eye-tracking ;
  • clavier visuel ;
  • lecteur d’écran ;
  • contacteur au souffle ;
  • trackball ;
  • contrôle par la pensée ;
  • etc.
plage braille, LSF, sous-titrage, licorne, clavier virtuel

Démonstrations

  • Loupe d’écran, clavier visuel, personnalisation de l’écran.
  • Lecteur d’écran

Des technologies et des utilisateurs

Accessibilité et obligations légales

Qui est concerné ?

Secteur public

Administrations, collectivités territoriales, etc.

Organismes affiliés

Organismes de mission de service public ou ayant une mission d’intérêt général

Entreprises privées

CA en France égal ou supérieur à 250 millions d’euros ou selon secteur d’activité

Quels secteurs ?

  • Banques
  • Téléphonie
  • Livre numérique
  • Commerce électronique
  • Audiovisuel
  • Transports

Note : Les micro-entreprises (moins de 10 personnes et CA inférieur à 2 millions d’euros) ainsi que les entreprises B2B ne sont pas concernées.

Directive (UE) 2019/882 du 17 avril 2019 relative aux exigences en matière d’accessibilité applicables aux produits et services

Que doit-on rendre accessible ?

  • Sites web
  • Applications mobiles
  • Applications métiers, progiciels (uniquement web)
  • Mobilier urbain numérique (borne interactive)

Exemptions : consulter le détail pour les entités publiques et les entreprises privées concernées en raison de leur CA ou le décret pour les entreprises privées concernées en raison de leur secteur d’activité.

Quelles obligations ?

Être conforme à la norme
EN 301 549

Objectif à atteindre : 100 % de conformité

Tous les organismes concernés

Informer sur la conformité

Obligations d’affichage et de publication :

  • déclaration avec moyen de contact
  • schéma pluriannuel déclinés en 3 plans annuels
  • mention sur la page d’accueil au moins

Secteur public + entreprises privées
(CA >= 250 millions)

Les entreprises sectorielles doivent également fournir des informations sur l’accessibilité, mais sans documents normés.

Références : décret nº 2019-768 du 24 juillet 2019 et arrêté du 9 octobre 2023

Qui contrôle et quelles sont les sanctions ?

ARCOM

Secteur public + entreprises privées
(CA >= 250 millions)

Sanction : jusqu’à 25 000 € pour défaut de publication

Secteur public

Sanction : jusqu’à 50 000 € pour défaut de conformité

DGCCRF

Entreprises privées sectorielles

En cas de défaut de conformité :

  • contravention de 7 500 € (15 000 € en cas de récidive)
  • astreinte : 3 000 €/jour maximum et 300 000 € au total
  • amende jusqu’à 75 000 €

Les sanctions s’appliquent par site.

En savoir plus sur les autorités de contrôle

L’obligation d’aménagement raisonnable

Une personne handicapée a le droit d’exiger des aménagements
afin d’accéder à un service ou à un contenu inaccessible.

Si la mise en accessibilité ne constitue pas une charge disproportionnée, il s’agit d’un aménagement raisonnable obligatoire.

Article 2 — Convention relative aux droits des personnes handicapées

Refuser un aménagement raisonnable = discrimination

Article 225-2 du Code pénal :

  • entre 3 et 5 ans d’emprisonnement ;
  • 45 000 à 75 000 euros d’amende.

L’article 225-1 définit ce qu’est une discrimination.

Au-delà du risque juridique

Les personnes handicapées sont des citoyennes comme les autres.

Elles ont les mêmes droits et nous avons vis-à-vis d’elles les mêmes devoirs.

Normes et référentiel

Les normes d’accessibilité
du W3C

  • UAAG, pour les agents utilisateurs : affichage par le navigateur de l’infobulle d’un lien à la souris et au clavier.
  • ATAG, pour les outils d’édition de contenus : alternatives aux boutons de mise en forme, production de contenus conformes.
  • WCAG, pour les contenus web : alternatives aux éléments graphiques.

Norme européenne EN 301 549
EN 301 549 V3.2.1 (2021-03)

  • Norme encadrant l’accessibilité des produits et services des Technologies de l’information et de la communication (TIC).
  • La thématique « 9 Web » reprend la norme internationale WCAG 2.1 dans son intégralité.
    Les contenus numériques doivent être :
    • perceptibles,
    • utilisables,
    • compréhensibles
    • et robustes.

Trois niveaux d’accessibilité

Comprendre les niveaux de conformité

Niveaux A, AA et AAA.

Arbitrage sur les niveaux selon deux critères :

  • importance pour les personnes handicapées ;
  • faisabilité.

Le niveau simple A permet de s’assurer de l’accès à l’information et d’une utilisabilité de base : 80 % des critères.

Le niveau AA contient des améliorations et la prise en charge de contextes particuliers.

Le niveau AAA ne peut pas s’appliquer à tous les types de contenus et de situations.

Le cas du triple A (AAA)

« Il n’est pas recommandé de faire de la conformité au niveau AAA une politique générale pour des sites entiers parce qu’il n’est pas possible de satisfaire tous les critères de succès de niveau AAA pour certains contenus. »

Source WCAG (en anglais)

Référentiel général
d’amélioration de l’accessibilité
RGAA 4

  • Transposition de la thématique « 9 Web » de la norme européenne EN 301 549 V2.1.2 (2018-08) basée sur WCAG 2.1
  • 2 parties : obligations d’accessibilité et méthode technique.

Ressources :

Zoom sur la méthode technique du référentiel

4 sections

Compatible avec l’accessibilité

Selon WCAG :

« compatibles avec les technologies d’assistance des utilisateurs ainsi qu’avec les fonctions d’accessibilité des navigateurs et des autres agents utilisateurs. »

Environnement de test

  • Combinaisons OS / Navigateur / Lecteur d’écran (desktop et mobile) ;
  • Base de référence et environnement maîtrisé ;
  • Adaptable et personnalisable selon le contexte.
Environnement de bureau
Technologie d’assistance Navigateur
NVDA (dernière version) Firefox
JAWS (version précédente) Firefox
VoiceOver (dernière version) Safari
Environnement mobile
Système Technologie d’assistance Navigateur
iOS VoiceOver (dernière version) Safari
Android Talkback (dernière version) Chrome

Pour tester un site web sur un terminal mobile, l’environnement de test devra comporter une des deux combinaisons (iOS ou Android). À noter que dans le cas d’un site web mobile grand public, il est fortement conseillé de tester dans les deux environnements.

Testez vos connaissances

Répondez à 4 questions sur quiz.access42.net

Développer accessible avec le RGAA

1. Sémantique et structuration

Objectif : amélioration la compréhension et le repérage

  1. Respect des standards
  2. Langue de la page
  3. Respect de la sémantique du balisage
  4. La structure du document (HTML5)

Respect des standards [A]

Thématique RGAA : Éléments obligatoires

automatiquement conforme

  • <!DOCTYPE > valide
  • Validité du code :
    • Écriture (balises, attributs, valeurs d’attributs) ;
    • Imbrication des balises ;
    • Ouverture et fermeture des balises & attributs ;
    • Valeurs d’attribut id sont uniques dans la page ;
    • Attributs pas doublés sur un même élément.

Définition de la langue du document [A]

Thématique RGAA : Éléments obligatoires

Sur la balise <html>

<html lang="fr-FR"> <html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">

Titre de pages <title> [A]

Thématique RGAA : Éléments obligatoires

Obligatoire, pertinent et de préférence unique dans le site.

  • Historique de navigation/liste des onglets
  • Erreurs de formulaires
  • Collection : numéro, tag
<title> @titre de la page </title>

À propos des SPA - Modifier le titre de page : titleService dans Angular, Vue Page Title (vuejs), React Helmet;

Respect de la sémantique du balisage [A]

Thématique RGAA : Éléments obligatoires

Utiliser les balises pour leur rôle prévu par la spécification.

Exemples de détournements :

  • <div> pour créer des paragraphes
  • <hx> pour créer des légendes d’images (référencement).

Ressource :

Configuration de la touche Entrée avec le plugin CKEditor

L’outil d’édition de texte CKEditor permet de configurer les balises HTML générées lors de l’utilisation des touches Entrée et Maj + Entrée.

La structure du document (HTML5) [A]

Thématique RGAA : Structuration

Obligatoires :

  • <header> <nav> <main> <footer>
  • <main> est unique dans la page 
  • <nav> est réservé aux zones de navigation principales et secondaires.

<nav> [A]

Thématique RGAA : Structuration

  • Obligatoire
  • Éléments de navigation principaux :
    • la navigation principale ;
    • les navigations secondaires :
      • menu de sous-rubrique
      • navigation dans les collections de pages
      • navigation dans les résultats de recherche
      • le fil d’ariane
      • les liens d’évitement
  • Le bouton "burger" doit être inclus dans l’élément <nav>.

<header> [A]

Thématique RGAA : Structuration

  • Obligatoire pour l’en-tête du document
  • Contenus d’introduction
  • Peut contenir des titres, de la navigation

<footer> [A]

Thématique RGAA : Structuration

  • Obligatoire pour le pied de page du document
  • Contenus de pied de page, d’articles ou de contenus regroupés par <section>

<main> [A]

Thématique RGAA :Structuration

  • Obligatoire
  • Unique dans la page
  • Regroupement du contenu principal de la page (les éléments répétés - navigation, publicité - ne devraient pas être structurés avec).

<aside>

Thématique RGAA : Structuration

  • Optionnel
  • Contenus indirectement reliés au contenu principal, peuvent être consultés de manière indépendante

2. Navigation

Objectif : aider les utilisateurs à se déplacer sur le site ou l’application

  1. Lien d’accès rapide
  2. Landmarks ARIA
  3. Systèmes de navigation

Lien d’accès rapide [A]

Thématique RGAA : Navigation

  • Accès rapide au contenu principal
  • Visible à la prise de focus
  • Doit se trouver en premier dans le code HTML de la page
  • tabindex="-1" sur l’élément cible
<a href="#main">contenu</a>
<main id="main" tabindex="-1"> .... </main>

Exemple conforme : sur le site France Travail, le lien d’accès rapide est rendu visible à la prise de focus.

Exemple conforme : sur le site access42.net, le lien d’accès rapide « contenu » est toujours visible (en haut à gauche)

Positionnement hors écran


.visually-hidden,
.visually-hidden-focusable:not(:focus, :focus-within) {
	border: 0 !important;
	clip-path: inset(50%) !important;
	height: 1px !important;
	margin: -1px !important;
	overflow: hidden !important;
	padding: 0 !important;
	width: 1px !important;
	white-space: nowrap !important;
}
.visually-hidden:not(caption),
.visually-hidden-focusable:not(caption):not(:focus, :focus-within) {
	position: absolute !important;
}
.visually-hidden *,
.visually-hidden-focusable:not(:focus, :focus-within) * {
	overflow: hidden !important;
}
							

Source : Improved sr-only par #FFOODD, voir Masquage accessible de pointe

Landmarks ARIA [A]

Thématique RGAA : Navigation

  • Uniques dans la page :
    • role="banner"
    • role="main"
    • role="contentinfo"
    • role="search"
  • role="navigation" : plusieurs occurrences autorisées pour les navigations principales et secondaires

Depuis RGAA 4 : Il est également possible d’utiliser une autre méthode de navigation rapide entre les zones d’une page : liens d’accès rapides, titres, mécanisme pour masquer la zone….

Systèmes de navigation [AA]

Thématique RGAA : Navigation

Deux systèmes de navigation au moins :

  • Menu de navigation ;
  • Plan du site ;
  • Moteur de recherche.

Le moteur de recherche doit indexer tous les contenus.

Exemple conforme : le site toulouse.fr dispose d’un menu de navigation principal et d’un plan du site.

Menu et barre de navigation [AA]

Thématique RGAA : Navigation

  • Même place dans chaque ensemble de pages.
  • Présentation cohérente dans chaque ensemble de pages.

Exemple conforme : le menu du site toulouse.fr est toujours a la même place dans la présentation et il a toujours la même place relative dans le code source.

Recherche et plan du site [AA]

Thématique RGAA : Navigation

  • Même place dans chaque ensemble de pages.
  • Même méthode dans chaque ensemble de pages.

Exemple conforme : le plan du site toulouse.fr est toujours présenté à la même place, il est toujours atteignable au moyen de la même fonctionnalité (lien) et il est toujours dans le même ordre relatif du code source.

Plan du site [AA]

Thématique RGAA : Navigation

  • Représentatif de l’architecture générale du site
  • Liens fonctionnels :
  • Intitulés des liens pertinents

Exercice

3. Contenus

Objectif : faciliter la compréhension et la navigation

  1. Titrage du contenu
  2. Listes
  3. Citations
  4. Cadres iframe
  5. Changements de langue
  1. Changements de sens de lecture
  2. Tableaux
  3. Images
  4. Liens

Titrage du contenu [A]

Thématique RGAA : Structuration

  • Hiérarchie cohérente ;
  • Tous les titres nécessaires ;
  • Uniquement les titres nécessaires ;
  • role="heading" aria-level="[level]"

Ressources : En-têtes et non-conformité aux WCAG : une clarification à juste titre

<h1>Accueil…</h1>
   <h2>Actualités…</h2>
   <h2 role="heading" aria-level="3">Où en est-on ?</h2>
   <h2 role="heading" aria-level="3">Ils arrivent bientôt !</h2>

Listes [A]

Thématique RGAA : Structuration

  • Liste non ordonnée : ul li
  • Liste ordonnée : ol li
  • Liste de définition : dl dt/dd
  • role="list" role="listitem"
  • Les suites de liens devraient être structurées avec des listes.
<p>
- Favoriser l’information…
<br />
- Permettre aux personnes…
</p>
<ul>
 <li>Favoriser l’information…</li>
 <li>Permettre aux personnes…</li>
</ul>

<ol>
 <li>Favoriser l’information…</li>
 <li>Permettre aux personnes…</li>
</ol>
<div role="list">
 <div role="listitem">Favoriser l’information…</div>
 <div role="listitem">Permettre aux personnes…</div>
</div>
<dl>

 <dt>Terme à définir…</dt>
 <dd>Définition…</dd>

 <dt>...</dt>
 <dd>...</dd>

</dl>
<div role="list">

 <div role="term">Terme à définir…</div>
 <div role="definition"> Définition… </div>

 <div role="term">...</div>
 <div role="definition">...</div>

</div>

Citations [A]

Thématique RGAA : Structuration

  • Citation en ligne <q>
  • Citation en bloc <blockquote>
<blockquote>
<p>Tant qu’à jouer à marcher, éteignez votre ordi et allez marcher dehors</p>
</blockquote>

Cadres iframe et frame [A]

Thématique RGAA : Cadres

  • Assurer l’identification des balises iframe et frame avec un titre pertinent
  • Pas de titre dans le cas de cadres techniques (Google Analytics, etc.) mais cacher avec aria-hidden="true".

Ressources : Le principe de non-interférence

<iframe title="Publicité"></iframe>

Changements de langue [AA]

Thématique RGAA : Éléments obligatoires

Attribut lang sur l’élément ou un parent.

Cas typique : newsletter

Avec les éditeurs de texte riche, permettre aux contributeurs d’intégrer des changements de langue : CKEditor

<p>Des contenus vidéos sur le Web
(<span lang="en">on</span>
et <span lang="en">offline</span>).
</p>

Changements de sens de lecture [A]

Thématique RGAA : Éléments obligatoires

  • dir sur l’élément lui-même ou un parent ;
  • Deux valeurs : ltr ou rtl ;
  • ltr implicite, peut être omise sur l’élément html.

شكرا جزيلا

<span lang="ar" dir="rtl">
شكرا جزيلا
</span>

Quiz

Lequel est un titre de niveau 2 ?

<h3 aria-level="2">Les Aventures d’Alice au pays des merveilles</h3>
<h2>De l’autre côté du miroir</h2>
<p role="heading" aria-level="2">La Chasse au Snark</p>
  • A - Les Aventures d’Alice au pays des merveilles
  • B - De l’autre côté du miroir
  • C - La Chasse au Snark
  • D - Les 3

Réponse : les 3 !

Le premier, bien qu’il soit déclaré avec un élément HTML <h3>, est bien un titre de niveau 2 puisque la propriété aria-level="2" y est déclarée.

Quiz

Que faire avec la portion de texte qui n’est pas en français dans le texte qui suit ?

Et il lui demanda : tlhIngan Hol Dajatlh'a'?

  • A - Déclarer un changement de langue.
  • B - Déclarer un changement de direction.
  • C - Déclarer un changement de langue et de direction.
  • D - Ne rien faire.
Capitaine Spock faisant le salut vulcain

Réponse : Ne rien faire.

Le texte est en klingon, une langue imaginaire. Il s’agit d’un cas particulier des changements de langue (tout comme les langues mortes).

Traduction : Parlez-vous klingon ?

Tableaux de mise en forme [A]

Thématique RGAA : Tableaux

  • Compréhensible si linéarisé
  • role="presentation" sur la balise table
  • HTML 4 : summary="" si présent
  • Pas de balises ou d’attributs de tableaux de données :
    <th> <thead> <tfoot> <caption> scope headers colgroup axis role="columnheader" role="rowheader"
<table role="presentation">
 <tr>
  <td>
   <p>Retrouvez nos vidéos d’informations !…</p>
  </td>
 </tr>
</table>

En supprimant la sémantique du tableau avec le role="presentation", les textes contenus dans le tableau, s’ils n’ont pas de sémantiques, contreviennent alors au critère 8.9 (détournement de balisage).

Penser à redonner de la structure aux textes (titres, paragraphes, listes ...) dans ces cas.

Tableaux simples [A]

Thématique RGAA : Tableaux

  • Un titre <caption>
  • Déclaration des en-têtes <th scope="[col|row]">
<table>
  <caption>Parc et fréquentation des autres hébergements collectifs touristiques en 2018</caption>
  <tr>
    <th scope="col">Type d’hébergement professionnel</th>
    <th scope="col">Nombre d’établissements</th>	
    [...]
  </tr>
  <tr>
    <th scope="row">Résidences de tourisme</th>
    <td>2 426</td>
     [...]
  </tr>
</table>

Tableaux simples [A]

Thématique RGAA : Tableaux

Équivalents ARIA :

  • Tableau : role="table"
  • Titre : aria-label="Nom du tableau" ou aria-labelledby="@id_titre"
  • En-têtes : role="rowheader" / role="columnheader"
  • Cellules : role="cell"
<p id="titre">Parc et fréquentation des autres hébergements collectifs touristiques en 2018</p>
<div role="table" aria-labelledby="titre">
  <div role="row">
    <div role="columnheader">Type d’hébergement professionnel</div>
    <div role="columnheader">Nombre d’établissements</div>
    [...]
  </div>
  <div role="row">
    <div role="rowheader">Résidences de tourisme</div>
    <div role="cell">2 426</div>
     [...]
  </div>
</div>

Tableaux complexes [A]

Thématique RGAA : Tableaux

  • Complexe si une cellule est titrée par plus d’une ligne ou colonne d’en-tête
  • <caption>  : le titre + un résumé de l’organisation du tableau
  • summary pour le résumé pour les versions précédentes de HTML
Tableau complexe sur le site de l’INSEE
<caption>
Figure 2 - Répartition des déchets non dangereux non minéraux hors boues de l’industrie manufacturière par type en 2016
 <span>
  Les industries agroalimentaires (IAA) et les industries manufacturières (hors IAA) sont présentées sur 2 colonnes, avec, pour chacune d’elles la quantité en milliers de tonnes le pourcentage. Une troisième colonne présente le total des deux industries, en milliers de tonnes et en pourcentage.
 </span>
</caption>

Tableaux complexes [A]

Thématique RGAA : Tableaux

Identifier les cellules d’en-têtes via un attribut id et lier les cellules de données via l’attribut headers.

Exemple : headers="id_1 id_2".

<tr>
 <td></td>
 <th id="entete1" colspan="2">Industries agroalimentaires (IAA)</th>
 <th id="entete2" colspan="2">Industries manufacturières (hors IAAA)</th>
 <th id="entete3" colspan="2">Ensemble</th>
</tr>
<tr>
  <td></td>
  <th id="entete4">Quantités (en milliers de tonnes)</th>
  <th id="entete5">en %</th>
  <th id="entete6">Quantités (en milliers de tonnes)</th>
  <th id="entete7">en %</th>
  [...]
</tr>
<tr>
  <th id="entete8">Déchets banals</td>
  <td headers="entete8 entete1 entete4">1 147</td>
  <td headers="entete8 entete1 entete5">31</td>
  <td headers="entete8 entete2 entete6">9 795</td>
  <td headers="entete8 entete2 entete7">97</td>
  [..]
</tr>

Quiz

Que pouvez-vous dire sur ce tableau ?

<strong>Classement des populations en France</strong>
<table aria-label="Simple Table">
  <tr>
    <th>Ville</th><th>Population</th><td>Classement</td>
  </tr>
  <tr>
    <th>Belfort</th><td>45 155</td><td>156</td>
  </tr>
  […]
</table>
  • A - Le nom accessible n’est pas pertinent
  • B - Les en-têtes ne sont pas correctement déclarées
  • C - Il manque les attributs scope="col|row"
  • D - C’est un tableau de mise en forme
Classement des populations en France
VillePopulationClassement
Belfort45 155156
La Rochelle79 96161
Courchevel2 2954 790
Wissembourg7 5411 427

Réponse A : Le nom accessible n’est pas pertinent. Reprendre le nom visible dans le nom accessible « Classement des populations en France ».

Réponse B : La cellule « Classement » doit être dans une cellule d’en-tête implémentée avec un élément <th>.

Réponse C : Il manque des attributs scope="col" sur les cellules de la première ligne et des attributs scope="row" sur les cellules de la première colonne.

Quiz

Que pouvez-vous dire sur ce tableau ?

<table class="a42-text-small">
<tr role="presentation"><td><a href="#">1</a></td><td><a href="#">2</a></td><td><a href="#">3</a></td><td><a href="#">4</a></td><td><a href="#">5</a></td><td><a href="#">6</a></td><td><a href="#">7</a></td><td><a href="#">Dernière</a></td></tr>
</table>
  • A - Les en-têtes sont correctement reliées
  • B - Il manque les propriétés headers pour la liaison des en-têtes
  • C - Il manque un titre pertinent (balise <caption>)
  • D - Le tableau n’est pas un tableau de données

Pagination

1234567Dernière

Réponse D : L’attribut role="presentation" doit être positionné sur la balise <table> pour présenter aux technologies d’assistance le tableau comme un tableau de mise en forme.

Exercice

Images de décoration [A]

Thématique RGAA : Images

Pour les éléments <img>, empêcher la restitution au moyen de :

  • alt vide
  • ou aria-hidden="true"
  • ou role="presentation"
exemple d’une image de décoration <img src="image.png" alt="" />
<img src="image.png" aria-hidden="true"/>
<img src="image.png" role="presentation"/>

Images de décoration [A]

Thématique RGAA : Images

Pour les éléments <svg>, empêcher la restitution au moyen de :

  • aria-hidden="true"

De plus :

  • Aucun des attributs suivants ne doit être présent : aria-label, aria-describedby, aria-labelledby, role="img", title
  • Les balises <title> et <desc> doivent être vides ou absentes
<svg aria-hidden="true">
  …
</svg>

Images porteuses d’information [A]

Thématique RGAA : Images

Pour les éléments <img>, définir une alternative au moyen de :

  • aria-labelledby
  • ou aria-label
  • ou alt
  • ou title
exemple d’une image de décoration <img src="image.png" alt="2019 EESC Civil society prize Award ceremony 12 december 2019" />
exemple d’une image de décoration
<img src="img.png" alt="2019 EESC Civil society prize Award ceremony 12 december 2019"/>

<img src="img.png" aria-label="2019 EESC Civil society prize Award ceremony 12 december 2019"/>

<img src="img.png" title="2019 EESC Civil society prize Award ceremony 12 december 2019"/>

<img src="img.png" aria-labelledby="image-desc"/>

<p class="sr-only" id="image-desc">2019 EESC Civil society prize Award ceremony 12 december 2019</p>
  • Nom donné à un élément d’interface utilisateur et exploité par les TA.
  • Déterminé par une propriété visible (par exemple un texte) ou invisible (par exemple attribut alt).
  • « Alternative » d’image, « intitulé » de lien/bouton, « étiquette » de champ de formulaire = nom accessible.

Attention, en cas d’implémentation multiple :

Exemple 1 - Conforme

<img src="logo_access42.png" alt="Access42">

Le nom accessible de l’image est "Access42"

Exemple 2 - Non conforme

<img src="logo_access42.png" alt="Access42" aria-label="Logo">

Le nom accessible de l’image est "Logo". ("Access42" n’est pas restitué).

Décorative ou porteuse d’information ?

Image
Image : exemple d’une image de décoration
Image
Image : exemple d’une image porteuse d’information

Images porteuses d’information [A]

Thématique RGAA : Images

Pour les éléments <svg>, définir une alternative au moyen de :

  • role="img" 
  • et aria-label ou aria-labelledby.
<svg role="img" aria-label="Profil renseigné à 90 %">

</svg>

ou

<svg role="img" aria-labelledby="title_svg">
<title id="title_svg">Profil renseigné à 90 %</title>

</svg>

Images interactives [A]

Thématique RGAA : Images

  • Une alternative générique sur l’image elle-même
  • Une alternative pertinente pour chaque zone sensible

Image map

<img src="" alt="Carte de France" usemap="#LIEUX" />
<map id="lieux" name="LIEUX">
<area href="regi42" alt="Alsace">
<area href="regi53" alt="Bretagne">
</map>

Image SVG

<svg xmlns:xlink="http://www.w3.org/1999/xlink" aria-labelledby="id-map">
<title id="id-map">Carte de France</title>
<a xlink:title="Région 1" xlink:href="region1.html">
<path>[...]</path>
</a>
</svg>

Attention, les attributs natifs xlink:title et xlink:href sont dépréciés avec la version SVG 2. Par conséquent, il faut les remplacer par les propriétés role="link" et aria-label="[...]" pour s’assurer du support et de la présentation cohérente par les technologies d’assistance.

<a aria-label="Région 1" href="region1.html" role="link">
<path>[...]</path>
</a>

Note  : Le contenu d’un élément <svg> n’a pas les mêmes attendus qu’en HTML, il n’y a pas de nécessité à structurer des suites de liens sous forme de liste dans le code source.

Images description détaillée [A]

Thématique RGAA : Images

  • Description détaillée adjacente ;
  • ou bien lien adjacent.

Également possible d’utiliser les attributs aria-label ou aria-labelledby.

Note 1 : aria-label et aria-labelledby ne sont exploités que par les lecteurs d’écrans.

Note 2 : L’attribut longdesc est obsolète.

Exemple conforme : Sur le site PIAF, les graphiques détaillés (implémentés avec des balises <canvas>) ont une alternative sous forme de tableau.

Exemple conforme : Sur le site Access42, l’infographie a une description détaillée adjacente.

<img src="img.png" alt="infographie" />
<a href="description.html">Description détaillée de l’infographie</a>

<img src="img.png" alt="infographie" />
<button aria-expanded="false">Description détaillée de l’infographie</button>

Quiz

Quel est le nom accessible de cette image ?

<img src="img_slide/quizz/astronaute.jpg" alt="un astronaute perdu dans l’espace" title="un astronaute en mission de réparation">
  • A - un astronaute perdu dans l’espace
  • B - un astronaute en mission de réparation
  • C - un astronaute perdu dans l’espace en mission de réparation
  • D - il n’y a pas de nom accessible
un astronaute perdu dans l’espace

Réponse : un astronaute perdu dans l’espace.

L’algorithme de calcul du nom accessible donne la priorité au contenu de la propriété alt="" s’il est renseigné. Le contenu du title, dans cette configuration, constitue la description accessible.

Quiz

Quel est le nom accessible de cette image ?

<img src="img_slide/quizz/moonlanding.jpg" alt="une prise de vue par Stanley Kubrick" aria-label="un astronaute après un alunissage">
  • A - un astronaute après un alunissage
  • B - une prise de vue par Stanley Kubrick
  • C - il n’y a pas de nom accessible
une prise de vue par Stanley Kubrick

Réponse : un astronaute après un alunissage.

L’algorithme de calcul du nom accessible donne la priorité au contenu de la propriété aria-label s’il est renseigné. Le contenu de l’attribut alt ne sera jamais pris en compte et ne sera jamais présenté aux technologies d’assistance.

Quiz

Quel est le nom accessible de cette image ?

<p id="id_cat">un chat dans l’espace</p>
<img src="img_slide/quizz/chatespace.jpg" alt="un chastronaute" aria-labelledby="id_cat" aria-hidden="true">
  • A - un chat dans l’espace
  • B - un chastronaute
  • C - il n’y a pas de nom accessible

un chat dans l’espace

Réponse : aucun.

Bien que des propriétés de nommage soient définies sur l’image, la présence de la propriété aria-hidden="true" suffit à rendre l’image décorative et à permettre qu’elle soit ignorée par les technologies d’assistance.

Image captcha [A]

Thématique RGAA : Images

L’alternative de l’image doit permettre
d’identifier la nature de l’image

exemple de captcha
<img src="" alt="Code de confirmation à saisir"/>

Image captcha [A]

Thématique RGAA : Images

Alternative non graphique :

  • captcha sonore ou logique 
  • envoi du code par email / SMS

Pour aller plus loin :

Alternative captcha
Le système reCaptcha propose une alternative sonore

Texte en image [AA]

Thématique RGAA : Images

  • Texte en image remplacé par du texte stylé
  • ou mécanisme de remplacement
Texte en image 1

Exemple non conforme : l’image contient du texte en image qui peut être réalisé en HTML/CSS.

Texte en image 2

Exemple conforme : l’image contient du texte en image mais il n’est pas reproductible en CSS (texte manuscrit).

Exemple de mécanisme de remplacement

exemple des paramètres disponibles dans AccessConfig
une image avec du texte
exemple des paramètres disponibles dans AccessConfig
une image remplacée par le texte contenu dans son alternative

Images légendées [A]

Thématique RGAA : Images

Légende : texte adjacent à une image

  • qui contient des informations sur l’image (copyright, date, auteur…) ;
  • ou est destiné à compléter les informations apportées par l’image (texte associé à une image dans une galerie d’images)

Associer la légende à l’image par une relation de structure pour que les technologies d’assistance traitent l’image et sa légende comme un ensemble unique.

Image
Exemple d’une image légendée

Exemple :pages article du Figaro.

<figure role="group|figure" aria-label="[contenu du figcaption]">
	<img src="…" alt="label-image" />
	<figcaption>
		[label-image] Légende de l’image
	</figcaption>
</figure>

Minute technique

Pour être considéré comme un lien, l’attribut href doit être présent : <a href="url.html">

Sans cet attribut, la balise sera présentée comme une ancre <a></a> : le rôle « lien » ne sera pas restitué par les technologies d’assistance.

Dans certains contextes de développement, on peut trouver des liens qui sont gérés en JavaScript et ne possèdent pas d’attribut href : <a tabindex="0">un lien</a>.

Bien qu’il reçoive la prise de focus, le rôle n’est toujours pas pertinent, il est nécessaire de demander l’ajout de la propriété role="link" : <a tabindex="0" role="link">un lien</a>

Ressource : Obfuscation de liens en SEO et problèmes d’accessibilité

Liens explicites [A]

Thématique RGAA : Liens

Intitulé défini par  :

  • aria-labelledby
  • aria-label
  • Contenu entre <a> et </a> (texte ou contenu du alt pour les liens-images ou combinaison des deux pour les liens composites)
  • title
  • Contextes : titre précédent, paragraphe, phrase ...
    (Attention : les contextes sont non cumulatifs)
  • Attribut title : doit au moins reprendre l’intitulé

Exemple 1

Les liens "La suite" et "82 votes" ci-dessous sont-ils explicites ? Si non, pourquoi et comment faut-il les corriger ?

Tribune
On n’est pas nul en orthographe si l’on conjugue mal "échoir"

Par Séverine Barthes-Vignes |En lisant, en écrivant|02/02/2010|13H20

L’orthographe est mon métier. Et pourtant, j’ai eu besoin de tous mes livres pour répondre au test de la certification Voltaire. Au lieu de mesurer notre usage du français, ces épreuves, comme la dictée de Pivot, ne s’appuient que sur des exceptions. La suite

19884 visites - 200 réactions

82 votes

Exemple 2

Les liens "#1", "joey" et "ajouter à mes contacts +" ci-dessous sont-ils explicites ? Si non, pourquoi et comment faut-il les corriger ?

Commentaires
#1 - par joey (ajouter à mes contacts +)

Natal n’est pas une "innovation réelle issue de Microsoft", c’est un projet acheté à une boite qui l’a d’abord proposé à Nintendo (qui a décliné l’offre).
D’autre part depuis l’E3, les éditeurs qui s’étaient engagés sur Natal commencent à déchanter et les annonces d’arrêt de projet se font de plus en plus nombreuses : la technologie n’a pas l’air d’être si au point que ça.

Liens explicites [A]

Thématique RGAA : Liens

Le nom visible doit être contenu dans le nom accessible

Ressource : Bookmarklet pour visualiser la liste des liens et leur nom accessible

nom visible non contenu dans le nom accessible
<a href="url" aria-label="Accueil du site">Retour</a>
nom visible contenu dans le nom accessible
<a href="url" aria-label="Retour Accueil du site">Retour</a>

Quiz

Quel est le nom accessible du lien ?

<a href="#" aria-label="La vie au bureau"><img src="img_slide/quizz/chevres.jpg" alt="Venez rencontrer les chèvres !" aria-label="Des chèvres et des hommes."></a>
  • A - Venez rencontrer les chèvres !
  • B - La vie au bureau
  • C - Des chèvres et des hommes
Venez rencontrer les chèvres !

Réponse : La vie au bureau.

Bien que l’image contenue dans le lien ait une alternative donnée par aria-label, l’algorithme de calcul du nom accessible donne la priorité au contenu de la propriété aria-label définie sur le lien pour créer le nom accessible. Le contenu du lien (ici le aria-label de l’image), ne sera jamais pris en compte et ne sera jamais présenté aux technologies d’assistance.

Quiz

Quel est le nom accessible du lien ?

<a href="#" title="Promenade dans la jungle"><img src="img_slide/quizz/tigre.jpg" alt="Venez rencontrez les chats !" ></a>
  • A - Venez rencontrez les chats !
  • B - Promenade dans la jungle
Venez rencontrez les chats !

Réponse : Venez rencontrez les chats !

L’algorithme du nom accessible, en l’absence de propriétés de nommage aria sur le lien, prend en compte en priorité le contenu du lien, ici le contenu du alt de l’image. Le title défini sur le lien ne constitue que la description accessible dans cette configuration.

Quiz

Que pouvez-vous dire du lien suivant ?


La grande question sur la vie, l’Univers et le reste


<a href="#" aria-label="La réponse à la grande question sur la vie est 42">La grande question sur la vie, l’Univers et le reste</a>
  • A - L’intitulé du lien devrait indiquer la destination du lien de manière plus précise
  • B - Le texte du lien devrait être dans une balise de citation
  • C - Le nom accessible ne reprend pas le nom visible
  • D - Le nom visible ne reprend pas le nom accessible

Réponse : Le nom accessible (constitué par le contenu de la propriété aria-label) ne reprend pas le nom visible.

Liens identiques [A]

Thématique RGAA : Liens

  • Liens identiques = intitulé + contexte
  • Même destination

Exemple conforme : sur le site P&G, les liens « Consulter le site » ont tous le même intitulé visible et le même contexte (titre précédent ici) mais la propriété aria-label permet de les rendre explicites.

Note : le nom accessible reprend le nom visible, aria-label="Consulter le site: Fairy".

Liens vides [A]

Thématique RGAA : Liens

  • Pas de lien vides
  • Attention aux alt="" sur les images liens
  • Attention aux liens mis en forme via CSS uniquement (par ex. content)

Exemple sur wired.com

Exercice

4. Consultation

Objectif : avertir et laisser le contrôle à l’utilisateur

  1. Rafraîchissement et limite de temps de session
  2. Nouvelles fenêtres
  3. Documents en téléchargement
  4. Contenus cryptiques
  5. Contenus en mouvement ou clignotant
  1. Effet de flash
  2. Son déclenché automatiquement
  3. Indépendance de l’orientation
  4. Gestes complexes
  5. Annulation du pointeur
  6. Activation par le mouvement

Limite de temps de session [A]

Thématique RGAA : Consultation

  • L’utilisateur doit pouvoir supprimer ou augmenter la limite de temps ;
  • La limite de temps est de vingt heures au moins ;
  • Cas particulier lorsque la limite de temps est essentielle.

Rafraîchissement [A]

Thématique RGAA : Consultation

  • L’utilisateur peut arrêter et relancer le rafraîchissement ;
  • L’utilisateur est alerté de l’imminence d’un rafraichissement et peut augmenter le délai de 10 fois au moins.

<meta http-equiv="refresh" content="9000">

Exemple conforme : une liste d’événements présentés dans un tableau se met à jour automatiquement lorsqu’une session est terminée. L’utilisateur peut choisir de désactiver ces mises à jour automatiques en désactivant le bouton switch « Live event updates »

Nouvelles fenêtres [A]

Thématique RGAA : Consultation

  • Pas de nouvelles fenêtres sans action de l’utilisateur

Documents en téléchargement [A]

Thématique RGAA : Consultation

  • Document accessible ;
  • Ou alternative accessible : HTML, .doc, .odt structurés.

Exemption : Les fichiers publiés avant le 23 septembre 2018, sauf s’ils sont nécessaires à l’accomplissement d’une démarche administrative relevant des tâches effectuées par l’organisme concerné.

Ressources : Référentiel PDF, Liste des critères Documents bureautiques en téléchargement (Le Grand-Duché de Luxembourg, docx, 66 ko, basé sur RGAA 3).

Outils : PAC 2024 (PDF Accessibility Checker), Vérificateur d’accessibilité de Word.

Exemple : sur le site de la ville de créteil, les magazines sont proposés au format PDF et une alternative est disponible au format HTML.

Contenu cryptique (art ASCII, émoticône, syntaxe cryptique) [A]

Thématique RGAA : Consultation

  • Les contenus cryptiques ont une alternative textuelle ;
  • Ou une description dans le contexte adjacent.

Ressources :

Exemple non conforme

Sur cette application bancaire, les montants négatifs sont présentés avec des traits d’union (-) et non des signes moins (&minus;). En l’absence de configuration spécifique, les traits d’union sont ignorés de la plupart des lecteurs d’écran.

Les emojis sont lus comme du texte.

  • Pour donner un sens pertinent à un emoji, utiliser par exemple :
    <span role="img" aria-label="[signification]">📱</span>
  • Pour ignorer un emoji, utiliser par exemple :
    <span aria-hidden="true">🚀</span>

Exemple non conforme

capture d’écran d’un texte contenant des emojis décoratifs

Exemple de restitution avec NVDA :

coche, Rendez-vous le mardi 16 septembre à 16 heures à la Gare pour échanger avec la SNCF sur vos déplacements, station de métro, bicyclette
flèche vers le bas, flèche vers le bas, Découvrez tous les détails ci-dessous

Clignotement et contenus en mouvement [A]

Thématique RGAA : Consultation

L’utilisateur doit pouvoir :

  • Arrêter et relancer ;
  • Masquer et réafficher ;
  • Afficher le contenu sans le mouvement ;
  • Le mouvement dure 5 secondes ou moins ;
  • Contrôle individuel.
exemple de carrousel sur le site tgvinoui.sncf

Exemple conforme : le carrousel de la page d’accueil de tgvinoui.sncf peut être arrêté et relancé grâce à un bouton.

Exemple conforme : dans l’application Slack, l’ajout de GIF Animés est accompagné d’un bouton nommé « collapse » et qui permet de masquer et afficher à volontée les GIf.

Effet de flash [A]

Thématique RGAA : Consultation

Exemple non conforme : le clip promotionnel des Jeux Olympiques de Londres 2012 présente de nombreux effets de Flash. À sa sortie en 2007 il a provoqué de nombreuses crises d’épilepsie.

Son déclenché automatiquement [A]

Thématique RGAA : Multimédia

  • Les sons déclenchés automatiquement doivent être contrôlables ;
  • De préférence, le contrôle doit être le premier élément de la page.

Indépendance de l’orientation [AA]

Thématique RGAA : Consultation

  • Le contenu doit être consultable quel que soit l’orientation du périphérique : portrait ou paysage ;
  • Sauf si l’orientation est essentielle.

Exemple non conforme : sur le site Magicbike, l’utilisateur doit obligatoirement avoir son terminal mobile en mode paysage pour consulter le site.

Gestes complexes [AA]

Thématique RGAA : Consultation

Les fonctionnalités utilisables par des gestes multipoints (zoom sur une carte) ou basés sur un tracé (swipe) :

  • peuvent être réalisées avec un geste à point unique et/ou sans trajectoire,
  • sauf si le geste est essentiel(ex. le dessin d’une signature).

Grand Mercure

Carrousel défilant avec un geste complexe, le swipe, qui peut être consulté avec un geste simple, les boutons « suivant » et « précédent ».

Alternative aux gestes de zoom sur une carte :
boutons +/- en bas à droite

Annulation du pointeur [A]

Thématique RGAA : Consultation

  • Aucun événement ne doit être déclenché sur l’action descendante
    (down : mousedown sur desktop / touchstart sur mobile)
  • ou un mécanisme permet d’interrompre l’exécution de l’action avant la fin ;
  • ou un mécanisme permet d’annuler l’action.

Activation par le mouvement [A]

Thématique RGAA : Consultation

Les fonctions qui sont déclenchées en déplaçant l’appareil (en secouant ou en basculant) ou lorsque l’utilisateur effectue un mouvement capté par les dispositifs de l’appareil (eg. une caméra) peuvent être :

  • actionnées par des composants classiques (un bouton) ;
  • désactivées pour éviter un déclenchement accidentel ;
  • sauf si le mouvement est essentiel pour la fonction.

Exercice

5. Couleurs

Objectif : améliorer la lisibilité

  1. Contrastes des textes
  2. Contrastes des éléments graphiques
  3. Visibilité de la prise de focus
  4. Visibilité des liens en environnement de texte
  5. Couleurs par défaut
  6. Information par la couleur

Contrastes [AA]

Thématique RGAA : Couleurs

Évaluation pour : les textes, les textes en images, les textes incrustés (vidéo, etc.)

  • Ratio de 4,5 minimum :
    • police < 24px sans graisse
    • police < 18,5px gras
  • Ratio de 3 minimum :
    • police >= 24px sans graisse
    • police >= 18,5px gras
  • Mécanisme de remplacement

Contrastes des éléments graphiques [AA]

Thématique RGAA : Couleurs

Évaluation pour tous les éléments graphiques porteurs d’information (images, boutons, icônes, etc.) sauf cas particuliers

  • Contraste minimum de 3:1
  • Présence d’un mécanisme de remplacement.

Exemples de cas particuliers : composant inactif, composants natifs du navigateur, éléments avec une alternative, logo…

Ressources :

Comprendre le critère : quelques exemples ; Exemples de contrastes valides et invalides sur les différents états (hover et focus) de composants d’interface

Visibilité de la prise de focus [A]

Thématique RGAA : Présentation de l’information

  • Pas de dégradation de l’outline natif (outline:0) ;
  • Ou utilisation d’une indication de focus augmentée suffisamment contrastée (ratio mini de 3).

Les états :focus, :hover des composants doivent également être suffisamment contrastés.

Visibilité de la prise de focus [A]

Thématique RGAA : Présentation de l’information

Attention aux composants interactifs masqués (case à cocher, bouton radio par exemple) : penser à répercuter la visibilité de la prise de focus sur l’élément visible.

HTML

<input type="radio" id="default" class="sr-only" />
<label for="default">Défaut</label>

CSS

input:focus+label{outline:1px dotted black}

Visibilité des liens
en environnement de texte
[A]

Thématique RGAA : Présentation de l’information

  • Contraste suffisant (> 3 par rapport au texte environnant) ;
  • Indication supplémentaire à la couleur (forme) au survol souris et à la prise de focus.

Exemple conforme : sur le site baouw-organic-nutrition.com, le ratio de contraste entre la couleur du lien #BE1D28 et la couleur du texte environnant #000000 est suffisant avec une valeur de 3,4.

Exemple non conforme : sur le site enedis.fr, le ratio de contraste entre la couleur du lien #1423DC et la couleur du texte environnant #000000 est suffisant avec une valeur de 2,3.

Quiz

Que pouvez-vous dire sur ces boutons ?

<ul>
<li><button>Mes adresses</button></li>
<li><button>Mes commandes</button></li>
<li><button>Mes informations de paiement</button></li>
</ul>
  • A - La bordure et la couleur de fond doivent avoir un ratio de 3:1
  • B - La prise de focus n’est pas visible
  • C - L’outline natif n’est pas dégradé

Réponse B : La prise de focus a été surchargée et l’outline natif dégradé. Il faut ici modifier la couleur de fond à la prise de focus pour s’assurer d’avoir un ratio minimum de 3:1 entre la couleur de fond des boutons avec et sans le focus.

Quiz

Que doit-on modifier sur le lien de cette portion de texte ?

<p>On peut trouver les renseignements sur les formations sur le site <a href="https://formations.access42.net/">formations.access42.net</a> et on peut même s’inscrire aux certifications !</p>
  • A - Rien, il est très bien comme ça
  • B - Modifier la couleur pour qu’il soit perceptible
  • C - Ajouter une icône à côté du lien
  • D - Ajouter une modification au survol ou au focus

On peut trouver les renseignements sur les formations sur le site formations.access42.net et on peut même s’inscrire aux certifications !

Réponse D : Le contraste entre le lien et le texte qui l’entoure est suffisant (ratio > 3), mais le lien ne dispose d’aucune indication au survol. Il y a bien un encadré au focus.

Couleurs par défaut [AA]

Thématique RGAA : Présentation

  • Si une couleur de police est définie : couleur de fond au moins héritée d’un parent ;
  • Si une couleur de fond est définie : couleur de police au moins héritée d’un parent.
body, body a{color:#000;}
body{background-color:#fff;}
  • Cas des images de fond utilisées pour créer une couleur de fond : s’assurer de la présence d’une propriété background-color sur le conteneur.
.elt{
	background-image:url(...);
	color:#fff;
	background-color:#000;}

Exemple non conforme

Sur la page d’accueil de marseille.fr, le fond du bloc « Vous cherchez un équipement dans Marseille ? » est créé avec une image.

Si elle n’est pas affichée, le texte blanc n’est plus suffisamment contrasté avec le fond.

Information par la couleur [A]

Thématique RGAA : Couleurs

Cas les plus courants :

  • indication de page active ;
  • indications d’onglets affichés ;
  • carrousel : indication de contenu actif.

Exemple non conforme : le lien actif dans le menu de navigation est mis en évidence par la couleur uniquement. L’information n’est pas disponible pour les personnes aveugles ainsi que pour les personnes déficientes visuelles, la couleur de fond indiquant l’état sélectionné n’étant pas assez contrastée avec la couleur par défaut.

Exemple conforme : le lien actif dans un menu de navigation est mis en évidence par la couleur et par la forme, ainsi tous les utilisateurs voyant accèdent à l’information. Un attribut title vient donner une alternative textuelle (« [intitulé du lien] - rubrique courante ») qui sera restituée par un lecteur d’écran aux utilisateurs aveugles.

<a class="selected" href="…" title="Mon quotidien, ma Métropole (rubrique courante)">
Mon quotidien, ma Métropole </a>

Exemple non conforme : Une question de sécurité qui demande d’identifier un terme en couleur parmi des termes en nuances de gris.

Correction possible : ne pas faire ça.

Exemple non conforme : sur des fiches hôtels, les services payants sont identifiés par une puce de couleur rouge qui est définie avant la liste. Cette information n’est disponible que pour les utilisateurs voyant, aucun élément dans le code ne permet à un utilisateur aveugle d’accéder à cette information.

Correction possible : ajouter un texte positionné hors écran juste après chaque item payant : <li>Animaux autorisés <span class="sr-only">service payant</span></li>

Exemple conforme : Le texte de la légende du graphique contient l’information : « Utilisé : 41.2 Go Disponible : 63.9 Go (60 %) ».

La graphique donne information par la couleur, mais il possède une alternative.

Exercice

Testez vos connaissances

Répondez à 5 questions sur quiz.access42.net

6. Présentation - CSS

Objectif : séparer le contenu de la mise en forme, améliorer la lisibilité et faciliter la navigation au clavier

  1. Information par la forme, la taille
    ou la position
  2. Utilisation exclusive de CSS
  3. Contenus visibles sans CSS
  4. Contenus compréhensibles sans CSS
  5. Contenus cachés
  1. Zoom texte
  2. Linéarisation des contenus
  3. Adaptation des textes
  4. Contrôle des contenus additionnels au survol ou à la prise de focus
  5. Contrôle des contenus additionnels au clavier

Information par la forme, la taille ou la position [A]

Thématique RGAA : Présentation

  • Alternative textuelle, par exemple via un attribut title
  • Ou une version alternative.

Exemple : un cours sur openclassrooms.com

Utilisation exclusive de CSS [A]

Thématique RGAA : Présentation de l’information

  • Utilisation exclusive de CSS :
    • <link rel="stylesheet"/> ;
    • <style></style> ;
    • ou attributstyle en ligne.
  • Pas d’attribut de mise en forme <table border="0">.
  • Pas de balise de mise en forme <font>.

Ressources : Liste complète des attributs et balises interdites, Accessibilité d’Angular Material : l’attribut color et le RGAA

Exemple non conforme : sur le site univ-reims.fr on trouve des éléments <font> et des attributs size.

Contenus visibles sans CSS [A]

Thématique RGAA : Présentation

Le contenu visible reste présent lorsque les feuilles de styles sont désactivées.

Attention :

  • Contenu inséré par CSS content (texte, icônes porteuses d’information) ;
  • Images de fond porteuses d’informations (background-image) ;
a[target="_blank"]:after{
content:"nouvelle fenêtre"}

h1:after{
background-image:url("logo.png")}

Contenus compréhensibles sans CSS [A]

Thématique RGAA : Présentation

Le contenu reste compréhensible lorsque les feuilles de styles sont désactivées.

  • Ordre des éléments logique ;
  • Ordre des éléments cohérent, l’enchaînement de la lecture est cohérent.

Exemple non conforme : sur le site lequipe.fr le contenu des vignettes d’actualité n’est pas implémenté dans un ordre logique : les tags (par exemple "Golf" et "US Open") sont situés avant le titre auquel ils se rapportent. L’information à laquelle accède un utilisateur aveugle est erronée.

Exemple non conforme

Sur le site Somme Numérique, l’ordre de lecture des contenus n’est pas cohérent : les listes ne sont pas associées à leur titre.

Contenus cachés [A]

Thématique RGAA : Présentation

Pour les composants qui ont les propriétés CSS :

  • display:none
  • visibility:hidden
  • font-size:0

Ou les composants avec la propriété ARIA aria-hidden="true" ou hidden (dans ces cas, vérifier la cohérence entre la visibilité des contenus et la valeur de la propriété).

S’assurer que le contenu masqué n’a pas vocation à être restitué par les technologies d’assistance.

<nav id="link-navigation-menu" role="navigation" aria-hidden="true">
<button type="button">Menu</button>
[...]
</nav>

Zoom texte [AA]

Thématique RGAA : Présentation de l’information

Unités des tailles de police :

  • Taille de police relatives : em, rem, % ;
  • Depuis RGAA 4 : tailles de polices en px autorisées.

Note importante : Les tailles de police en pixels ne permettent pas d’agrandir les textes sur certains navigateurs.

body{font-size:1rem}

main{font-size:0.8em}

ul li li{font-size:1em}

Zoom texte [AA]

Thématique RGAA : Présentation de l’information

Le texte doit rester lisible lorsque la taille des caractères est augmentée à 200 % :

  • Zoom texte : Firefox : « Affichage > Zoom texte seul » : agrandissement à 200 % (Ctrl + 6 fois) ;
  • Ou utilisation des fonctions de zoom du navigateur (zoom graphique) ;
  • Ou utilisation d’un dispositif d’agrandissement des caractères (A+/A-).

Note importante : Les fonctionnalités de zoom du navigateur ou du mécanisme d’agrandissement sont inutiles si l’utilisateur a modifié la taille par défaut dans les paramètres de son navigateur.

Absence de gestion du zoom texte sur rouen.fr

Gestion du zoom texte sur le portfolio de LukeW

Pour aller plus loin : article de blog de Marie Guillaumet

Linéarisation des contenus [AA]

Thématique RGAA : Présentation de l’information

Les contenus doivent rester présents, lisibles et utilisables sans utilisation des deux ascenseurs :

  • Pour les contenus dont le sens de consultation est vertical : largeur de fenêtre réduite à 320 px ;
  • Pour les contenus dont le sens de consultation est horizontal : hauteur de fenêtre réduite à 256 px.

Pour tester dans Firefox : Ctrl + Alt + M ou Commande ⌘ + Option ⌥ + M.

Quiz

Par quel moyen peut-on s’assurer de passer l’information à tous les utilisateurs ?

<h4>Aperçu de mes compétences</h4>
<p>HTML<span></span></p>
<p>CSS<span></span></p>
<p>JS<span></span></p>
<p>A11Y<span></span></p>
  • A - Un texte positionné hors écran
  • B - Un title sur le <span>
  • C - Un texte toujours présent

Aperçu de mes compétences

HTML

CSS

JS

A11Y

Réponse C : Le texte positionné hors écran permettra de passer l’information seulement aux utilisateurs de lecteurs d’écran. Comme le contraste entre la couleur de fond et la couleur des barres est inférieur à 3:1, il faut s’assurer de passer l’information de manière textuelle à tous les utilisateurs. La restitution de l’attribut title sur des composants qui ne sont pas interactifs n’est pas toujours assurée.

Quiz

« L’application de simulation d’un piano nécessite un affichage spécifique car il n’est pas possible d’utiliser la totalité du clavier avec une faible résolution. »

Quelles solutions peut-on mettre en place ?

  • A - Il s’agit d’un cas particulier
  • B - Il faut redimensionner les touches pour que l’affichage soit correct
  • C - On peut utiliser la contrainte de 256px de hauteur du critère et laisser la largeur nécessaire

Réponse A : Il s’agit d’un cas particulier prévu dans le critère concernant les contenus dont l’agencement requiert deux dimensions pour être compris ou utilisés.

Adaptation des textes [AA]

Thématique RGAA : Présentation de l’information

Les textes doivent rester lisibles dans les conditions suivantes :

  • interlignage augmenté de 1,5 fois la taille de police ;
  • marge suivante un paragraphe augmentée de 2 fois la taille de police ;
  • espacement des lettres augmenté jusqu’à 0,12 fois la taille de la police ;
  • espacement des mots augmenté jusqu’à 0,16 fois la taille de la police ;

Cas particuliers : sous-titres incrustés, images-texte, texte dans une balise canvas.

* {
  line-height: 1.5em !important;
  letter-spacing: 0.12em !important;
  word-spacing: 0.16em !important;
}
p {
  margin-bottom: 2em !important;
}

Ressource : text spacing bookmarklet

Contrôle des contenus additionnels au survol ou à la prise de focus [AA]

Thématique RGAA : Présentation de l’information

Contenus qui apparaissent à la prise de focus ou au survol d’un élément :

  • peut être masqué sans déplacer le focus ou le pointeur (raccourci clavier par exemple la touche [ESC]) ;
  • peut être être survolé sans disparaître ;
  • reste visible tant que le composant déclencheur ou le contenu lui-même est actif.

Les contenus gérés par le navigateur (title) ou qui utilisent un modèle de conception ARIA (tooltip, modale) ne sont pas concernés.

Exemple non conforme : sur le site placo.fr, lorsque le menu latéral de droite est survolé, un contenu additionnel apparaît . Ce contenu additionnel ne peut pas être masqué à l’aide de la touche ESC.

Exemple conforme : sur le site Paris - Jeux 2024, le sous-menu déroulant peut être masqué avec la touche ESC.

Exemple non conforme

La tooltip qui apparaît au survol du bouton "Info" ne peut être elle-même survolée et disparaît automatiquement après quelques secondes :

Exemple non conforme

Sur le site bpce.fr, lorsque les vignettes des dernières offres d’emploi sont survolées, un fond rouge vient masquer le contenu de la vignette qui n’est plus lisible.

Contrôle des contenus additionnels au clavier [AA]

Thématique RGAA : Présentation de l’information

Les contenus qui apparaissent au survol d’un élément, au moyen de CSS, doivent apparaitre également au clavier :

  • Le contenu apparaît à la prise de focus sur un composant ;
  • ou le contenu apparaît suite à l’activation d’un composant ou d’une fonctionnalité (un bouton).

Par accès au clavier, on entend le clavier et tout autre périphérique de pointage équivalent.

Exemple non conforme : sur le site Provence Alpes Côte d’Azur Tourisme, du contenu apparaît au survol des vignettes. Ce contenu ne peut pas être rendu visible à la prise de focus.

Exemple confome sur ebay.fr, le survol du lien "Mon Ebay" déclenche l’affichage d’un sous-menu. Ce sous-menu n’apparaît pas à la prise de focus mais à l’activation d’un bouton qui apparaît en navigation clavier.

Exercice

7. Multimédia

Objectif : intégrer les alternatives et choisir un composant accessible

  1. Identification du média
  2. Alternatives aux médias
  3. Compatibilité avec les technologies d’assistance
  4. Médias non temporels

Média temporel [A]

Thématique RGAA : Multimédia

Le média temporel est clairement identifiable grâce au contexte adjacent (titre précédent ou texte adjacent).

Alternatives aux médias [A]

Thématique RGAA : Multimédia

  • Transcription textuelle (texte structuré qui reprend l’ensemble du contenu oral et visuel ; pour les médias vidéo, son et synchronisés) ou une alternative audio seule (médias seulement vidéo)
  • Sous-titres synchronisés (médias synchronisés)
  • Audiodescription (média vidéo avec ou sans son, obligatoire uniquement si la bande son originale dispose des espaces blancs suffisant pour inclure la piste d’audiodescription).

Exemple conforme

Dans le site du Petit Louvre, les vidéos sont associées à un lien de téléchargement d’un PDF qui contient la transcription textuelle de la vidéo et les vidéos ont des sous-titres synchronisés.

Autre exemple : sur le site Access42, les vidéos sont suivies d’accordéons qui contiennent les transcriptions textuelles des vidéos.

Média temporel - compatible avec les TA [A]

Thématique RGAA : Multimédia

  • Contrôles obligatoires.
  • Clavier/souris.
  • Nom pertinent : mises à jour des noms play/pause.
  • Mises à jour des valeurs : timing, son, etc.

Lecteurs vidéos accessibles :

Média non temporel [A]

Thématique RGAA : Multimédia

Animations intégrées dans <canvas> ou <svg>.

  • Mise à disposition systématique d’une alternative présentant les mêmes contenus et les mêmes fonctionnalités (si nécessaire).

Exemple non conforme : le site Prezi met à disposition des animations dans des éléments <canvas> sans alternative.

8. Formulaires

Objectif : faciliter la saisie

  1. Étiquette de champ
  2. Regroupement de champs
  3. Liste de choix
  4. Intitulés de bouton
  5. Aides à la saisie : champs obligatoires
  1. Aides et contrôles de saisie
  2. Modification, mises à jour ou récupération des données
  3. Nature des champs de formulaires

Étiquette de champ [A] - [AA]

Thématique RGAA : Formulaires

Visuellement, la nature du champ est identifiée par :

  • un intitulé visible et pertinent ;
  • ou un bouton visible et pertinent ;
  • ou, a minima, un attribut title pertinent.

Note 1 : placeholder ne remplace pas une étiquette visible.

Note 2 : Les étiquettes de champs qui attendent les mêmes valeurs sur des formulaires d’un même ensemble de page doivent garder une cohérence.

Sur le site de la ville de Bordeaux, le champ de recherche a un attribut title qui donne un nom accessible et visible et qui reprend la valeur du placeholder.

Étiquette de champ [A] - [AA]

Thématique RGAA : Formulaires

Dans le code, le champ doit avoir un nom accessible.

  • aria-labelledby / id
  • aria-label
  • <label> avec relation for / id
  • title

Note : placeholder n’est pas un nom accessible robuste.

<label for="entre20et40">Entre 20 et 40 ans</label>
<input type="radio" id="entre20et40" />

<input title="Votre nom" type="text" id="nom" />

<p id="description">Prénom</p>
<input type="text" aria-labelledby="description" />

<p>Date de naissance</p>
<input type="text" aria-label="Inscrivez votre date de naissance" />

Nom visible et nom accessible [A] - [AA]

Thématique RGAA : Formulaires

Le nom visible doit être contenu dans le nom accessible.

Algorithme de calcul du nom accessible

Quiz

Que pouvez-vous dire de ce champ de formulaire ?

<fieldset>
	<legend>Quel est l’animal de la photo ?</legend>
	<label for="oiseau">Ecureuil</label>
	<input type="radio" name="test1" id="ecureuil"/>
	<label for="ecureuil">Oiseau</label>
	<input type="radio" name="test1" id="oiseau"/>
	<label for="rat">Rat</label>
	<input type="radio" name="test1" id="rat"/>
</fieldset>
Quel est l’animal de la photo ?


un écureuil

Réponse : les étiquettes visibles ne sont pas pertinentes. En effet, les boutons radios ont des étiquettes accolées (les étiquettes visibles), qui ne correspondent pas à l’étiquette à laquelle ils sont réellement reliés.

Étiquettes de champ [A]

Thématique RGAA : Formulaires

Attention :

Les labels et les champs doivent être accolés

Exemple non conforme

Le site education.gouv.fr propose un formulaire de contact avec des champs qui sont trop éloignés des étiquettes.

On notera également le contraste des champs insuffisant et l’absence de la propriété role="presentation" sur le tableau.

Regroupement de champs [A]

Thématique RGAA : Formulaires

Réunir les éléments communs avec :

  • <fieldset> et titrer avec <legend>
  • un élément (div) possède le role="group" et titrer avec aria-label ou aria-labelledby
<fieldset>
  <legend>Adresse de facturation</legend>
  [champs ...]
</fieldset>
<div role="group" aria-labelledby="toto">
  <p id="toto">Adresse de livraison</p>
  [champs ...]
</div>

Liste de choix [A]

Thématique RGAA : Formulaires

Regrouper les items de même nature d’une liste de choix <select> si nécessaire

<optgroup label="label du regroupement">

<select>
  <optgroup label="Véhicules">
    <option>Voiture</option>
    <option>Motos</option>

  </optgroup>
  <optgroup label="Immobilier">
    <option>Maison</option>
    <option>Appartements</option>

  </optgroup>
</select>

Intitulés de bouton [A]

Thématique RGAA : Formulaires

  • L’intitulé (nom accessible) est pertinent ;
  • Si le bouton possède un nom visible alors il est aussi contenu dans le nom accessible.

<input type="submit" value="Envoyer le message" />

<input type="image" src="loupe.png" alt="Rechercher sur le site">

<input type="submit" value="OK" title="OK, envoyer le message" />

<input type="submit" aria-label="Effacer mes données"/>

<input type="submit" aria-labelledby="desc-btn" />
<span id="desc-btn">Envoyer le message</span>

Quiz

Quel est le nom accessible du bouton suivant ?



<input type="submit" value="Envoyer" title="Valider mon virement" label="Retarder mon virement"/>
  • A - Envoyer
  • B - Valider mon virement
  • C - Retarder mon virement

Réponse : Envoyer.
Dans ce contexte, l’attribut title constitue la description accessible, et pas le nom. Quant à la propriété label, elle n’existe pas.

Quiz

Quel est le nom accessible du bouton suivant ?


Envoyer mon message pour modération


<input type="image" value="envoyer" aria-label="Publier mon message" aria-describedby="btn_name" alt="Publier" style="color:#000"/>
<p id="btn_name" style="position:absolute;left:-10000px">Envoyer mon message pour modération</p>
  • A - Publier
  • B - Publier mon message
  • C - btn_name
  • D - Envoyer mon message pour modération

Réponse : Publier mon message.
Dans ce contexte, l’attribut aria-label constitue le nom accessible, il prend le pas sur le contenu du alt. Quant à la propriété aria-describedby, elle constitue la description accessible.

Aides à la saisie : champs obligatoires [A]

Thématique RGAA : Formulaires

Indiquer les champs obligatoires :

  • Au moyen d’un texte dans le nom accessible ;
  • Ou au moyen d’un texte avant le champ, relié au champ via un attribut aria-describedby="id_dun_texte" ;
  • Ou au moyen de l’attribut required, d’une propriété aria-required ou aria-label (+ indication visuelle)
  • Dans tous les cas, il faut une indication visible.

Aides et contrôles de saisie [A] [AA]

Thématique RGAA : Formulaires

  • Format attendu : fournir le format de saisie
  • Contrôle de saisie : fournir un exemple de saisie
  • Directement dans l’étiquette du champ concerné
  • Ou via l’attribut aria-describedby="id_dun_texte"
  • L’indication doit être visible.

Créer un compte sur fnac.com (se connecter > créer un compte)

API Constraint validation

Personnaliser les messages d’erreurs générés automatiquement par le navigateur.

Consigne : saisir une valeur erronée et valider le formulaire.

Validation native

Le message d’erreur géré par le navigateur ne donne pas d’exemple réel de saisie.


Ressources :

Support de l’API par les navigateurs ; Documentation MDN ; Custom Validation Messages for HTML5 Form Constraints.

Modification du message d’erreur natif

La modification du message d’erreur est essentielle lorsqu’il est nécessaire de fournir un exemple réel de saisie.

API Constraint validation

Personnaliser les messages d’erreurs générés automatiquement par le navigateur.

<p class="label" id="label-email">Votre email:</p>
<input type="email" name="email" id="email-form"/>

<script>
var email=document.getElementById("email-form");
email.addEventListener('invalid', function () {
if (this.value.trim() !== '') {
this.setCustomValidity("Saisie invalide. Exemple valide\n: audrey@access42.net");
}
}, false);
</script>

Modification, mises à jour ou récupération des données [AA]

Thématique RGAA : Formulaires

Si le formulaire :

  • modifie ou supprime des données ;
  • ou transmet des réponses à un test ou à un examen ;
  • ou a des conséquences financières ou juridiques ;

L’utilisateur doit pouvoir :

  • vérifier, modifier ou annuler les saisies avant envoi du formulaire ;
  • ou il existe un mécanisme de confirmation explicite via une case à cocher ou une étape supplémentaire.

Nature des champs de formulaires [AA]

Thématique RGAA : Formulaires

Pour les champs qui collectent des informations personnelles sur l’utilisateur, la nature du champ (finalité) est déterminable à partir du code (attributs/propriétés).

Utilisation de l’attribut autocomplete.

Ressources :

 <label for="fname">Prénom</label>
 <input id="fname" type="text" autocomplete="given-name">

 <label for="lname">Nom</label>
 <input id="lname" type="text" autocomplete="family-name">

 <label for="cc-num">Carte de crédit :</label>
 <input type="text" id="cc-num" autocomplete="cc-number">

Exercice

9. Interactivité et contenus complexes

Objectif : faciliter la navigation au clavier et avec les technologies d’assistance

  1. Ordre de tabulation, piège au clavier
  2. Reprise de focus
  3. Accès au contenu additionnel affiché
  4. Raccourcis clavier
  5. Compatibilité avec les technologies d’assistance
  1. Utilisation au clavier et à la souris
  2. Alternative accessible
  3. Changement de contexte
  4. Message de statut

Ordre de tabulation, piège au clavier [A]

  • Ordre de tabulation cohérent : modales, système d’onglets, menu déroulant, ajout/affichage de contenu additionnel etc.
  • Pas de piège au clavier (focus figé dans un composant) (Exemple de piège au clavier)

Ressources : Bookmarklet pour visualiser le déplacement du focus, Reprises de focus et Accessibilité sur le blog Access42

Exemple non conforme

fiche produit Cdiscount

Sur les fiches produit de Cdiscount, il n’est pas possible de quitter la recherche : la touche Échap repositionne le focus sur le champ de recherche.

Reprise de focus [A]

Le repositionnement de focus permet aux utilisateurs de continuer leur navigation de manière pertinente, notamment suite à une action. Par exemple le chargement de données supplémentaires.

La méthode JavaScript .focus() permet de déplacer le focus de l’utilisateur sur un élément.

Note importante : Sur les Single Page Applications, la navigation se fait par des changements de contexte et pas des chargements de pages. Il faut donc prévoir de repositionner le focus en haut de la nouvelle page chargée.

Pour aller plus loin : Accessibilité : comment gérer le rechargement de page dans les « Single Page Applications » ?

Exemple non conforme : sur le site de Darty, lorsque l’on active le composant "Voir tous les univers" dans la zone de filtre, le focus reste sur le composant.

site leblob.fr

Reprise de focus - exemple non conforme : sur le site de leblob.fr, le bouton « Charger plus de contenu » permet d’afficher dynamiquement de nouveaux items. Lorsque ce bouton est activé au clavier, de nouveaux contenus sont chargés dynamiquement au-dessus du bouton, mais le focus de l’utilisateur est laissé sur le bouton qui ne sait pas où les nouveaux contenus ont été ajoutés.

site cdgexpress.com

Reprise de focus - exemple conforme : sur le site de cdgexpress.com, lorsqu’on active le bouton « Voir plus », le focus est repositionné sur le premier élément de la liste d’éléments ajoutés.

Piège au clavier - exemple non conforme : sur le site de dmsearch.eesc.europa.eu, il y a un piège au clavier dans la navigation de gauche. Une fois que le focus de tabulation atteint le lien « Opinions » il est impossible d’atteindre l’élément suivant ou précédent à la tabulation.

site de recherche EESC

Utilisation de l’attribut tabindex

2 valeurs autorisées :

  • tabindex="0" : inclut l’élément dans le parcours séquentiel de tabulation
  • tabindex="-1" :
    • Exclut du parcours séquentiel de tabulation un élément prenant nativement le focus (<button>, <a href="...">, ...)
    • Permet à élément ne prenant pas nativement le focus de le recevoir (méthode JavaScript focus())
    • Ne fait pas ignorer un élément par les technologies d’assistance (différent de aria-hidden="true")
  • Valeurs de l’attribut tabindex (Article en Anglais).
<div role="button" tabindex="0">En savoir plus</div> <main tabindex="-1">...</main>

Pour que la méthode focus() soit fonctionnelle dans ce cas, c’est-à-dire que le focus soit repositionné sur le paragraphe, il est nécessaire de déclarer la propriété tabindex="-1" sur le paragraphe.

En effet, la méthode focus() ne fonctionne que si l’élément cible reconnu interactif. Un paragraphe n’est pas interactif, mais tout élément possédant une propriété tabindex, quel que soit sa valeur, est considéré interactif (au même titre sur les liens, boutons, champs de formulaires.)

Utilisation de l’attribut tabindex

Ne pas utiliser de valeurs > 0

Image
Exemple de parcours de tabulation dégradé par l’utilisation de tabindex > 0.

Accès au contenu additionnel affiché [A]

Thématique RGAA : Navigation

Pour une zone de contenu additionnel qui contient un élément interactif (lien, bouton, champ de formulaire...) :

  • L’élément interactif doit pouvoir être atteint au clavier
  • La zone doit rester visible tant que le focus se trouve sur l’élément ou la zone contrôlée.

Par exemple, une infobulle qui contient un lien.

Raccourcis clavier [A]

Thématique RGAA : Navigation

Pour tous les raccourcis clavier de caractère imprimable :

  • L’utilisateur dispose d’un mécanisme pour désactiver ou configurer le raccourci clavier avec une touche de modification ;
  • Ou le raccourci clavier n’est effectif que lorsque le focus est dans le composant sur lequel il s’applique.

Ressources : Single key shortcuts affecting speech input vidéo exemple d’impact utilisateur

Conforme : Dans Gmail, les raccourcis a une touche peuvent être modifiés pour obtenir des raccourcis claviers avec des touches de modification.

Non conforme : Twitter dispose de raccourcis claviers a une touche de caractères imprimables qui ne peuvent n’y être désactivés ni configurés.

Voir en ligne

Compatible avec les technologies d’assistance [A]

Thématique RGAA : Scripts

  • Nom, rôle et valeurs
  • Accès au clavier et à la souris
  • Ou une alternative accessible

Rôle pertinent [A]

Thématique RGAA : Scripts

Tout composant interactif doit avoir un rôle et un rôle pertinent

Par exemple :

  • Un composant qui déclenche l’ouverture d’une page ou d’un onglet doit être un lien.
  • Un composant qui déclenche un événement dans la page, qui est le support d’une fonction JavaScript, doit être un bouton ou implémenter le motif ARIA button.

Exemple conforme : sur l’affichage des traductions de Deepl, les composants « Écouter », « J’aime », « Je n’aime pas », « Améliorer la traduction », etc. déclenchent des événements JavaScript et sont implémentés dans des éléments <button>.

Nom accessible pertinent [A]

Thématique RGAA : Scripts

Tout composant interactif doit avoir un nom accessible pertinent

Selon la nature du composant, le nom accessible peut être déterminé par :

  • Le contenu de la propriété aria-labelledby
  • Le contenu de la propriété aria-label
  • Le contenu du texte (ou de l’alternative de l’image)
  • Le contenu de l’attribut title

Important :

En cas de concurrence des implémentations, c’est l’algorithme de calcul du nom accessible qui permet déterminer quelle valeur est le nom accessible.

Le nom accessible doit toujours reprendre le nom visible.

Ressources  : HTML API Mappings (algorithme de calcul du nom accessible)

Exemple 1 - Non conforme

<button>X</button>

Le nom accessible n’est pas pertinent.

Exemple 2 - Conforme

<button aria-label="fermer la fenêtre modale">X</button>

Le nom accessible est constitué par la propriété aria-label.

Exemple 3 - Non conforme

<button aria-label="revenir à la page d’accueil">Fermer</button>

Le nom visible est constitué du texte de la balise <button> « Fermer » et le nom accessible est construit à partir du contenu de aria-label « revenir à la page d’accueil ». Le nom visible n’est pas contenu dans le nom accessible.

État et changements d’état pertinents [A]

Thématique RGAA : Scripts

Si nécessaire, l’état (et les changements d’état) ou la valeur du composant sont accessibles aux API d’accessibilité.

Selon l’information à véhiculer, il est possible d’informer les utilisateurs des états, changements d’états ou valeurs du composant de différentes manières :

  • l’état sélectionné d’un bouton (dans une liste de bouton par exemple) pourra employer la propriété aria-pressed="true" (attention, l’état sélectionné peut être rendu par différentes propriétés en fonction du contexte, notamment dans le cas de motifs de conception)
  • lorsqu’un composant est inactif, c’est-à-dire qu’aucune action n’est possible, on utilisera l’attribut disabled ;
  • lorsqu’un composant change d’état, que sa fonctionnalité est modifiée, on peut également passer par un changement de nom accessible ou de description (par exemple, la transformation d’un bouton lecture en pause, on vérifiera que l’intitulé a bien été modifié pour retranscrire la fonctionnalité qui sera déclenchée à la prochaine activation du bouton, pas uniquement l’apparence visuelle).

Exemple 1 - Conforme

<button aria-pressed="false">Filtrer par nom</button>
<button aria-pressed="true">Filtrer par nom</button>

L’état sélectionné est donné par la couleur et par une propriété qui peut être exploitée par les technologies d’assistance.

Exemple 2 - Conforme

<button>Lecture</button>
<button>Pause</button>

Le nom accessible est modifié pour indiquer la fonction qui sera déclenchée à la prochaine activation du bouton.

Utilisation au clavier et à la souris [A]

Thématique RGAA : Scripts

Tous les composants doivent être utilisables au clavier.

S’assurer que les composants interactifs reçoivent le focus de tabulation et peuvent être activés au clavier, et que les interactions au clavier sont respectées.

Dans certains cas, les motifs de conception ARIA nous aident à évaluer des comportements au clavier en déterminant des interactions attendues (tabulation, flèches de direction, entrée, espace).

En particulier, lors de l’utilisation d’implémentations non natives d’éléments, il est nécessaire de s’assurer que ces éléments soient atteignables et activables au clavier. Dans l’exemple ci-dessus les boutons 1 et 2 sont atteignables et activables avec les touches Espace et Entrer. Le bouton 3 n’est pas activable au clavier (absence de JavaScript) et le bouton 4 n’est pas atteignable au clavier (absence d’attribut tabindex="0").

Alternative accessible [A]

Thématique RGAA : Scripts

Dans le cas où le composant ne peut pas être rendu accessible, il est possible de mettre en place une alternative accessible qui offre les mêmes fonctions.

Cas typiques :

  • Les datepickers : le datepicker n’est pas accessible mais le champ de date associé est inscriptible et l’utilisateur peut choisir une date en saisissant avec son clavier. On n’évaluera pas le datepicker, mais simplement l’alternative. Ceci ne sera valable que si le datepicker lui-même n’apporte pas d’informations (par exemple des dates d’indisponibilité).

Exemple conforme : sur le site sncf-connect.com, le datepicker n’est pas accessible mais il est possible de choisir une date en la saisissant au clavier.

Exemple : sur leboncoin.fr, le calendrier permettant de choisir les dates, présente des informations. Il sera ici indispensable de rendre le datepicker accessible.

Changement de contexte [A]

Thématique RGAA : Scripts

  • un texte explicatif précédant le changement de contexte
  • un bouton ou un lien explicite

Exemples :

Message de statut [AA]

Informer les technologies d’assistance des messages d’alerte de confirmation ou de statut, sans déplacer le focus de l’utilisateur.

  • role="alert"
  • role="status"
  • role="log"
  • Utiliser le modèle de conception progressbar pour les messages d’attente

Méthode alternative : utiliser la propriété aria-live.

Ressource : Utiliser les live regions ARIA

Exemple conforme : sur le site salomon, sur une page de catégorie du catalogue, la sélection de filtres déclenche la mise à jour du nombre de résultats disponibles dans le bouton « Voir ». Ce bouton possède les propriétés aria-live="polite". Il aurait été intéressant que le nom du bouton contienne une information plus pertinente, par exemple sous la forme "Voir 80 résultats".

Démonstration : zones de mises à jour

Ajout d’un role="status"
Ajout d’un role="alert"
Ajout d’un contenu et sa mise à jour aria-live

<p role="status">Ceci est un status ajouté dynamiquement</p>

<p role="alert">Ceci est une alerte ajoutée dynamiquement</p>

<p><span id="myLiveRegion1" aria-live="polite">Mais je sais rester polie</span></p>

Quiz

Quel est le nom accessible du bouton ?

<button aria-labelledby="desc-button"><img src="img_slide/quizz/renard.png" alt="Un renard roux de la ferme" aria-label="Visite de la ferme." />Inscription visite des renards</button>
<p id="desc-button">Note : Les renards sont en libertés.</p>
  • A - Note : Les renards sont en libertés
  • B - Un renard roux de la ferme
  • C - Visite de la ferme
  • D - Inscription visite des renards

Note : Les renards en libertés.

Réponse A : Note : Les renards en libertés.

L’algorithme de calcul du nom accessible donne la priorité au contenu de la propriété aria-labelledby définie sur le bouton pour créer le nom accessible. Toutes les autres propriétés permettant de donner un nom accessible du bouton (contenu image ici avec le aria-label de l’image ou le alt), ne seront jamais pris en compte et ne seront jamais présentés aux technologies d’assistance.

Quiz

Quel est le nom accessible du bouton ?

<button href="#" aria-describedby="La basse cour d’élevage"><img src="img_slide/quizz/poule.png" alt="Pool" aria-hidden="true"/>Agrandir l’image</button>
  • A - La basse cour d’élevage
  • B - Agrandir l’image
  • C - Pool Agrandir l’image

Réponse B : Agrandir l’image

L’algorithme du nom accessible, en l’absence de propriétés de nommage aria sur le bouton, prend en compte en priorité le contenu du bouton, ici le contenu textuel. L’image sera ignorée puisqu’elle porte la propriété aria-hidden="true". La propriété aria-describedby définie sur le bouton ne constitue que la description accessible. De plus, cette propriété attend comme valeur l’identifiant d’un passage de texte et pas du texte brut.

Quiz

Que pouvez-vous dire sur ce bouton ?

<button id="quizz-btn-switch" aria-label="Désactiver option"><img id="quizz-btn-img" src="img_slide/quizz/switchoff.png" alt=""></button>

Le nom accessible est utilisé ici pour transmettre l’information de l’action à réaliser. Cette valeur est différente de l’information visuelle. Lorsque l’interrupteur est sur ON, le nom accessible doit indiquer que l’on peut désactiver l’option avec la valeur aria-label="Désactiver option".

10. ARIA

ARIA
Accessible Rich Internet Applications

  • Définir les composants d’interface et de structure ;
  • Informer des états et des propriétés des composants d’interface ;
  • Mises à jour de contenus dynamiques ;
  • Composants utilisables au clavier.

Respecter les règles d’usage

1. Privilégier la méthode native

  • Exceptions : limitations de style ou de support ou contraintes techniques
  • Tester la restitution
  • Raccourcis clavier des TA non garantis
<div role="dialog"> <dialog>

2. Ne pas changer la sémantique

  • Exceptions : contraintes techniques ou méthode de fallback
  • Fonctionnalités de navigation des TA non garanties
  • Restrictions de rôle
Sémantique de titre écrasée <h2 role="tab">Titre onglet</h2> Sémantique de titre conservée <div role="tab">
  <h2>Titre onglet</h2>
</div>

3. Les composants interactifs doivent être utilisables au clavier

  • Les composants doivent pouvoir être atteint à la tabulation : en ajoutant la propriété tabindex="0" si nécessaire.
  • Les composants doivent implémenter les interactions claviers nécessaires au rôle : par exemple, les éléments avec le role="button" doivent être activables avec la touche Entrée et Espace comme un <button> natif.
  • Critère RGAA4 7.3
élément div non utilisable au clavier <div role="button">En savoir plus</div> élément div utilisable au clavier <div role="button" tabindex="0">En savoir plus</div>

4. Ne pas supprimer la sémantique des éléments interactifs ou empêcher leur restitution

  • role="presentation"
  • aria-hidden="true" (hérité des parents)
<button aria-hidden="true">Menu</button>

5. Tout composant interactif doit avoir un nom accessible

ARIA

Comment un lecteur d’écran sait-il de quoi il parle ?

Motif de conception

Motif de conception (design pattern) : décrit structure, rôles et propriétés et comportement d’un composant JavaScript(widget).

Image
Exemple d’implémentation ARIA pour le role dialog.

Environnement de test

Pour toutes les implémentations JavaScript et ARIA, il est nécessaire de réaliser des tests de restitution et d’utilisation avec les lecteurs d’écran de la base de référence.

Les composants simples sont largement bien supportés (disclosure et modale par exemple). Les tests de restitution sont surtout très utiles sur les composants complexes comme les combobox, datepicker, grid, etc.

Ressources : Pour prendre en main les lecteurs d’écran, suivre le pas à pas du Guide sur les lecteurs d’écran.

Environnement de bureau
Technologie d’assistance Navigateur
NVDA (dernière version) Firefox
JAWS (version précédente) Firefox
VoiceOver (dernière version) Safari
Environnement mobile
Système Technologie d’assistance Navigateur
iOS VoiceOver (dernière version) Safari
Android Talkback (dernière version) Chrome

Pour tester un site web sur un terminal mobile, l’environnement de test devra comporter une des deux combinaisons (iOS ou Android). À noter que dans le cas d’un site web mobile grand public, il est fortement conseillé de tester dans les deux environnements.

Exercice

Testez vos connaissances

Répondez à 5 questions sur quiz.access42.net

Vous pourrez télécharger le récapitulatif complet du quiz à la fin.

Démonstrations ARIA

Formulaire

Le but de cette démonstration est de montrer comment on peut améliorer la restitution d’un formulaire grâce aux deux propriétés aria-labelledby et aria-describedby.

Formulaire 1
Commande de fruits

kilos

Attention aux délais
  • Plus de 30 kg, prévoir 10 jours.
  • Plus de 60 kg, prévoir 3 semaines.
  • Plus de 100 kg, nous consulter.

Le niveau d’information de ce formulaire est réduit et d’importantes informations comme les délais sont absentes ; ARIA va nous permettre de rendre ce formulaire beaucoup plus convivial.

Formulaire

Le but de cette démonstration est de montrer comment on peut améliorer la restitution d’un formulaire grâce aux deux propriétés aria-labelledby et aria-describedby.

Formulaire 2
Commande de fruits

kilo

Attention aux délais
  • Plus de 30 kg, prévoir 10 jours.
  • Plus de 60 kg, prévoir 3 semaines.
  • Plus de 100 kg, nous consulter.

Une propriété aria-labelledby a été implémentée sur le champ "commande" : elle référence l’élément label du champ et l’élément "unité". Lors de la prise de focus sur le champ "commande", l’ensemble de ces éléments seront vocalisés dans l’ordre dans lequel les références ID sont implémentées.

Une propriété aria-describedby a été implémentée sur le champ "commande" qui référence la zone "attention aux délais" contient des informations complémentaires. Lors de la prise de focus, cette zone est vocalisée, jouant le rôle d’un message d’aide.

Une propriété aria-labelledby a été implémentée sur le bouton de soumission, elle référence un élément caché qui va contenir un message d’aide dynamique géré par javascript. Lors de la prise de focus sur le bouton de soumission, le bouton et le message d’aide seront vocalisés.

Afficher / Masquer

Étude du motif ARIA Disclosure

Important : il existe d’autres méthodes pour gérer un composant qui affiche et masque du contenu, comme l’utilisation du composant HTML <details>. Voir Développer un composant accessible pour afficher/masquer une zone (Access42)

Potentiomètre

Note importante : Le motif slider n’est pas supporté sur les environnements mobiles, il est inutilisable par les lecteurs d’écran. Il faut privilégier la méthode native : input type="range"

Étude du motif ARIA Slider

Volume:
0%

Important : le motif ARIA slider n’est pas toujours utilisable en environnement mobile. Les champs de formulaire de type range peuvent être de meilleures implémentations car elles sont fonctionnelles sur environnement mobile.

Ressources : Évaluation du motif slider avec les lecteurs d’écran

Barre de progression

Étude du composant progressbar

État du chargement

 

Ressources : Évaluation du progressbarr avec les lecteurs d’écran

<p id="l1">État du chargement</p>
<span role="progressbar" id="p1" aria-labelledby="l1" aria-valuemin="0" aria-valuenow="0" aria-valuemax="100" tabindex="-1"> </span>

Chat

La démonstration nécessite deux interlocuteurs ; elle utilise un procédé AJAX de gestion de chat simplifié.

Avec NVDA, utiliser le module de chat première démonstration.

L’utilisateur est obligé d’effectuer des allers-retours entre le champ de formulaire et la zone mise à jour pour pouvoir suivre une conversation.

Utiliser maintenant la seconde démonstration en saisissant votre message et en validant avec la touche Entrée.

L’utilisateur peut entendre l’ensemble de la conversation sans quitter le champ de formulaire lui permettant de saisir son message.

Ressources : aria-live property, ARIA Live Region Attributes

Aide à l’analyse de composants

Le fichier DP-ARIA (répertoire Outils du support) est une aide à l’analyse de composants complexes. Chaque composant qui s’appuie sur un motif de conception ARIA peut-être découpé en critère à évaluer.

Les principaux motifs de conception sont présents (Tabs, Disclosure, Dialog, etc.) avec les différentes versions d’implémentations.

Composants ARIA

Étude de composants : bibliothèque de référence pour tests de restitution

Choix de composants techniques

Lors du choix d'un composant technique, qu'il s'agisse d'un framework, outil ou service (gestionnaire de cookies par exemple), il est important de s'assurer du niveau d'accessibilité proposé.

Les informations sur l'accessibilité sont souvent disponibles dans la documentation par l'information du support de WCAG (norme internationale) ou de la norme européenne EN 301 549, par exemple :

Cette information ne permet pas de garantir une conformité totale de tous les composants lorsqu'il s'agit de frameworks (ou de composants) et il peut-être nécessaire dans certains cas de vérifier l'accessibilité complètement.

Outils de tests automatisés

Plusieurs types d’outils existent, les linters de chaque IDE, les CLI (command line) comme axe-core ou même pa11y et enfin les plugins navigateurs qui peuvent être exécutés directement sur une page :

Plusieurs limitations techniques sont connues sur ces outils automatisés, à l’heure actuelle, par exemple :

  • Les tests qui abordent la pertinence (lien, formulaire, etc.)
  • Les critères autour de la navigation : piège au clavier, ordre de tabulation, etc.
  • Analyse sur différents affichage (mode réduit, mode mobile, etc.)

Il est difficile d’envisager la mise en place d’un tel outil sans en connaitre à l’avance son périmètre complet d’analyse et ses limitations.

Au-delà de ces limitations techniques, certains biais peuvent être apportés par ces technologies notamment l’interprétation des résultats qui doit être réduit à la capacité d’évaluation de l’outil. L’affichage d’un pourcentage ne peut pas être comparé à un taux de conformité issue d’un audit complet.

Ces tests ne pourront évidemment pas remplacer un audit complet.

Documents de références

Référentiel

WCAG

Spécifications

HTML

ARIA

API

Outils de tests

Ces design systems proposent des solutions et intègrent des concepts d’accessibilité.

Il faut néanmoins rester vigilant sur l’état d’accessibilité de chaque composant avant l’implémentation, les mises à jour ou les contextes différents peuvent avoir un impact.

Bilan de la formation

Reprenons vos objectifs initiaux… Satisfait·e·s ?

Pour nous aider à progresser, nous vous proposons de remplir un questionnaire de satisfaction.

Un peu d’administratif

  • Avez-vous signé la feuille de présence ?
  • Comment récupérer le support de formation ?

Certification

Pour les formations inter-entreprises et inscrits avec leur compte CPF : compris dans le prix de la formation. Pour les formations intra : sous conditions.

Candidat·es CPF : il est obligatoire de se présenter à l’examen

« Développer des sites web accessibles », enregistrée chez France Compétences sous le numéro RS5161

  • Après la formation, vous recevrez un mail vous invitant à remplir un questionnaire pour finaliser votre inscription.
  • Quelques jours après, vous recevrez un mail de confirmation et un accès à un cours en ligne et des exercices de révision.
  • Un QCM de positionnement vous est proposé (15/20 minutes de réalisation). Une fois complété, vous pourrez choisir votre date d’examen (voir les dates sur la fiche)
  • Certification en ligne (sur le modèle des exercices de la formation) : ouverture de la plateforme à 09h, limite des dépôts à 16h.
  • Les corrections sont manuelles, il faut prévoir un délai de 3 semaines pour recevoir le résultat.

Gardons contact !

  • Notre blog : nos actualités et articles de fond sur l’accessibilité.
    a42.fr/blog
  • Notre lettre d’information : tous les deux mois, un condensé d’accessibilité par e-mail.
    a42.fr/newsletter

Réseaux sociaux

Notre veille au quotidien sur l’accessibilité numérique.

Merci de votre attention !

Une question après la formation ?
Contactez-nous : formations@access42.net

Note importante

Le présent support de formation est remis aux stagiaires à des fins d’utilisation personnelle uniquement. Tous les droits sont réservés à Access42. À ce titre, ce support ne peut être ni diffusé, ni modifié, ni utilisé à des fins commerciales.