Carrousels
Sommaire
- Principe.
- Socle HTML.
- Rôles, états et propriétés ARIA.
- Interactions au clavier.
- Comportements attendus.
- Remarques.
Principe
Les carrousels sont des modules dynamiques qui permettent d’optimiser l’affichage du contenu d’une page dans un espace réduit grâce à un système de navigation contrôlant l’affichage de panneaux défilants, parfois automatiquement.
Ils se présentent généralement sous la forme d’un panneau de contenu entouré de boutons « Précédent » et « Suivant » qui permettent de faire défiler les diapositives du carrousel. Ils sont souvent accompagnés d’un système de pagination.
Dans le cas d’un carrousel à défilement automatique, un système de mise en pause et de relance du défilement est présent.
Cette fiche s’appuie sur le motif de conception « Carousel with Tabs for Slide Control » détaillé dans les ARIA Authoring Practices Guide (APG) du W3C.
Socle HTML
Rôles, états et propriétés ARIA
role="tablist"
etaria-label="Diapositives"
doivent être appliqués sur l’élément englobant les onglets de pagination.role="tab"
doit être appliqué sur chaque onglet de pagination.- L’attribut
tabindex="-1"
doit être appliqué sur les onglets qui ne sont pas sélectionnés. - L’attribut
aria-selected
doit être appliqué sur chaque onglet de pagination. Sa valeur doit être renseignée dynamiquement en fonction de l’état de l’onglet de pagination associé :aria-selected="true"
sur l’onglet de pagination sélectionné.aria-selected="false"
sur les autres onglets de pagination.
- L’attribut
aria-live
doit être appliqué sur le conteneur des diapositives. Sa valeur doit être renseignée dynamiquement en fonction de l’état du défilement du carrousel :aria-live="polite"
si le carrousel ne défile pas automatiquement.aria-live="off"
si le carrousel défile automatiquement.
role="tabpanel"
,aria-roledescription="diapositive"
etaria-label="1 sur 4"
doivent être appliqués sur chaque diapositive. Les valeurs de ce dernier attribut doivent être renseignées dynamiquement, en fonction du numéro et du nombre total de diapositives.- Les diapositives qui ne sont pas affichées doivent être cachées via la classe CSS
display: none;
ouvisibility: hidden;
. Si ce n’est pas possible, appliquer les recommandations suivantes :- L’attribut
aria-hidden
doit être appliqué sur chaque diapositive. Sa valeur doit être renseignée dynamiquement en fonction de l’état de la diapositive associée :aria-hidden="false"
sur la diapositive affichée.aria-hidden="true"
sur les autres diapositives.
tabindex="-1"
doit être appliqué dynamiquement sur chaque élément interactif contenu dans une diapositive masquée. L’attribut ne doit pas être présent sur les éléments interactifs contenus dans la diapositive affichée.
- L’attribut
- Chaque onglet de pagination doit être rattaché à sa diapositive associée via l’attribut
aria-controls
:- Chaque diapositive doit posséder un attribut
id
renseigné avec une valeur unique. - Chaque onglet de pagination doit posséder un attribut
aria-controls
renseigné avec la valeur de l’attributid
de la diapositive associée.
- Chaque diapositive doit posséder un attribut
Interactions au clavier
Tab
Lorsque l’on accède en tabulant au groupe d’onglets de pagination, le focus est positionné au niveau de l’onglet de pagination sélectionné dans le groupe d’onglets de pagination. Lorsque le focus est positionné sur un onglet de pagination, la prochaine tabulation permet de quitter le groupe d’onglets de pagination.
Maj + Tab
Même comportement qu’avec la touche Tab, mais cette fois dans l’ordre inverse de lecture.
Flèche gauche
Lorsque le focus est positionné sur un onglet de pagination, déplace le focus clavier vers le précédent onglet du groupe d’onglets de pagination et sélectionne cet onglet de pagination. Si le focus clavier est positionné au niveau du premier onglet de pagination du groupe au moment où la touche est pressée, le focus clavier est déplacé au niveau du dernier onglet de pagination du groupe et cet onglet de pagination est sélectionné.
Flèche droite
Lorsque le focus est positionné sur un onglet de pagination, déplace le focus clavier vers l’onglet de pagination suivant dans le groupe et sélectionne cet onglet de pagination. Si le focus clavier est positionné au niveau du dernier onglet de pagination du groupe au moment où la touche est pressée, le focus clavier est déplacé au niveau du premier onglet de pagination du groupe et cet onglet de pagination est sélectionné.
Début
Déplace le focus sur le premier onglet de pagination et affiche la première diapositive.
Fin
Déplace le focus sur le dernier onglet de pagination et affiche la dernière diapositive.
Entrée et Espace
Lorsque le focus clavier est positionné sur les boutons de navigation, affiche la diapositive précédente ou suivante.
Lorsque le focus clavier est positionné sur le bouton de mise en pause et de relance du défilement, stoppe et relance alternativement le mouvement.
Comportements attendus
- Parmi tous les onglets de pagination, un seul onglet de pagination peut être sélectionné à la fois et seul l’onglet de pagination actif peut recevoir le focus clavier.
- Lorsqu’un onglet de pagination inactif est sélectionné, l’onglet de pagination précédemment sélectionné devient inactif et le focus clavier est positionné au niveau de l’onglet de pagination nouvellement sélectionné.
- Seules la ou les diapositives associées à l’onglet de pagination en cours de sélection sont affichées. Les autres diapositives sont masquées avec
display: none;
ouvisibility: hidden;
ou éventuellement avecaria-hidden="true"
. - Il ne doit pas être possible de tabuler sur les éventuels éléments interactifs contenus dans les diapositives masquées. Si les diapositives masquées ne sont pas cachées via les CSS, un attribut
tabindex="-1"
doit être rajouté dynamiquement sur chacun de ces éléments interactifs. L’attribut doit ensuite être supprimé dès lors que la diapositive associée est affichée. - Les flèches de navigation sont utilisées pour naviguer dans la liste des onglets de pagination et pour sélectionner l’onglet de pagination courant.
- La valeur de l’attribut
aria-selected
doit être modifiée dynamiquement à chaque mise à jour du statut de l’onglet de pagination correspondant. - La valeur de l’attribut
tabindex="-1"
doit également être modifiée dynamiquement chaque fois que le statut de l’onglet de pagination est mis à jour. - Si utilisée, la valeur de l’attribut
aria-hidden
doit être modifiée dynamiquement à chaque mise à jour du statut du panneau correspondant. - L’alternative textuelle du bouton-image « Reprendre le défilement du carrousel » doit être mise à jour lorsque le bouton-image est activé. Opter alors par exemple pour l’alternative « Arrêter le défilement du carrousel ».
Remarques
- À noter qu’il est également possible de remplacer les balises
<img />
dans les boutons par du texte, des images vectorielles<svg>
, ou encore des polices d’icônes. - Dans le cas d’un carrousel ne contenant pas de puces de pagination, l’ensemble des interactions au clavier et des comportements attendus propres au système d’onglets sont à ignorer. Ainsi, dans le socle HTML, les puces de navigation seront supprimées, et l’attribut
role="tabpanel"
présent sur les diapositives sera remplacé parrole="group"
.
8 commentaires
-
Ce commentaire a été publié sur une ancienne version des notices AcceDe Web. Il se peut que son contenu ne soit plus d'actualité.
J’ajouterais un aria-label sur le ul pour améliorer l’accessibilité. Comme « actualité » ou « dernières nouvelles ».
-
Ce commentaire a été publié sur une ancienne version des notices AcceDe Web. Il se peut que son contenu ne soit plus d'actualité.
Bonjour Jonathan,
Merci pour cette proposition.
Avec l’arrivée récente du Design Pattern « Carousel », nous avons prévu de revoir en profondeur cette fiche.
Et, comme indiqué dans celui-ci (
The group containing the picker controls has an accessible label provided by the value of
), nous allons effectivement prévoir l’ajout d’unaria-label
that identifies the purpose of the controls, e.g., « Choose slide to display ».aria-label
dans la balise<ul>
des boutons de navigation dans le carrousel.Johan
-
-
Ce commentaire a été publié sur une ancienne version des notices AcceDe Web. Il se peut que son contenu ne soit plus d'actualité.
Tiens, si jamais, j’ai une version sans jQuery du carrousel accessible : https://van11y.net/fr/carrousel-accessible/
-
Ce commentaire a été publié sur une ancienne version des notices AcceDe Web. Il se peut que son contenu ne soit plus d'actualité.
Bonjour Nico,
Merci !
Nous allons l’ajouter aux ressources.
-
-
Ce commentaire a été publié sur une ancienne version des notices AcceDe Web. Il se peut que son contenu ne soit plus d'actualité.
Bonjour !
Je crois qu’il y a une erreur dans le paragraphe suivant, remplacer
aria-selected
pararia-hidden
n’est-ce pas ? :L’attribut
aria-hidden
doit être appliqué sur chaque panneau. Sa valeur doit être renseignée dynamiquement en fonction de l’état du panneau associé :aria-hidden="false"
sur le panneau affiché.aria-selected="true"
sur les autres panneaux.
-
Ce commentaire a été publié sur une ancienne version des notices AcceDe Web. Il se peut que son contenu ne soit plus d'actualité.
Bonjour Claire,
Tout à fait, c’est corrigé.
Merci beaucoup ta vigilance !Johan
-
Ce commentaire a été publié sur une ancienne version des notices AcceDe Web. Il se peut que son contenu ne soit plus d'actualité.
Hello,
je sais pas si ce composant est AcceDe compliant :) mais le voici : http://a11y.nicolas-hoffmann.net/carrousel/
-
Ce commentaire a été publié sur une ancienne version des notices AcceDe Web. Il se peut que son contenu ne soit plus d'actualité.
Bonjour Nicolas,
Merci pour ton commentaire et ton script que nous venons d’ajouter dans l’encart « Composants ». :)
-
Ajouter un commentaire
Mises à jour
- 28/08/2024
- Mise à jour mineure.