RECHERCHER

BOURSES & MARCHES

Nasdaq -0.14 %

Or 1.43 %

Petrole (NY) 2.18 %

Tous les cours


ANNUAIRES

 
 PRATIQUE CLIENTS WEB 
Créer des images réactives sans JavaScript
 
En exploitant les possibilités des CSS, un rollover sur une image peut se construire de manière plus propre et accessible qu'avec un script. (09/11/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Avec la disponibilité des feuilles de styles sur toutes les plates-formes des navigateurs modernes, il devient possible pour le développeur Web de mieux maîtriser le fonctionnement des sites. Le support de CSS 2.1 devient aujourd'hui une ubiquité, et avec lui vient la possibilité de soulager le navigateur de codes JavaScript lourds en temps de traitement, en les remplaçant par des règles CSS bien choisies.

Les images réactives, ou rollovers, font partie des bénéficiaires de l'avènement des CSS. Pour commencer, les pseudo-classes de CSS, à commencer par :hover, permettent de mettre en place une simple variation de couleur ou de forme, ce qui est suffisant pour des liens textuels.

#nav a { color: #fff; background: #000; }
#nav a:hover { color: #ddd; background: #666; }


Mais en combinant les pseudo-classes de CSS avec les règles de placement d'image, on peut facilement recréer le fonctionnement d'un rollover JavaScript, en améliorant du même coup l'accessibilité, l'usage de la bande passante et la maintenabilité du code.

L'idée reste d'utiliser un élément IMG, mais de n'y introduire qu'une image vierge (GIF ou PNG transparent), l'image elle-même étant prise en charge par la règle background-image de CSS. L'image transparente pourra ne faire qu'un pixel en tout et pour tout : la place occupée par l'élément IMG sera également gérée par CSS.
  1. <a id="accueil" href="index.html"><img src="piskel.png" alt="Accueil"></a>
  2. <a id="apropos" href="apropos.html"><img src="piskel.png" alt="A propos"></a>
  3. <a id="contact" href="contact.html"><img src="piskel.png" alt="Contact"></a>
La CSS fera ainsi la part belle à background-image, ou plus simplement background :

#nav a img {
  height: 150px; width: 50px; border-width: 0;
  }
#nav a#accueil img {
  background: url(accueil.png) top left no-repeat;
  }
#nav a#apropos img {
  background: url(apropos.png) top left no-repeat;
  }
#nav a#contact img {
  background: url(contact.png) top left no-repeat;
  }
#nav a#accueil:hover img {
  background: url(accueil-survol.png) top left no-repeat;
  }
#nav a#apropos:hover img {
  background: url(apropos-survol.png) top left no-repeat;
  }
#nav a#contact:hover img {
  background: url(contact-survol.png) top left no-repeat;
  }


Ainsi, au survol, l'image de fond (donc celle visible) sera remplacée par une autre, occupant le même espace (ou pas, au besoin).

Seul souci possible, le temps de chargement. Tel quel, le code ne précharge pas la seconde image d'un élément (celle "de survol"), aussi lors de ce survol, il y a un risque de devoir trop attendre que cette image se charge. L'une des solutions consiste à cacher en haut de la page les images de survol :
  1. <img src="accueil-survol.png" style="display:none;" alt=""/>
  2. <img src="apropos-survol.png" style="display:none;" alt=""/>
  3. <img src="contact-survol.png" style="display:none;" alt=""/>


 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page
 
 



 
 
Nos autres sites Société | Mentions légales | Contacts | Publicité | PA Emploi | Presse | Recrutement | Tous nos sites | Données personnelles
© Benchmark Group, 69/71 avenue Pierre Grenier. 92517 Boulogne Billancourt Cedex