Fenêtres modales
Sommaire
- Principe.
- Socle HTML.
- Rôles, états et propriétés ARIA.
- Interactions au clavier.
- Comportements attendus.
Principe
Les fenêtres modales sont des fenêtres qui apparaissent directement à l’intérieur de la fenêtre courante du navigateur, au-dessus de la page web qui les appelle.
Il s’agit de fenêtres modales, c’est-à-dire de fenêtres qui prennent le contrôle de la page courante tant qu’elles sont affichées à l’écran.
Cette fiche s’appuie sur le motif de conception « Dialog (modal) » détaillé dans les ARIA Authoring Practices Guide (APG) du W3C.
Socle HTML
Le socle HTML d’une fenêtre modale est différent selon que cette dernière possède un titre affiché à l’écran ou non.
Fenêtre modale avec un titre affiché à l’écran
Fenêtre modale sans titre affiché à l’écran
Rôles, états et propriétés ARIA
role="dialog"
doit être appliqué sur le conteneur de la fenêtre modale.aria-modal="true"
doit être appliqué sur le conteneur de la fenêtre modale.- Si le titre de la fenêtre modale est affiché à l’écran, il doit être rattaché à la fenêtre modale via l’attribut
aria-labelledby
:- Le titre de la fenêtre modale doit posséder un attribut
id
renseigné avec une valeur unique. - Le conteneur de la fenêtre modale doit posséder un attribut
aria-labelledby
renseigné avec la valeur de l’attributid
du titre de la fenêtre modale.
- Le titre de la fenêtre modale doit posséder un attribut
- Si le titre de la fenêtre modale n’est pas affiché à l’écran,
aria-label
doit être appliqué et renseigné sur le conteneur de la fenêtre modale.
Interactions au clavier
Tab
Lorsque la fenêtre modale est affichée, déplace successivement le focus clavier vers chacun des éléments interactifs contenus dans la fenêtre modale. Si le focus clavier est positionné au niveau du dernier élément interactif contenu dans la boîte de dialogue modale au moment où la touche est pressée, le focus clavier est déplacé au niveau du premier élément interactif contenu dans la fenêtre modale.
Maj + Tab
Même comportement qu’avec la touche Tab, mais cette fois dans l’ordre inverse de lecture. Si le focus clavier est positionné au niveau du premier élément interactif contenu dans la fenêtre modale au moment où la combinaison de touches est pressée, le focus clavier est déplacé au niveau du dernier élément interactif contenu dans la fenêtre modale.
Échap
Lorsque la boîte de dialogue modale est affichée, ferme la fenêtre modale, et déplace le focus clavier sur l’élément interactif qui a déclenché l’ouverture de la fenêtre modale.
Comportements attendus
Lorsque la fenêtre modale est affichée à l’écran
- Le focus clavier est positionné dynamiquement sur le premier élément interactif contenu dans la fenêtre modale.
- Le focus clavier doit être bloqué à l’intérieur de la fenêtre modale et il ne doit pas être possible de tabuler sur le reste de la page, en-dessous de la fenêtre modale.
- Il est possible de fermer la fenêtre modale avec la touche Échap.
Lorsque la fenêtre modale est fermée
- Le focus clavier doit être replacé au niveau de l’élément qui a déclenché l’ouverture de la fenêtre modale.
- Dans l’idéal, la fenêtre modale est supprimée du DOM. Toutefois, si la fenêtre modale reste présente dans le code source,
display: none
ouvisibility: hidden
doivent être appliqués sur son conteneur.
6 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é.
Hello,
oseré-je suggérer le dernier composant accessible estampillé Van11y => https://van11y.net/fr/modale-accessible/ ;) (IE9+ et sans jQuery)
Au plaisir,
Nico-
Ce commentaire a été publié sur une ancienne version des notices AcceDe Web. Il se peut que son contenu ne soit plus d'actualité.
Salut Nico,
Merci beaucoup pour ton script et ta proposition !
Nous allons prochainement remettre à plat les trois fiches « Fenêtres modales », « Boîtes de dialogue modales » et « Boîtes d’alerte modales » de cette notice pour qu’elles collent aux nouveaux Design Patterns ARIA correspondant (et aussi pour qu’elles soient compatibles avec le lecteur d’écran VoiceOver).
Du coup, nous étudierons l’ajout de ton script dans la fiche qui va bien à ce moment là. ;)
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é.
Bonjour Sébastien,
Merci pour ta réponse. On en apprend tous les jours.
Je viens de tester la modale de Bootstrap car il utilise un
role="dialog"
pour le conteneur de la popin mais ladiv
du niveau d’en dessous a ensuite unrole="document"
pour permettre la navigation classique entre les éléments.
C’est ce que fait aussi Nicolas Hoffmann dans le script partagé dans la rubrique « Composants ».Que penses-tu de cette technique ?
-
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 Julie,
Effectivement cette technique permet de résoudre le problème que j’ai identifié plus haut.
Elle a un inconvénient : celui de ne pas être tout à fait conforme à l’objectif initial.
En effet, une fenêtre de dialogue modale telle que définie parrole="dialog"
correspond àA dialog is an application window that is designed to interrupt the current processing of an application in order to prompt the user to enter information or require a response
. C’est donc un détournement, car une popin avec une vidéo, un formulaire ou un autre contenu divers ne correspond pas vraiment à ça.Toutefois, cet inconvénient est également un avantage. Puisqu’il n’existe pas vraiment de rôle pour les modales génériques, l’utilisation de
role="dialog"
permet d’annoncer à l’utilisateur qu’une fenêtre s’est ouverte. Il sait donc qu’il est toujours sur la même page, qu’il n’a pas changé, mais qu’il est désormais sur une fenêtre par-dessus.C’est donc un détournement intéressant.
Je vois généralement deux possibilités d’intégration pour les popins :- 1. Détourner un modèle de conception clairement défini et proche, comme par exemple celui des boîtes de dialogue modales (popins de dialogue) et s’assurer qu’il reste pertinent et fonctionnel dans ce contexte (en ajoutant par exemple
role="document"
sur la zone de contenu). - 2. Imaginer un autre modèle pertinent pour l’utilisateur et compatible avec les aides techniques, comme c’est le cas de cette fiche (car il n’existe aucun modèle de conception ARIA pour les popins).
Bien à toi,
Sébastien. - 1. Détourner un modèle de conception clairement défini et proche, comme par exemple celui des boîtes de dialogue modales (popins de dialogue) et s’assurer qu’il reste pertinent et fonctionnel dans ce contexte (en ajoutant par exemple
-
-
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,
Ne faut-il pas ajouter le
role="dialog"
également pour ces popins même si elles ne constituent pas un dialogue en tant que tel ?
Cela permettrait d’entrer dans le mode « application » pour le lecteur d’écran et donc de faciliter la navigation.De plus, les exemples de composants proposés ajoutent bien ce rôle.
-
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 Julie,
En fait, la réponse est dans la question ;).
Ces popins ne constituent pas un fenêtre de dialogue en tant que telles.
En ajoutant
role="dialog"
on permet au lecteur d’écran de passer en mode application. Sur des boîtes de dialogue modales comme sur des boîtes d’alerte modales cela sera demandé. Le lecteur d’écran va agir comme dans une application à l’ouverture de la modale :- Annoncer l’ouverture de la modale,
- Lire automatiquement son titre (grâce à
aria-labelledby
ouaria-label
), - Lire automatiquement son contenu (grâce à
aria-describedby
), - Permettre l’utilisation des boutons de validation et/ou d’annulation.
Ni plus, ni moins.
Le comportement n’est plus celui d’une page web, mais celui d’une fenêtre modale système.Toutefois, dans une popin comme décrite sur cette page, nous pouvons potentiellement afficher plusieurs éléments de natures différentes :
- Des champs de formulaire,
- Des vidéos,
- Des liens,
- Des contenus avec des images, des titres, du texte,
- Etc.
Ainsi, l’utilisateur pourra/devra lister des titres, naviguer de lien en lien, naviguer de bouton en bouton, lire du texte, en sélectionner, etc.
S’il est en mode application, il n’aura plus du tout ces possibilités, c’est pour cette raison que nous n’utiliserons pas dans ce casrole="dialog"
, pour permettre de conserver les options de navigation habituelles à une page web.Je pense qu’il peut être intéressant que nous ajoutions une petite capture d’écran en introduction de chaque composant pour bien percevoir les différences. Nous le ferons prochainement.
Encore merci pour tes commentaires constructifs.
Bien à toi,
Sébastien.
-
Ajouter un commentaire
Mises à jour
- 28/08/2024
- Mise à jour mineure.