Je galère aussi...

Bouton CSS avec effet de rollover (survol)

Posté par Sword dans CSS

Vous souhaitez faire un lien avec une image pour votre menu avec un rollover.
La solution la plus simple au premier abord serait de faire ça en utilisant des balises Javascript telles que OnMouseOver et OnMouseOut.
Cependant tout ceci d’une part n’est pas très valide XHTML et qui plus est si la personne n’a pas activé le JS sur son navigateur, point de rollover (et point de lien d’ailleurs) :S
Pas génial surtout que pour ce genre de chose le JavaScript n’est pas conseillé (enfin moi je limite le js pour ce genre d’usage du moins)

Voyons plutôt une façon de faire en CSS beaucoup plus propre a mon sens.

Le principe est de creer une classe pour une div ou un p qui aura comme background l’image censée s’afficher au rollover. Ca ne parait pas logique certes, mais ca va le devenir très vite car on met sur le lien (balise a) l’image visible quand l’image n’est pas survolé (ou rollout si je puis me permettre ^^). Et on “supprime” l’image en background quand on la survole (a:hover)

Script css

.rollover {
     width: 150px;
     height: 30px;
     background: transparent url(img/lien_rollover.jpg)  no-repeat;
}
.rollover a {
     display: block;
     width: 100%;
     height: 100%;
     background: url(img/lien.jpg) no-repeat;
}
.rollover a:hover { /* masquage de lien.jpg au survol */
     background: transparent none;
}
 

Notez que j’indique la hauteur et largeur (height et width) suivant la taille de l’image utilisée étant donné que nous faisons “un lien vide” comme ci-dessous :

Script html

     <div class="rollover"><a href="#" title="lien"></a></div>
 

Et voilà le tour est joué ;)

Petite démo de ce que cela peut donner :

Après si vous êtes un dosé de W3C et que ca vous ferez mal de faire un lien vide (sachant qu’il est aussi préférable de mettre du texte pour un lien question référencement), deux options s’offrent à vous :

- soit vous ne faites le rollover que sur le fond de l’image et mettez le texte du lien entre les balises <a> </a> mais cette option ne vous permet d’utiliser que des typos basiques

- soit vous ajoutez un texte dans une balise <span> avec un style CSS qui masque ce texte comme nous suggérait Pablo. Ce qui nous donnerez :

Script css

.rollover a span{
     visibility:hidden
}
 

Et pour l’html pas de suprise :

Script html

     <div class="rollover"><a href="#" title="lien"><span>Le nom du lien</span></a></div>
 


Tags : , , , , .
Partager et découvrir : These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Netvouz
  • DZone
  • ThisNext
  • MisterWong
  • Wists

8 commentaires

  1. Anonymous

    Bouton CSS avec effet de rollover (survol)…

    Comment raliser un lien image avec un rollover en CSS de 2 temps 3 mouvements…

  2. pablo

    Très interessant, cependant pour des question d’accessibilité, de lisibilité du code, il est dommage de laisser le lien vide. Je rajouterai quelque chose du genre : Nom du lien

  3. pablo

    merci wordpress de supprimer les codes CSS, il faudrait donc écrire le lien dans le document html avec la propriété visibility hidden

  4. Sword

    Après on peut faire un rollover juste sur l’image de fond et mettre le titre en texte ;)
    C’est vrai que c’est mieux question accéssibilité, lisibilité du code et référencement

  5. SuN

    Simple et efficace, un bon p’tit bout de code!

  6. Denis de Service

    Bonjour, excellent tuto, mais je galère pas mal (c’est pourquoi je suis sur votre site - lol), pour faire la chose suivante :
    je voudrais qu’une fois cliqué, le bouton reste dans le même état que lorsqu’on le survole (dans votre exemple, une fois cliqué, il resterait blanc, et ne redeviendrait pas bleu, pour signaler que le lien a déjà été affiché). Est-ce possible ? Merci.

  7. Sword

    Ce que tu veux c’est qu’une fois qu’on est sur la page vers lequel pointe le bouton, le bouton reste en état survol ?

  8. ChrisG

    Hello !

    Oui on aura peut-être de bonnes surprises ?
    En tout cas safari semble loin devant firefox 3 qui n’est même pas encore sorti !

Donne ton avis