Malgré tout, il est important de savoir que dans le cas d'une image cliquable, les sprites ne sont pas utilisables !
En effet, utiliser les sprites avec un lien de type image et non texte reviendrait à avoir un lien vide :
Code : HTML | <a href="mapage.html"></a>
|
Sur ce code, on appliquerait nos backgrounds et l'effet de positionnement au survol. Mais créer un lien vide en HTML n'est pas une bonne chose, pour des questions d'accessibilité.
Mais pourquoi ? Comme on le stylise en CSS, on peut quand même le voir et cliquer dessus, non ?
Certes, mais songez que certains internautes sont contraints de naviguer avec l'affichage des CSS désactivé, ou des lecteurs d'écrans. C'est le cas des personnes malvoyantes. Pour eux, le résultat sera sans appel : un lien vide qui n'affiche rien, et qui n'est donc pas cliquable. En conséquence, il devient impossible de naviguer sur votre site. C'est pour cela qu'il faut utiliser une image dans le HTML.
Mais le problème sera le même avec une image dans le HTML : si un utilisateur est malvoyant, il ne la verra pas !
Et c'est là le rôle de l'attribut
alt, qui est obligatoire dans la balise
<img />. En effet, dans le cas où une image ne serait pas chargée pour une raison ou une autre (erreur de connexion, lecteur d'écran...), c'est la description contenue dans l'attribut alt qui sera affiché ! Ainsi, le lien reste toujours cliquable. Pensez donc toujours à remplir cette balise consciencieusement.
Maintenant, un cas pratique, et une solution !
Nous allons reprendre notre image du début :
Ainsi que notre code du début :
Code : HTML | <ul class="icone">
<li class="icone-1"></li>
<li class="icone-2"></li>
<li class="icone-3"></li>
<li class="icone-4"></li>
<li class="icone-5"></li>
<li class="icone-6"></li>
</ul>
|
Code : CSS | .icone li
{
width: 60px;
height: 60px;
display: inline-block;
background: url("sprite.png") no-repeat;
}
|
Nous allons évidemment devoir apporter quelques modifications. Nous aurons également besoin des images "découpées" des versions non-survolées, afin de les mettre dans le HTML :
Pour commencer, nous allons mettre chacune de ces images (que nous aurons nommées intelligemment) dans notre html, accompagné de liens :
Code : HTML | <ul class="icone">
<li class="icone-1"><a href="twitter.com"><img src="twitter.png" alt="Twitter" /></a></li>
<li class="icone-2"><a href="myspace.com"><img src="myspace.png" alt="MySpace" /></a></li>
<li class="icone-3"><a href="facebook.com"><img src="facebook.png" alt="Facebook" /></a></li>
<li class="icone-4"><a href="wordpress.com"><img src="wordpress.png" alt="WordPress" /></a></li>
<li class="icone-5"><a href="dailymotion.com"><img src="dailymotion.png" alt="Dailymotion" /></a></li>
<li class="icone-6"><a href="rss"><img src="rss.png" alt="RSS" /></a></li>
</ul>
|
Maintenant, dans notre CSS, nous allons simplement placer les versions survolées en background.
Code : CSS 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | .icone li
{
width: 60px;
height: 60px;
display: inline-block;
background: url("sprite.png") no-repeat;
}
.icone-1 { background-position: left bottom; }
.icone-2 { background-position: 20% bottom; }
.icone-3 { background-position: 40% bottom; }
.icone-4 { background-position: 60% bottom; }
.icone-5 { background-position: 80% bottom; }
.icone-6 { background-position: right bottom; }
|
Comme vous pouvez le constater, on place la version "survolée" des images en fond. Si l'on regarde le résultat maintenant, nous verrons juste nos images originales en HTML. Il ne reste qu'à leur dire de se masquer au survol de la souris, pour voir se révéler nos backgrounds CSS !
Code : CSS | /* Masquer les images contenues dans le lien survolé */
.icone a:hover img { visibility: hidden; }
|
C'est tout ! De cette manière, nous avons répondu à la problématique qui se posait, de manière efficace, sans Javascript, totalement fonctionnel pour tout le monde, ceux qui affichent le CSS, et ceux qui ne l'affichent pas !
Variantes
Dans le cas où l'image du dessus (celle en HTML) serait transparente, on peut aussi également masquer/afficher l'image de fond grâce à la propriété
background-position.
Dans son état "normal", on masque l'image en la déplaçant à l'intérieur de son conteneur :
Code : CSS | .icone li
{
width: 60px;
height: 60px;
display: inline-block;
background: url("sprite.png") no-repeat 0 -80px;
/* Ajuster la valeur en fonction de vos besoins */
}
|
Il ne reste donc qu'à appliquer les valeurs de position correcte au survol :
Code : CSS | .icone-1:hover { background-position: left bottom; }
.icone-2:hover { background-position: 20% bottom; }
.icone-3:hover { background-position: 40% bottom; }
.icone-4:hover { background-position: 60% bottom; }
.icone-5:hover { background-position: 80% bottom; }
.icone-6:hover { background-position: right bottom; }
|
De cette manière, le problème de transparence avec les images peut-être simplement résolu !
