Afficher un titre sous la forme d'une image en CSS
Par Djeepy1 le mercredi 30 mai 2007, 10:11 - ASP.NET - Lien permanent
Tout développeur de site web a été confronté à cette problématique et la réponse technique que l'on rencontre dans 99% des cas est de mettre un tag <img />. Cela répond certes à la problématique mais ce n'est en aucun cas bulletproof[1] et ne respecte pas les rudiments du web design.
En effet, les moteurs de recherche ne considèreront pas comme pertinente l'information, les outils d'accessibilité risquent d'être perdus et votre code HTML peut devenir vite inmaintenable avec cette forme de conception. Comment faire pour palier à ces problématiques ? Un webdesigner vous répondra : CSS biensur ! Et je ferai la même réponse.
Repartons du début :
- Toujours commencer par trouver la sémantique correcte. Pour un titre, on met un tag <h1/> (ou h2, etc.)
- on met le titre de façon TEXTUELLE pour être compris par les
outils donc
<h1 id="maintitle">ici mon super titre</h1> - l'image est décorative donc on la met dans le style.
Dans votre CSS, vous aurez
#maintitle { background:url(title.gif) ; } - à ce stade, tout semble correct sauf que le texte apparait au dessus de l'image, il faut donc le faire disparaître. Il existe 2 solutions.
- 1ère solution (la plus élégante) : mettre un tag
dit technique pour faire disparaître le texte. Le HTML devient
<h1 id="maintitle"><span>ici mon super titre<span></h1>.
Ensuite, il suffit de faire disparaître le <span> en CSS :#maintitle span {visibility:hidden[2] ;}
Attention : vous aurez certainement des problèmes de padding à régler. - 2ème solution (à proscrire mais bon) : on a pas besoin du span et on décale
le texte pour le faire sortir de la fenêtre
#maintitle { text-indent:99999px; }
[1]: j'adore ce terme et vous le trouverez souvent dans mes
propos (au même titre que le très fameux : "ça poutre")
[2]: on peut utiliser un display:none mais la taille du
rendu du h1 devient minuscule (voire invisible); visibility:hidden
permet de garde la taille que le texte aurait pris




