Mammouth du PHP |
2937 Messages
15 août 2008, 21:30
Il existe encore une autre solution, plus poussée, qui va t'économiser de la bande passante et améliorera le confort de l'utilisateur. Cela consiste à fusionner les images, verticalement, et tu aurais le code CSS suivant :
Code : Tout sélectionner
a.image {
/* pareil */
background: transparent url("imageFusionnee") 0 0;
}
a.image:hover {
background: transparent url("imageFusionnee") 50% 0;
} En fait, on décale le fond de sa moitié vers le haut. Comme les deux images sont fusionnées verticalement, on verra la première image, puis la seconde (si elles font la même hauteur).
Il s'agit de la technique dite des "portes coulissantes", qui permet de réunir autant d'images qu'on veut en une seule, l'économie en bande passante s'expliquant par le fait qu'une seule image est chargée.
À noter que l'on peut améliorer la feuille de style et obtenir le changement d'image qu'on obtient au survol lorsqu'on navigue au clavier. Pour cela, il suffit de modifier la dernière déclaration CSS comme suit :
Code : Tout sélectionner
/* La pseudo-classe :focus produit un effet équivalent à la pseudo-classe :hover */
a.image:hover, a.image:focus {
background-position: 50% 0;
/* Pas besoin de reprendre les valeurs de background-color et de background-image,
puisqu'elles ne changent pas */
}
Dans les versions inférieures à la 8, IE n'implémente pas la pseudo-classe :focus ; auquel cas, il faut employer la pseudo-classe :active, qui fera le même effet que :focus pour les versions d'IE précédemment citées :
Code : Tout sélectionner
/* Déclaration CSS équivalente à a.image:focus pour IE jusqu'à la version 7
(IE 8 implémente la pseudo-classe :focus)
déclaration à insérer dans une feuille de style à part appelée au moyen
du commentaire conditionnel <!--[if lte IE 7]><![endif]--> */
a.image:active {
background-position: 50% 0;
}
À noter que, dans cet exemple, il faut que les deux images soient mises côte à côte
horizontalement, étant donné que la valeur qui change est la
première : celle du positionnement par rapport au côté
gauche de l'image. Si les deux images étaient disposées côte à côte
verticalement, c'est la
seconde valeur de background-position (celle du positionnement par rapport au côté
haut de l'image) qui changerait.