Open manuhabitela opened 6 months ago
Merci pour le retour Manu, Nous avions conscience de ce problème mais il est passé à la trappe. Ta PR me semble nickel, nous l'intégrerons dans la prochaine livraison. Je crée un ticket pour la partie doc. 🔥
Après discussion avec l'équipe, l'utilisation de <br aria-hiden=true>
n'est pas forcément la solution que nous recommanderons. En effet, en terme de structure html, le <br>
n'est pas vraiment recommandé dans un contexte de layout. Il serait surement plus judicieux de scinder le contenu dans des sous élements (span par exemple) avec une propriété css permettant le passage à la ligne (display : block).
Par exemple :
<p class="fr-logo">
<span class="fr-logo__row">Intitulé</span>
<span class="fr-logo__row">officiel</span>
</p>
.fr-logo__row {
display: block;
}
Faudrait revérifier mais pour le coup pour l'usage dont je parle je pense que ça ne résout pas le problème ; le lecteur d'écran va voir deux blocs et donc faire une pause en plein milieu.
edit : effectivement au moins avec NVDA en faisant comme ça, ça repart à vocaliser en deux parties.
Faudrait revérifier mais pour le coup pour l'usage dont je parle je pense que ça ne résout pas le problème ; le lecteur d'écran va voir deux blocs et donc faire une pause en plein milieu.
edit : effectivement au moins avec NVDA en faisant comme ça, ça repart à vocaliser en deux parties.
Je n'ai pas testé, mais à priori les span ne vocalisent pas de pause, si ?
Bon c'est un peu overkill et c'est de la micro opti donc pas si grave si c'est pas géré hein, mais bon tant pis je suis lancé :P
NVDA regarde le CSS pour déduire comment vocaliser des éléments donc si, les span peuvent déclencher des pauses.
Le comportement est pas le même suivant les lecteurs d'écrans. J'ai fait une page de test pour donner une idée : https://codepen.io/leimi/pen/bGJqmrL :
En alternative au <br aria-hidden="true">
, un <br role="presentation">
répare le problème pour tout le monde et identifie mieux le pourquoi on l'utilise que le aria-hidden="true"
dans le code. De plus le RGAA a un cas prévu pour ça (à défaut du aria-hidden).
J'ai mis à jour mon code pour utiliser le role plutôt que le aria-hidden.
Bonjour !
Merci @manuhabitela pour cette PR. J’étais aussi tombé sur ce problème, mais il est tombé aux oubliettes.
Je viens de tester la deploy-preview ci-dessus et sur Safari (version 16.6.1) / VoiceOver (version 10) les 2 mots sont désormais "collés", je pense que c’est un problème.
oui bien vu, rajouter un espace avant la balise du br devrait régler le souci :ok_hand:
Bon c'est un peu overkill et c'est de la micro opti donc pas si grave si c'est pas géré hein, mais bon tant pis je suis lancé :P
NVDA regarde le CSS pour déduire comment vocaliser des éléments donc si, les span peuvent déclencher des pauses.
Le comportement est pas le même suivant les lecteurs d'écrans. J'ai fait une page de test pour donner une idée : https://codepen.io/leimi/pen/bGJqmrL :
- VoiceOver vocalise tout bien.
- JAWS s'arrête au saut de ligne avec le code actuel. Et vocalise mal les solutions span+display block ou span+display flex, il semble ne pas comprendre qu'il y a un espace entre les mots et dit "républiqué française".
- NVDA s'arrête au saut de ligne avec span+display block. Et dit aussi "républiqué française" en span+display flex.
- pas testé sur mobile
En alternative au
<br aria-hidden="true">
, un<br role="presentation">
répare le problème pour tout le monde et identifie mieux le pourquoi on l'utilise que learia-hidden="true"
dans le code. De plus le RGAA a un cas prévu pour ça (à défaut du aria-hidden).J'ai mis à jour mon code pour utiliser le role plutôt que le aria-hidden.
Bonjour Emmanuel, merci pour tout ces tests précieux qui aident à faire avancer notre reflexion.
Après en avoir re-discuté avec l'équipe et dans le but de fournir prochainement un correctif serait-il possible de tester également une structure avec les deux <span>
en inline du type :
<p class="fr-logo">
<span>Intitulé</span>
<span class="fr-logo__row">officiel</span>
</p>
et en ajoutant en CSS un retour à la ligne dans un pseudo element sur la classe 'fr-logo__row' :
.fr-logo__row::before {
content: "\000A";
white-space: pre-line;
}
:wave:
Suite à mon retour sur le slack de la communauté voici un commit concernant les logos.
Je recopie ici le message de commit :
Actuellement on utilise des
<br>
dans les logos pour que "République Française" ou autres termes s'affichent bien visuellement.Par défaut, un lecteur d'écran peut avoir tendance à arrêter la lecture après un
<br>
quand on navigue pas à pas. C'est le comportement normal, c'est ce qu'on veut habituellement : il s'arrête pour marquer un passage à la ligne.Cependant ici ça serait mieux que le lecteur ne s'arrête pas, le br étant utilisé uniquement pour l'aspect layout.
Masquer ces
<br>
de l'arbre d'accessibilité permet de rendre la vocalisation plus fluide (plus d'arrêts à cause des br) tout en gardant l'impact visuel.Note : dans certains usages du logo, le problème n'était pas présent (le dom n'est pas tout à fait le même sur un "header minimal" et un "header sans navigation" par exemple). Cependant j'ai trouvé ça pas plus mal de garder cette idée de aria-hidden partout afin que tout copié/collé rapide du DSFR fonctionne.
Si ça vous dit de merger ça, ça serait peut-être intéressant de mentionner pourquoi ce fameux
aria-hidden
est présent dans la partie Accessibilité des composants concernés ?Voici aussi une vidéo montrant la diff avant/après avec NVDA (le problème est aussi reproductible avec JAWS). Pas de son mais une boîte de dialogue affiche ce qui est vocalisé ;)
https://github.com/GouvernementFR/dsfr/assets/221253/48cc6fc2-6eac-421f-88ce-93d56b1db6ac