Plan de site Navigation
Blog & Blues Techniques et Standards de la Qualité Web

Accueil > weblog


- Lire le billet précédent - Lire le billet suivant -

Lecteurs d'écran : cachez ce sein que je ne saurais voir

Par Laurent Denis, le 10 juin 2004.

L'accessibilité d'une page Web fait intervenir différents éléments de contenu apparemment spécifiques. Il s'agit principalement des liens d'évitement de menus et des label de formulaire, voire également des contenus textuels de titres lorsque ceux-ci sont mis en image, des « liens d » complétant ou remplaçant l'attribut longdesc des images, ou encore des diverses indications d'accesskeys, etc. Certains souhaitent alors les masquer dans leur affichage graphique, pour en réserver le rendu aux utilisateurs de lecteurs d'écran. Ce n'est pas si simple qu'on pourrait le penser.

La solution la plus immédiate, et la plus logique en fait, serait l'ajout d'un simple display:none; dans une feuille de style media="screen", donc réservée à l'affichage graphique. Les feuilles de style étant ignorées par les navigateurs textes, et les lecteurs d'écran ne devant prendre en compte que les media all et aural... tout irait pour le mieux dans le meilleur des mondes.

Mais nous ne vivons pas dans le meilleur des mondes, et cette solution n'en est pas une : Jaws, Window Eyes et IBM Home Page Reader, pour ne citer qu'eux, ont une implémentation erronée des CSS qui leur fait le plus souvent appliquer les règles de display:none; et de visibility: hidden. Le contenu prévu spécifiquement pour les lecteurs d'écran se retrouve donc fréquemment masqué dans ceux-ci.

Dans une série de test approfondis, ScreenreaderVisibility, Bob Easton a montré que lorsqu'on cache du contenu dans le rendu graphique sur l'écran d'un PC, on le cache aussi presque toujours aux lecteurs d'écran. Paul Bohman (An Accessible Method of Hiding HTML Content) propose donc une autre solution de masquage CSS, selon lui assurée de ne pas se tromper de cible :

.hidden
{
position:absolute;
 left:0px;
 top:-500px;
 width:1px;
 height:1px;
 overflow:hidden;
}

Si ce code vous semble truffé de redondances, c'est qu'il cumule les précautions pour être sûr qu'aucun navigateur graphique ne rendra visible le contenu masqué par accident :

  • La position absolue déplace le contenu masqué hors de la fenêtre de visualisation du navigateur, en l'expédiant au-dessus de celle-ci (au-dessus, et non quelque-part à gauche ou à droite, ce qui serait selon Bohman moins assuré de succès) ;
  • Si cette première règle échoue, le dimensionnement réduit notre contenu masqué à 1px quasi-invisible (0px masquerait le contenu dans certains lecteurs d'écran) ;
  • Enfin, l'overflow:hidden fait disparaître ce qui émergerait encore, en cas de recouvrement avec le reste du contenu.

Paul Bohman affirme qu'ensemble, ces méthodes fonctionnent dans un large éventail de navigateurs, de plates-formes et de lecteurs d'écran. Il nous propose, exemples de code à l'appui, de les utiliser pour :

  • générer des titres en images via les arrières-plans CSS, le texte du titre restant toujours accessibles aux lecteurs d'écran (ce qui n'est pas le cas notamment dans la très connue méthode de Todd Fahrner) ;
  • masquer les liens d'évitement de la navigation ;
  • ajouter des labels masqués dans un formulaire structuré à l'aide d'un tableau ;
  • ajouter des labels masqués dans une série de champs de saisie associés (saisie d'un numéro de téléphone ou d'un numéro de licence par blocs de chiffres) ;
  • ajouter dans une page des titres ou des indications permettant de mieux s'y repérer depuis un lecteur d'écran (« Menu de navigation » par exemple) ;

En conclusion, cette méthode paraît tout à fait correcte. Mais j'y ferais cependant une réserve sur le fond : y a-t-il autant de cas que cela où il est vraiment justifié de distinguer deux contenus, dont l'un serait réservé aux lecteurs d'écran ?

  • Les formulaires présentés à l'aide d'un tableau doté d'en-tête de lignes et de colonnes en guise de labels... gagneraient à n'utiliser que l'élément label : après tout, ce n'est jamais que l'élément structurel prévu par les spécifications pour étiquetter les éléments de formulaires ;
  • Les titres du type « Menu de navigation » n'ont-ils pas leur place sur nos écrans, avec des intitulés plus habiles sans doute, pour une meilleure ergonomie de la page ?
  • Même les liens d'évitement de la navigation peuvent avoir leur utilité dans un rendu graphique, pour qui navigue à l'aide du clavier ou d'un dispositif spécifique...

Certes, dans le cas des textes mis en image pour les titres, il y a clairement deux contenus distincts. Mais il me semble qu'étendre cette démarche et commencer à distribuer son contenu selon les medias... a quelque-chose d'un peu Tartuffe.

Trackbacks

Les trackbacks pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.

Commentaires

Gloom, le 11 juin 2004

Ca me semble même totalement inutile (c'est ce que je me dis depuis le début de la lecture et j'ai été rassurer de lire la fin), pour les titre en image, il y a l'attribut alt (et éventuellement longdesc).

Mais au fait, qu'est que c'est que des « liens d » ?

Laurent Denis, le 11 juin 2004

Ce ne sont pas les titres en image avec img qui sont visés ici, mais ceux avec une image en background CSS pour lesquels il n'y a pas d'attribut alt...

Le « liens d » est une béquille inventée pour compenser le mauvais support de l'attribut longdesc : un simple lien sous la forme <a href="...">D</a>, situé dans le contexte de l'image, renvoyant sur le même document de description d'image que longdesc. Il a deux défauts, en fait :

  • la plupart des utilisateurs ignorent cette convention et sont plus déroutés qu'autre-chose par un D à côté d'une image ;
  • Ces liens n'ont plus aucun sens hors du contexte de la page (en mode « tous les liens de la page » dans Jaws, par exemple)

Gloom, le 11 juin 2004

Et bien, plutôt que de s'amuser à cacher le texte de façon tordue en css, autant utiliser une image avec img et un attribut alt.

Xanthor, le 12 juin 2004

> Et bien, plutôt que de s'amuser à cacher le texte de façon tordue en css, autant utiliser une image avec img et un attribut alt.

Et si je veux selectionner le text en image ?

Et si je veux changer pouvoir changer l'image par CSS ?

Il y a pleins de cas où un texte sur une image de fond est préférable à une image...

Laurent Denis, le 12 juin 2004

J'ai de gros doute sur l'argument "ergonomique", Xanthor : désactiver la CSS pour faire un copié-collé du texte n'a rien d'intuitif. Et je vois mal les cas concret où j'aurais besoin de changer l'image via CSS (des précisions ? des exemples ?)... Ce que je pourais d'ailleurs déjà faire dans une feuille utilisateur Opera avec une règle content.

En fait, AMHA, le problème est plutôt du côté du navigateur, et non du concepteur : c'est au navigateur de fournir le mécanisme permettant de récupérer la valeur de l'attribut alt de l'image (par exemple en la donnant dans les propriétés de l'image). Ce serait à lui de me permettre d'écraser un contenu HTML, à la limite, si cela s'avérait nécessaire...

Xanthor, le 13 juin 2004

> J'ai de gros doute sur l'argument "ergonomique", Xanthor : désactiver la CSS pour faire un copié-collé du texte n'a rien d'intuitif.

Je n'ai jamais parlé de désactivation des CSS...
Juste une image qui represente uniquement du texte, qui en la surlignant et la copiant, copierait en fait le texte présent en taille 0px par exemple

> Et je vois mal les cas concret où j'aurais besoin de changer l'image via CSS (des précisions ? des exemples ?)

:hover, feuilles de style alternatives...

Laurent Denis, le 13 juin 2004

Juste une image qui represente uniquement du texte, qui en la surlignant et la copiant, copierait en fait le texte présent en taille 0px par exemple : encore faut-il savoir qu'il y a un texte à copier, et donc pour cela désactiver la CSS de la page pour le faire apparaître.

Quant à changer l'image via CSS, je parlais du point de vue utilisateur (feuille de style user). Dans le cas de styles alternatifs, c'est effectivement une limite. Pour le :hover, en revanche, on se retrouve par exemple dans le cas de figure de l'article de Pascale Lambert sur le zoom d'image CSS et les contournements existent pour IE qui pose des problèmes...

Xanthor, le 13 juin 2004

> encore faut-il savoir qu'il y a un texte à copier, et donc pour cela désactiver la CSS de la page pour le faire apparaître.

Non, pas besoin : il suffit que l'image soit juste du texte avec une police spéciale (avec le but avoué de justement reproduire l'apparence d'un simple texte)


Pour le changement d'image par CSS, l'article d'Openweb n'utilise la balise img que parce que l'objet manipulé est une image. Mais dans la plupart des :hover, il n'y a aucune image, sémantiquement parlant.

Les commentaires pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.