Accueil > weblog
- Lire le billet précédent - Lire le billet suivant -
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 :
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 :
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 ?
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 ;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.
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
imgqui sont visés ici, mais ceux avec une image enbackgroundCSS pour lesquels il n'y a pas d'attributalt...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 quelongdesc. Il a deux défauts, en fait :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
altde 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
: 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.