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 -

Mettre un titre en image et rester accessible

Par Laurent Denis, le 19 août 2004.

Comment gérer un titre en image, par exemple un logo de site placé dans un titre h1, tout en restant accessible ? Petit inventaire rapide des solutions classiques, avec ou sans CSS, proposition d'une nouvelle méthode CSS et [mise à jour 2004-08-21] limites inhérentes aux techniques CSS... [/mise à jour]

Une fausse querelle

Il n'y a pas lieu de trancher la pseudo-alternative entre :

  • placer son logo en (X)HTML) sous la forme <h1><img src="..." /></h1> ;
  • ou placer l'image en background CSS d'un titre du type <h1>...</h1> (ou d'un autre élément du type div ou p).

En effet, l'une et l'autre techniques répondent à des besoins ou des contraintes différentes, et toutes deux sont également valides. Une image de logo peut tout à fait avoir sa place dans le contenu (X)HTML (logo d'une entreprise en page d'accueil, par exemple) ou avoir un rôle plus décoratif relevant de la seule présentation (Rappel graphique dans le reste du site). Y voir une question de sémantique relève simplement de l'abus de langage... et de sémantique !

En revanche, le choix ne doit pas ignorer les impératifs d'accessibilité.

Logo en (X)HTML

L'image étant directement inclus dans le code (X)HTML de la page, la seule contrainte d'accessibilité est de renseigner correctement l'attribut alt de img afin de donner un équivalent textuel explicite pour les navigateurs et medias non graphiques (navigateurs textes, lecteurs d'écran, moteurs de recherche, traducteurs automatiques, etc.). On écrira donc :

<h1>
   <img
      src="logoclip.png"
      width="300"
      height="100"
      alt="Blog &amp; Blues" />
</h1>

ce qui donnerait ici :

Blog & Blues

Notons que ceci ne pose aucun problème dans un navigateur graphique lorsque l'image ne peut être téléchargée pour une raison ou une autre, puisque l'équivalent textuel sera alors affiché :

Blog & Blues

Nous allons voir qu'il n'en est pas de même pour les solutions qui suivent.

Logo, span et CSS : la FIR et ses variantes

Dans cette approche rendue fameuse par Douglas Bowman, la source (X)HTML ne contient que l'intitulé du titre, placé dans un élément span :

<h1>
    <span>Blog & Blues</span>
</h1> 

Ce span permet de masquer le texte dans les navigateurs graphiques à l'aide des propriétés visibility ou display, tout en gardant visible l'image d'arrière-plan définie par background :

h1 {
  background-image:url(/images/logoclip.png);
  background-repeat:no-repeat;
  height:100px;
  }
span {display:none;}

Le résultat serait ici :

Blog & Blues

Tous les medias non graphiques devraient ignorer la feuille de style et restituer le contenu du span... Mais en réalité, la plupart des lecteurs d'écrans actuels ont un comportement non conforme qui leur fait tenir compte d'une feuille de style destinée à l'écran, et appliquer fréquemment les propriétés display: none aussi bien que visibility: hidden. Le procédé aboutit donc à l'inverse de l'effet recherché, puisque l'intitulé textuel du titre disparaît tout autant que l'image dans Jaws ou IBM Home Page Reader (Voir à ce sujet les tests de Bob Easton). En outre, en mode 'Lecture des en-têtes" (navigation à travers les titres de la page), IBM Home Page Reader identifie bien la présence d'un titre, mais n'a aucun contenu à lire : il lit alors en guise de titre le contenu immédiatement placé à sa suite. Notre titre disparaît également en mode "speak selection dans Opera 7.60" ...

On a donc cherché, et trouvé, des variantes de cette technique, en jouant sur d'autres propriétés CSS (margin, text-indent, etc.) pour masquer le contenu du span dans les seuls navigateurs graphiques.

La plus éprouvée à ce jour semble être la méthode de Paul Bohman, consistant à déplacer le span hors de la zone de visualisation et à le réduire à une taille minimale pour plus de sécurité. D'où une accumulation de propriétés CSS afin de couvrir le plus large éventail possible de navigateurs :

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

ce qui donne ici :

Blog & Blues

On voit parfois reprocher à ces techniques d'arrière-plan CSS l'ajout du span qui ne serait pas sémantique (sic). En fait, il est utilisé ici exactement tel qu'il est défini par la spécification CSS2, à savoir :

Authors may use these elements in conjunction with style sheets, the lang attribute, etc., to tailor HTML to their own needs and tastes.

Si ces solutions sont donc tout à fait légitimes, il est cependant possible, par souci d'élégance, d'en cherche une autre, qui ne requiert aucun élément HTML supplémentaire.

Une nouvelle solution : le logo clipé en CSS ?

Nous allons utiliser la propriété CSS2 clip, qui permet de rogner la zone de visibilité d'un élément placé en position absolue. Le contenu (bordures et padding compris) est toujours présent à l'écran, mais n'apparaît que dans les limites d'une zone de visibilité rectangulaire, dont les coordonnées sont définies par la règle clip: rect(top, right, bottom, left. Voici le code nécessaire :

#logoclip {
position: relative;
height: 100px;
}
#logoclip h1 {
background-image: url(logoclip.png);
background-repeat: no-repeat;
background-position: top left;
padding-left: 300px;
position: absolute;
clip: rect(auto, 300px, 100px, auto);
height: 100px;
}

<div id="logoclip">
    <h1>Blog & Blues</h1>
</div>
  • Une div id="logoclip" est utilisée ici pour gérer le positionnement absolu du titre h1 localement, et non dans la fenêtre d'affichage du navigateur. Selon votre CSS spécifique, sa propriété position:relative peut être attribuée à tout autre conteneur immédiat du titre (son élément parent, typiquement une div id="header"). Il est également possible d'omettre ce conteneur, et de placer alors le titre h1 directement en position absolue dans la zone de visualisation du navigateur... Voir sur ces variantes quelques tests de titre clipé réalisés sur des sites existants ;
  • Le titre h1 est affecté de l'image de logo en arrière-plan ;
  • Mais son contenu textuel est décalé vers la droite de la largeur de l'image par le padding-left: 300px; afin de placer côte à côte l'image et le texte ;
  • Il ne reste alors qu'à rogner la zone de visibilité pour se limiter à l'image (partie gauche) et masquer le texte (partie droite). Pour cela, nous laissons la valeur auto à left et top dans clip: rect(auto, 300px, 100px, auto), et nous prenons les dimensions de l'image (300 x 100) comme valeurs respectives de right et bottom.

Nous obtenons ici :

Blog & Blues


Le résultat est incorrect dans Internet Explorer 6.0 Windows en mode de rendu CSS Strict (Il est correct en revanche en mode Quirks). IE6.0 Win affiche cette partie de notre page sous la forme :

Copie d'écran dans IE6.0 Win: le texte n'est pas clipé

En effet, IE6 Win a la particularité de n'accepter la syntaxe la plus correcte de clip qu'en mode Quirks, et d'ignorer le clip ainsi rédigé en mode Strict. Heureusement, trois solutions s'offrent pour y remédier :

  • N'employer que la syntaxe clip: rect(auto 300px 100px auto), comprise par IE dans les deux modes de rendus (ainsi que par les autres navigateurs). Elle est formellement valide en CSS2, mais déconseillée par la future CSS2.1 et donc non assurée d'être supportée par les navigateurs à venir ;
  • Placer vos pages en mode Quirks dans IE6.0 Win avec la DTD HTML appropriée (<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> en particulier), ou un prologue XML en XHTML... ce qui n'est pas toujours souhaitable par ailleurs ;
  • Ou bien recourir à une astuce CSS consistant à doubler la règle clip sous la forme :
    clip: rect(auto 300px 100px auto);
    clip: rect(auto, 300px, 100px, auto);
    
    • IE6.0 Win en mode Strict ne lira que la première règle et ignorera la seconde ;
    • IE6.0 Win en mode Quirks, ainsi que les autres navigateurs testés (Opera 7.5x, Mozilla, FireFox, Safari, IE5 Mac, IE5.x Win) acceptent actuellement les deux règles ;
    • Les navigateurs à venir respectant la future spécification CSS2.1 ne liront que la seconde règle.

Avec cette double syntaxe, nous obtenons le résultat recherché (à voir dans IE6 Win) :

Blog & Blues


Cette solution a été testée avec succès dans Jaws et IBM Home Page Reader.

Limites inhérentes aux méthodes CSS

Il est donc apparemment possible de rendre un texte mis en image d'arrière-plan CSS accessible aux utilisateurs de lecteurs d'écran. Mais plusieurs facteurs d'inaccessibilité subsistent pour d'autres utilisateurs :

  • En premier lieu, il faut noter que, contrairement à l'inclusion directe de l'image dans le contenu HTML, toutes les méthodes ci-dessus reposant sur un texte masqué et un arrière-plan CSS ont un défaut commun : rien ne s'affiche dans un navigateur graphique supportant CSS2 (celles-ci étant activées), si la source de l'image ne peut être téléchargée, pour une raison ou une autre (ou si l'affichage des images est désactivé)...

    Par exemple, un nouveau logo ou titre Blog & Blues est présent sous ce paragraphe, mais avec un appel à une image absente sur le serveur :

    Blog & Blues
  • En second lieu, ces images en background CSS seront fréquemment ignorées lorsque l'utilisateur modifie les propriétés d'arrière-plan dans la configuration de son navigateur, ou grâce à une feuille de style "user". Ce peut être le cas d'utilisateurs à la vision seulement réduite, ou affectés de daltonisme, ou qui agissent ainsi simplement par goût personnel.

    Les utilisateurs et les navigateurs graphiques ont alors des comportements variés. Pour donner un exemple simple, Internet Explorer 5.x et 6.0 Win masquent les images d'arrière-plan CSS lorsque l'option Ignorer les couleurs spécifiées sur les pages Web est cochée dans les options d'accessibilité. Dans ce cas, le résultat est similaire à l'exemple ci-dessus, et le contenu textuel est invisible.

Conclusion

  • Si votre logo est partie intégrante de votre contenu, placez-le directement dans un élément img du titre h1, mais renseignez son titre alt ;
  • Si votre image relève de la présentation et de l'arrière-plan CSS, n'utilisez pas la méthode du display: none ou du visibility: hidden, qui ne seront pas accessibles dans les lecteurs d'écran actuels ;
  • Optez pour la méthode de Paul Bohman ou celle du logo clipé, selon votre souhait en matière d'économie de code HTML.
  • Sachez qu'une image en arrière-plan CSS n'aura aucun équivalent accessible au moins pour certaines catégories d'utilisateurs. Pour reprendre les termes de Paul Bohman :

    La libre personnalisation par l'utilisateur est un concept important que les personnes handicapées ont longtemps réclamé. Ils ont à présent cette liberté (ou tout au moins de larges parts de celle-ci, car il y a encore à faire de ce côté), et elle doit être respectée.

    Les utilisateurs peuvent supprimer les images, ils peuvent changer le style de police, linéariser le texte, appliquer leur propre feuille de style, convertir le document dans d'autres formats... En bref, il peuvent "ruiner" votre design de toutes les façons possibles et imaginables.

Trackbacks

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

Commentaires

Gloom, le 19 août 2004

Avis, sur ce qui pour moi* n'est pas tant que ça "une fausse querelle":

D'un point de vue éthique, je* trouve que "cacher le texte" en css n'est pas une bonne chose, même si c'est tout à fait valide. C'est pour ça que je préfère largement le <h1><img ... alt="..." /></h1>

Par ailleurs, si** les moteurs de recherche évolue, vu qu'il ont tendance à black-lister les sites qui par exemple mette des mots clez en utilisant la couleur de fond comme couleur du texte, à partir du moment où les moteurs de recherche s'interresserons au CSS, il y a des chanse pour qu'un texte caché en CSS ne soit pas prise en compte voir entraine un black-listage, bien sûr, ce n'est pas pour tout de suite, mais, ça pourrais arriver, et, ce serais même logique, l'attribut alt d'une image n'entraine pas ce risque.

Enfin, mettre une image en "dure" dans le code html me* semble plus propre.


Concernant la méthode du logo clipé, ça fait bien beaucoup de code comparé à <h1><img ... alt="..." /></h1> !

*: Avis purement subjectif.
**: scénario qui pourrais sembler fantastique, mais qui me* semble très plausible.

Laurent Denis, le 20 août 2004

Gloom, une question toute simple : pourquoi le display:none et l'invisibily:hidden existent-ils ?
Il faudrait cesser de parler "d'éthique"... là où il n'y en a pas smiley clin d'oeil
Il y a en revanche des choix personnels, ce qui est tout à fait différent.

goetsu, le 20 août 2004

Pour les technique de remplacement de titre qui marche tres bien voir
www.mezzoblue.com/tests/r...

Mais ta technique pourrait y etre ajouté

Raphael Goetter, le 20 août 2004

Juste une petite faute en passant dans le premier mot du titre : "mette".

Laurent Denis, le 20 août 2004

@goetsu > Et il existe encore d'autres variantes que celles recensées par Dave Shea (lesquelles ne "marchent" pas toutes très bien, d'ailleurs, comme celui-ci l'indique dans sa page)...

Mais l'idée, ici, est simplement:

- de ne pas devoir passer par un balisage supplémentaire type <span> vide (méthode de Gilder/Levin) ou <img> transparente (1ere méthode de Radu);

- d'utiliser une propriété spécifiquement faite pour masquer du contenu, et non une marge (2e méthode de Radu) ou un text-indent (méthode de Phark) repoussant le contenu hors de la zone de visualisation...

Ceci uniquement dans un souci d'élégance : les autres techniques sont bien-sûr tout aussi valides.

Talou, le 20 août 2004

Dans le même esprit que le top:-xxx, on a text-indent:-xxx

Pas très connu, celui-là.

Laurent Denis, le 20 août 2004

@Talou > Sais-tu que tu viens d'inventer sur ton site une nouvelle méthode pour cacher du contenu aux navigateurs ? Omettre deux balises </script> dans l'en tête de sa page :D
(C'était involontaire, je suppose)

Raphael Goetter, le 20 août 2004

Talou > text-indent ne fonctionne pas sur les anciens navigateurs comme IE5 par exemple smiley triste

Laurent Denis, le 20 août 2004

@Raphael > Le text-indent négatif marche sous IE5.0 et IE5.5, mais à condition de mettre une valeur suffisamment élevée (5000px par exemple)

Titus, le 20 août 2004

Très bon article mais est-ce que cette technique fonctionne avec des images transparentes ? (C'est tout mon problème actuellement...)

Laurent Denis, le 20 août 2004

Faisons un test sommaire (un png avec transparence) :

Test

Si je ne casse pas mon commentaire, avec ça... smiley clin d'oeil

[edit]Bon, rien n'est cassé, après un petit rappel à l'ordre de la part de la feuille de style générale de cette page... Le code du test "life" ci-dessus est donc :

<div style="position: relative; height: 100px; background-color: #3b5e8a">
<div style="background-image: url(/images/logocliptransparent.png);
 background-repeat: no-repeat; background-position: top left;
 padding-left: 100px; position: absolute;
 clip: rect(auto 100px 100px auto); clip: rect(auto, 100px, 100px, auto);
 height: 100px;">Test</div>
</div>

[re-edit]: zut, j'avais oublié le hack pour IE... Corrigé.

En revanche, j'ignore si c'est ce que tu avais en tête ?

goetsu, le 20 août 2004

cela dit quelque soit la technique le probleme indiqué sur la page de mezzoblue avec ou sans span supplémentaire reste présent.

Si on a les css activés mais les images désactivés ont a rien d'afficher

Moz, le 20 août 2004

Pardon, mais les css activé et les images désactivées, c'est un peu idiot !

goetsu, le 20 août 2004

je ne vois pas en quoi c'est idiot je connais même plusieurs personne qui utilise cette config, ex: faible débit de connexions ou certain mal/non voyant

Laurent Denis, le 20 août 2004

Disons que c'est une configuration qui n'est pas fréquente, mais dont il faut tenir compte.

Une question, à ce propos : Jaws dépendant étroitement d'IE pour la lecture de la page, les alt des images sont-ils lus lorsque l'affichage des images est désactivé ?
(Si ma mémoire est bonne, la réponse est non, et dans ce cas de figure, la solution de l'image directement en HTML n'est pas plus accessible à ce lecteur d'écran que celle des CSS.)

Raphaël Wils, le 21 août 2004

Il y a aussi cette méthode en javascript :
www.quirksmode.org/dom/fi...

Titus, le 21 août 2004

@Laurent : merci c'est ce que je voulais savoir, si on voit le "Test" affiché

@goetsu : merci aussi je me suis toujours demandé pourquoi on devait se soucier d'une telle configuration smiley sourire

goetsu, le 21 août 2004

Pour ce qui est de jaws il n'est pas dependant de IE c'est homepage reader qui est une surcouche d'IE.

Quand au image en dur dans le code jaws lit le code et donc le alt qu'elle soit affiché ou non

La solution donné par raphael que je connaissais dejà est à mon avis la meilleur et un merveilleux exemple que le javascript peut etre utile et accessible quand il est bien codé (lire le dernier article de pompage à ce sujet)

Laurent Denis, le 21 août 2004

@goetsu > Hum... Jaws est un synthétiseur vocal, qui exploite les données fournies par les applications qu'il supporte. Jaws n'accède pas aux pages Web (ce n'est pas un navigateur). Il exploite le code HTML CSS fourni par le navigateur, c'est à dire IE... Bref, c'est une surcouche.

Pour le javascript... il est accessible... avec le support du javascript smiley clin d'oeil

Il est vrai que la technique de PPK citée par Raphaël est prometteuse dans ce cadre, mais elle n'a à ce jour aucun retour sur l'accessibilité...

goetsu, le 22 août 2004

oui mais jaws marche sur d'autre naviguateur que IE contrairement à homepage reader.

Ce javascript est accessible dans le sens ou lorsqu'il y a le script toute reste accessible et quand il n'y a pas tout reste accessible quand meme (moi j'ai testé avec jaws). Bref il n'apporte que des plus.

Laurent Denis, le 22 août 2004

Je vais regarder de plus près la solution javascript dans d'autres medias...
Au fond, je ne me défends pas d'un a-priori stupide sur javascript, vieux reste de défense sur la javascript de naguère smiley clin d'oeil

littlesam, le 12 janvier 2005

Mettre l'image en <img /> est parfois vraiment une bêtise. Exemple : sur mon site la bannière est verte et le texte (en image pour avoir la bonne font) et blanc. Sans css : blanc sur blanc = illisible. Dans ce cas c'est bien plus malin d'avoir l'image en bg et de planquer le texte :p

Plus généralement si l'image ne réprésente qu'une partie du design une fois séparée des autres images de bg la page sans css est réellement affreuse. Accessible mais ultra moche n'est pas une solution super non plus.

Laurent Denis, le 12 janvier 2005

@littlesam > L'idée globale est plutôt de ne jamais séparer couleur d'arrière-plan et couleur de texte dans deux sources différentes (ici, une image verte et un texte HTML blanc). De même qu'une CSS doit systématiquement préciser background-color et color, un texte en image doit systématiquement comprendre le texte et son arrière-plan.

Vero, le 20 février 2005

Bonjour à tous,
Je me posais cette question et j'aime lorsque c'est simple !
Si j'ai bien compris, globalement :

- Lorsqu'une image détient une valeur informative, il est tout à fait correct de l'insérer en dur dans le code sans oublier de renseigner le alt
- Lorsque l'image est purement décorative, autant la déclarer en background dans le CSS
- S'il s'agit d'une image en background, donner une couleur de fond équivalente à la couleur dominante de l'image pour assurer le contraste avec les couleurs de police.

C'était juste, pour vérification, une reformulation à vocation synthétique ...

Jonathan Cottier, le 25 novembre 2005

Voilà comment je fais pour créer mon titre graphique.

Pour le html :
<h1 id="header"><div id="header"><img src="" alt="Head"/></div></h1>

Pour le css :
h1#header
{
height: 127px ;
margin: 5px 0 0 5px ;
background: url(logo.png) no-repeat ;
}

div#header
{
height: 127px ;
background: url(head.png) no-repeat ;
margin-left: 150px ;
}

div#header img
{
font-size: 0em ;
}

En navigateur graphique l'utilisateur voit le png gràce à la feuille css celui ci est défini en background. Vous remarquerez que j'ai deux images dans mon en-tête, la première est le logo de ma page et est de type background. La deuxième est mon titre, c'est pourquoi je l'ai mise dans une div.

Avec un navigateur qui n'utilise pas la feuille de style, le titre apparait normalement de type h1.

Dites moi ce que vous pensez de cette solution. Est-ce que je me casses la tête pour rien en essayant d'être le plus rigoureux possible en séparant le fond de la forme de cette façon un peu farfelu ?

Je débute en html et en css depuis une semaine, alors n'hésitez pas à ma dire si c'est vraiment pourri comme code. Merci encore de répondre.

Philippe Worontzoff, le 25 novembre 2005

"<img src="" alt="Head"/>"

L'attribut "src" ne peut être vide, c'est donc une erreur. De plus, je ne vois vraiment pas l'intéret d'utiliser une balise img vide pour la remplire dans l'élément parent en CSS, ça n'a aucun sens.

Jonathan Cottier, le 25 novembre 2005

Oui l'attribut src est vide, c'est là que réside le principe de cette solution. Je n'utilise pas img pour afficher une image mais bien pour me servir de son alt car je ne connais pas d'autre balise comme img qui possède cette attribut. Si on fait un truc du genre <h1><img src="le chemin vers l'image" alt="titre"><h1> dans le code html, alors lorsque l'on visionne la page sans feuille de style on a tout de même le titre graphique alors que ce que je souhaite obtenir est un titre non graphique.
Avez-vous essayé ce code juste pour voir ce qu'il fait ?
J'aurais bien aimé mettre des screenshot de ce que j'obtient sur mon site, mais celui-ci est en local et je n'ai aucun autre moyen.

Dites moi si je me trompe mais l'on veut bien avoir une page entièrement graphique et la même en nom graphique qui se suffisent à elle-même en ayant pris soin de séparer la forme du fond. Pour moi ce code rempli son rôle même si il possède une erreur, c'est une erreur fonctionnelle smiley sourire

Laurent Denis, le 25 novembre 2005

Jonathan Cottier : au moins dans les configurations que j'ai testées, différents navigateurs (Opera, IE) affichent le cadre représentant l'image manquante avec le contenu de l'attribut alt, en surimpression sur l'arrière-plan CSS. Ce qui n'est pas des plus heureux smiley clin d'oeil

Le danger des erreurs fonctionnelles, c'est qu'elles rendent très imprévisibles le rendu par les navigateurs, à la différence de ce que les standards Web cherchent justement à fiabiliser.

J'avoue enfin ne pas vraiment voir l'utilité de cette astuce (certes habile) : s'il s'agit de gérer facilement un changement de logo, y compris lié à des styles alternatifs, un simple script serveur s'en chargera aisément. S'il s'agit de placer une image par principe en CSS et non dans le contenu... Pourquoi un logo ne serait-il pas un élément de contenu et non de présentation ? Tout cela me semble de plus en plus devoir être abordé sans aucun souci "philosophique", mais plutôt dans un pur souci d'efficacité : l'image <img...> classique (et non détournée) offre d'indéniables certitudes à cet égard smiley clin d'oeil

Lanza, le 01 février 2006

Philippe > Pour autant que je sache, l'attribut "src" ne peut pas être vide, mais une URL vide fait référence au document en cours. Donc est-ce l'attribut ou l'URL qui est vide ?

Celà dit, il est vrai qu'une image HTML récursive, c'est une idée assez spéciale. smiley sourire

François Helenne, le 24 février 2006

Je suis également à la recherche d'une solution accessible, sémantiquement correcte et élégante pour le remplacement de titre par une image.
Le passage au XHTML 1.1 permet l'utilisation des éléments "ruby".
Selon vous quelquechose du style :
<h1>
<ruby>
<rb></rb>
<rt></rt>
</ruby>
</h1>
peut-il être considéré comme une structure élégante et sémantiquement correcte, et être une bonne piste pour une recherche plus approfondie ?

Laurent Denis, le 24 février 2006

Bonjour,

l'élément Ruby est destiné à un usage bien précis sans rapport avec le remplacement de texte par une image (il s'agit d'annoter un texte de base, pour faciliter en particulier sa lecture dans le cas d'idéogrammes, et non de fournir une alternative textuelle à une image). Son utilisation dans ce cadre ne me semble absolument pas pertinente smiley clin d'oeil

François Helenne, le 24 février 2006

L'élément ruby a en effet cette utilisation (d'après ce que j'ai pu en lire), mais j'ai fait un recoupement avec l'exemple donné sur www.w3.org/TR/2001/REC-ru... où il est utilisé pour définir une date (jour, mois, année, date d'expiration).
Les chiffres sont alors considérés comme des idéogrammes ?

Laurent Denis, le 24 février 2006

Dans le cas de l'exemple en question, les nombres utilisés pour la date nécessitent d'être explicités pour différencier le quantième du jour et le quantième du mois (par exemple, lu à la française, 10-01-2006 est le 10 janvier, mais lu à la mode nord-américaine, c'est le premier octobre...). Il pourrait donc être approprié d'utiliser une annotation via ruby.

Dans le cas d'un texte mis en image, on ne préciserait pas le sens de l'image : on chercherait à lui donner une alternative textuelle. Or:
- celle-ci existe déjà pour l'élément <img> : c'est l'attribut alt qui est prévu pour être pris en compte par les medias non graphiques.
- rien n'indiquerait en revanche à un outil non graphique que le contenu de l'élément <rb> doit être utilisé comme alternative du contenu de <rt>, c'est à dire le remplacer si nécessaire.

La simple désactivation de la feuille de style masquant <rb> suffirait à provoquer l'affichage redondant de l'image et de son équivalenbt textuel, par exemple. Ce qui ne paraît pas approprié.

Autre exemple : la présence de l'alternative dans un élément ruby aurait-elle la moindre raison d'être exploitée par un robot conforme d'indexation d'images, qui, selon la norme, chercherait des attributs alt, regarderait le contenu visé par l'attribut longdesc, ou s'intéresserait éventuellement au contexte textuel de l'image si celle-ci intervient dans un élément <dfn> par exemple ?

François Helenne, le 24 février 2006

Bien que tes arguments soient tout à fait convainquants (et de là je m'aperçois qu'effectivement l'élément ruby ne peut-être la solution), je pensais à une utilisation différente :
<h1>
<ruby>
<rb>Titre</rb>
<rt></rt>
</ruby>
</h1>
, en spécifiant des dimensions identiques aux éléments <rb> et <rt>, et un recalage de l'élément <rt> (avec en fond l'image) sur l'élément <rb>.
- outil non graphique : le titre est visible;
- sans la css : Le titre est visible;
- outil graphique : le titre est caché.

C'est un peu tordu et on y pert sa sémantique avec un élément vide, ainsi qu'une utilisation douteuse de l'élément ruby... Autant utiliser quelquechose ressemblant à :
<h1>Titre<span></span></h1> --> retour à la case départ.

En ce qui concerne l'élément <dfn> je ne le connaissais pas, et en faisant une recherche sur Google, je suis tombé sur ton article sur le sujet.
Il va me falloir un peu de temps pour le digérer smiley clin d'oeil

Mais je pense que la méthode du <span> vide va rester pour moi une solution satisfaisante pour les "productions" prochaines, sans pour autant baisser les bras...

Ben S, le 08 mars 2006

Avant que je ne lise le post "Halte au display:none" (blog.alsacreations.com/20... sur alsacréations, j'utilisais allègrement la méthode du display:none.

Désirant être respectueux de l'accessibilité de mes sites, j'ai commencé par utiliser la méthode suivante décrite par Rémy dans des commentaires à ce post :
<h1>
<img src="mon_image.png" alt="[logo] Ma société" /><span style="display:none">Ma société</span>
</h1>

Je trouve pas ça idiot, mais si on veut appliquer cette méthode aux liens d'un menu par exemple, comme pour toutes les méthodes utilisant une vraie balise <img> pour afficher le logo par exemple, on n'a plus la possibilité d'utiliser la pseudo-classe :hover pour des effets de rollover ni la pseudo-classe :visited...

C'est le problème que je rencontre, pour faire un menu très graphique et c'est à mon avis la seule véritable limite de cette technique qui bien que plus sémantique, rend moins classique (texte barré, couleur différente...) l'effet de :visited pourtant très important en terme d'ergonomie.

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