* * * * *

Abonnez-vous !

Innovablog, Le Web oĂą l’Innovation ordinaire : design, ergonomie, interfaces riches, web 2.0, eCommerce,…

  • A propos de l’auteur
  • Archives
  • Contacts
  • 11
    dĂ©c 07
    Catégorie : Design

    Design, CSS : les rollover CSS, un must !



    Les feuilles de style CSS (pour Cascading Style Sheets) sont un outil merveilleux pour tout crĂ©ateur web. Leur puissance est (presque) sans limite, dans le respect des standards du moins. J’initie une petite sĂ©rie (vous me direz encore une sĂ©rie !) sur les feuilles de style et leurs fondamentaux.

    Plus qu’une dĂ©finition qui n’aurait pas de sens, je tenterais de vous proposer quelques bonnes astuces Ă  connaĂ®tre qui pourront :

    • Vous faire gagner du temps dans le process de dĂ©veloppement. La phase de mise en forme reste toujours la plus longue Ă  finaliser dans un projet web.
    • Vous rendre donc plus productif.
    • Faire gagner du temps Ă  vos visiteurs / vos utilisateurs.

    Je vais dĂ©buter par une astuce de mise en forme : le rollover CSS. Il s’agit de faire rĂ©agir une zone en changeant son apparence au survol de la souris, le tout sans Javascript. Les CSS sont lĂ  pour nous aider. C’est une technique proposĂ©e depuis maintenant des annĂ©es mais très largement sous-utilisĂ©e.

    Exemple #1 : cahier des charges

    Dans ce premier exemple nous allons rĂ©aliser un jeu de deux bouton, alignĂ©s verticalement, qui possèderont le mĂŞme Ă©tat au repos mais afficheront une image personnalisĂ©e au survol. PrĂ©cisions : aucun Javascript ne devra ĂŞtre employĂ©. Adieu le onMouseover et autres onBlur…

    La base Html

    Nous appliquerons le style sur une base html très simple : une liste.

    <ul id="menu">
    
    <li id=”item1″><a href=”#”></a></li>
    
    <li id=”item2″><a href=”#”></a></li>
    
    </ul>
    • Par facilitĂ©, chaque Ă©lĂ©ment de liste se voit affectĂ© un identifiant Css (Id).
    • Cet ID pourrait se gĂ©nĂ©rer de façon automatique si l’on gĂ©nère par exemple le menu de façon dynamique, avec quelque chose du genre :
    <li id="item<?php echo $i; ?>">

    Le fichier image utilisé

    L’originalitĂ© de cette mĂ©thode est que l’on va utiliser un unique fichier image pour gĂ©rer les deux Ă©tats : normal et hover.

    Voici le fichier utilisé :

    • Dans cette image, le premier logo servira Ă  l’affichage au repos,
    • Les deux seconds permettront d’afficher les Ă©tats hover.
    • Chaque logo a une hauteur de 72 pixels, pour une image d’une hauteur totale de 216px.

    La mise en forme CSS

    ul#menu li a {
    
    display:block;
    
    width:266px;
    
    height:72px;
    
    background:url(’logo-innovablog-css-rollover.png’) no-repeat 0 0;
    
    border:1px solid #003F64;
    
    }
    • Un display:block permet d’affecter une largeur Ă  l’Ă©lĂ©ment.
    • Le background est appliquĂ© Ă  l’Ă©lĂ©ment anchor.
    • De plus il est appliquĂ© dans cet exemple Ă  un Ă©lĂ©ment commun aux boutons, puique leur affichage au repos sre identique.
    #item1 a:hover, #item2 a:hover {
    
    border:1px solid #F97;
    
    }
    • On matĂ©rialise une bordure de couleur diffĂ©rente sur le hover.
    #item1 a:hover {
    
    background:url('logo-innovablog-css-rollover.png') no-repeat 0 -72px;
    
    }
    
    #item2 a:hover {
    
    background:url(’logo-innovablog-css-rollover.png’) no-repeat 0 -144px;
    
    }
    • On applique Ă  chaque Ă©lĂ©ment de liste son comportement sur le survol.
    • Pour aller “chercher” le bon logo, on se dĂ©cale dans le fichier vers le bas par une marge nĂ©gative de -72 pixels (la largeur d’un logo).
    • De la mĂŞme façon pour l’affichage du second Ă©lĂ©ment, oĂą dans ce cas c’est de 72 x 2 = 144 pixels dont on se dĂ©cale du sommet.

    Le résultat est à voir ici.

    Exemple #2 : cahier des charges

    Nous chercherons toujours à créer un jeu de boutons sans Javascript. La seule différence résidera dans le positionnement des boutons qui sera horizontal.

    Fichier image utilisé

    • Avec cette seconde image, nous allons rĂ©aliser deux boutons diffĂ©rents aussi bien au repos que sur le hover,
    • Le premier bouton sera par exemple bleu et rose sur le hover, le second orange et vert sur le hover.
    • Chaque bouton a la mĂŞme dimension : 149 x 188 px.
    • L’image a une largeur totale de 752 px.

    La différence : la feuille de style

    ul#menu2 {margin:0;padding:0;list-style-type:none;
    
    position: relative;
    
    }
    • Notez ici la position relative du conteneur principal. C’est grâce Ă  celĂ  que l’on va pouvoir positionner horizontalement nos boutons.
    ul#menu2 li {
    
    margin:0 0 5px 0;
    
    padding:0;
    
    position: absolute;
    
    top:0;
    
    }
    • Toujours pour notre positionnement horizontal, les Ă©lĂ©ments de liste auront un positionnement absolut.
    #itemA {
    
    left:0;
    
    width:188px;
    
    }
    
    #itemB {
    
    left:208px;
    
    width:188px;
    
    }
    • Chaque item est positionnĂ© via l’attribut left, le top Ă©tant implicitement Ă  0.
    ul#menu2 li a {
    
    display:block;
    
    width:188px;
    
    height:149px;
    
    }
    • Le display:block permet comme dans l’exemple n°1 de dimensionner l’Ă©lĂ©ment.
    #itemA a {
    
    background:url('logo-innovablog-crea-css-rollover.png') no-repeat 0 0;
    
    }
    
    #itemA a:hover {
    
    background:url(’logo-innovablog-crea-css-rollover.png’) no-repeat -376px 0;
    
    }
    • Pour l’item A, qui sera bleu, la position top:0px left:0px est indiquĂ©e, le picto bleu Ă©tant le premier de l’image.
    • Pour rĂ©cupĂ©rer le hover qui sera rose et donc en troisième position, il faudra se dĂ©caler de 188 x 2 = 376 px.
    #itemB a {
    
    background:url('logo-innovablog-crea-css-rollover.png') no-repeat -188px 0;
    
    }
    
    #itemB a:hover {
    
    background:url('logo-innovablog-crea-css-rollover.png') no-repeat -564px 0;
    
    }

    Le résultat est à voir ici.

    Les avantages

    • AccessibilitĂ© : on rĂ©ussi donc via cette technique Ă  se passer de Javascript. C’est le principal avantage. On y gagne donc directement en accessibilitĂ©.
    • SimplicitĂ© : pourquoi faire en deux images ce que l’on peut faire en une ?
    • PrĂ©chargement inutile : on Ă©vite ainsi tout mĂ©canisme de mise en cache de l’image et de prĂ©chargement. C’est un appel Http d’Ă©conomisĂ©. Quand on sait comment ils sont gĂ©rĂ©s sous Internet Explorer, c’est un avantage indĂ©niable.
    • Economie en taille : une grande image sera gĂ©nĂ©rallement plus petite (en Ko) que deux petites (voire n petites).
    • Moins de code : une seule image sans Javascript c’est aussi moins de code. Et donc moins de ressources utilisĂ©es.
    • Mise Ă  jour / maintenance simplifiĂ©es : un menu complexe ne nĂ©cessitera la modification que d’une image (idĂ©alement le fichier PSD de base). Imaginez un menu complexe rĂ©alisĂ© dans une technique standard qui pourrait embarquer une vingtaine d’images…

    Pourquoi donc s’en passer ? Votre avis m’intĂ©resse !

    Ressources :

    Cet article vous a plu ? Ne perdez plus aucune info : abonnez-vous gratuitement !

    13 commentaires pour “Design, CSS : les rollover CSS, un must !” :

    1. 1
      François M
       | le 11 dĂ©cembre 2007 Ă  14:24  

      Cette méthode pose certains problèmes de clignotement sous IE (en particulier avant la v7) dus à un bug de cache : IE tente continuellement de recharger les images.
      Ce bug apparaĂ®t si l’Ă©lĂ©ment du rollover a un couleur de fond, ou que l’image de fond n’est pas rĂ©pĂ©tĂ©e dans les deux sens, ou qu’elle est positionnĂ©e. D’autre par, le problème peu survenir si la surface de l’Ă©lĂ©ment (en pixels) est infĂ©rieure Ă  2500.

    2. 2
      serial
       | le 11 dĂ©cembre 2007 Ă  17:24  

      C’est une “astuce” que j’avais dĂ©jĂ  vue mais c’est toujours interessant d’avoir un point de vue diffĂ©rent sur des aspects techniques, cela permet de mieux s’approprier les concepts!

      Donc très bon article pour moi :p

    3. 3
      Marie ALHOMME
       | le 12 dĂ©cembre 2007 Ă  18:39  

      Belle initiative, mais si on dĂ©sactive les images, hop plus rien Ă  l’Ă©cran… pour l’accessibilitĂ©, on repassera, donc !
      Par contre, utiliser
      -li- -a- blabla -span-   -/span- -/a- -li- par exemple,
      (ou les - sont des bien sûr)
      permets de placer le span par dessus le texte de lien (pos:absolute, etc), en lui donnant l’image de background (les rĂŞgles de positionnement et de dĂ©placement restent les mĂŞmes bien sĂ»r), et donc quand on dĂ©sactive les images, pouf le texte apparait !
      Ce n’est pas parfait non plus, mais c’est bien plus accessible, rĂ©fĂ©rençable, accessible, etc… :)
      Un exemple sur www.neuf.fr (j’ai bossĂ© dessus, c’est pourquoi je me permets de donner cette url, je suis par contre en train de refaire mon site et ce mĂŞme exemple sera bientĂ´t visible dans la partie pro, si vous prĂ©fĂ©rez…), sans forcĂ©ment tenir compte du reste du code de la page car ce n’est pas le sujet. ;)

      A bon entendeur… :)

    4. 4
      Olivier
       | le 14 dĂ©cembre 2007 Ă  9:40  

      Merci pour toutes vos remarques toutes plus pertinentes les unes ques les autres.

      @François : tu peux être plus précis sur tes 2500 pixels de largeur ?
      @serial : merci ! ;)
      @Marie : bel exemple, merci Ă  toi ! J’ai voulu faire le plus simple possible pour Ă©viter de perdre du monde. Evidemment, on peut complexifier la bestiolle :)

    5. 5
      Damien
       | le 29 mars 2009 Ă  17:58  

      Si j’peux me permettre, cette manière de faire ne permet le roulement que de deux images, position “off” et “over”. La position “on” est dĂ©laissĂ©e… Toujours plus jolie comme effet, lorsque l’on a le bouton “off”, puis “hover” la souris dessus, puis “on” quand on clique :)
      Mais sans javascript activĂ©, c’est cool en effet ^^

    6. 6
      dYp
       | le 12 novembre 2009 Ă  23:31  

      j’ai fait un essai et youpi !!! le site de mon frère http://www.echopromotion.com utilise ton tuto et ça fonctionne avec IE8 avec Virtualbox et Ubuntu. Ça devrait le faire sous Windows en vrai…
      Le seul dĂ©faut c’est que l’image n’est pas entièrement cliquable sous un seul navigateur: IE !!! :(
      heureusement je suis avec une Ubuntu dans le PC. :)

    7. 7
      Greg
       | le 3 dĂ©cembre 2009 Ă  22:08  

      Bon article merci !
      J’en ai moi-mĂŞme Ă©crit un ici :
      2 façons de mettre en cache le JavaScript, CSS et Image simplement (L’utilisation du cache de votre navigateur optimise le temps de chargement des pages d’un site) ici : http://bit.ly/6Y2l3k

    8. 8
      [PiX]
       | le 27 dĂ©cembre 2009 Ă  2:18  

      Salut et merci !
      Super tutos, ils m’aident très souvent !
      Mais ici, lorsque j’arrive a changer mon “background” en rollover, le lien disparait ! Enfin, plus de lien Ă  cet endroit, ni de pages qui s’ouvre… Que faire ?
      Merci d’avance ;)
      [PiX]

    9. 9
      marpa
       | le 3 fĂ©vrier 2010 Ă  7:35  

      ta technique semble intĂ©ressante… mais j’ai pas bien compris comment tu la mettais en application.
      j’ai essayĂ© de comprendre sur ton site mais je me suis un peu perdu dans la masse des css ;p
      tu pourrais dĂ©tailler comment tu appliques l’effet Ă  ton span.

      merci d’avance

    10. 10
      Olivier Favre
       | le 7 fĂ©vrier 2010 Ă  11:22  

      @[PiX] : comment ça plus de lien ? La balise href disparaît ?
      @marpa : le plus simple, affiche le source de la page de démo (http://innovablog.com/wp-content/files/2007/12/css-rollover-css-02.html). Le CSS présent est uniquement celui qui concerne notre exemple.

    11. 11
      marpa
       | le 7 fĂ©vrier 2010 Ă  15:21  

      en fait j’avais cliquez sur “rĂ©pondre” du message de Marie ALHOMME.
      ton code est très bien et compréhensible, mais la remarque de marie est intéressante.
      pour augmenter l’accessibilitĂ©, il est important de penser aux gens naviguant sans images. ceux ayant encore des connexions bas dĂ©bit, notamment dans des pays dits “dĂ©favorisĂ©s”, ont tendance Ă  naviguer comme tel vu la lourdeur de la plupart des sites actuels !
      hors si on dĂ©sactive les images, les backgrounds disparaissent et c’est très dommageable quand c’est le menu de navigation !
      sa technique semble résoudre ce problème : ajouter des span (avec le background appliqué dessus) qui viennent couvrir le texte du lien, qui lui apparait quand les images sont désactivés.
      j’ai essayĂ© de le faire mais je n’y arrive pas et le css de Marie (css de pouipouidesign.net) est tellement complexe que je n’arrive pas Ă  voir comment elle fait !
      si quelqu’un voit comment faire je suis preneur !

      en tout cas encore chapeau pour ton tuto il est bien clair et m’a bien servi… merci ;p

    12. 12
      Max
       | le 7 avril 2011 Ă  11:07  

      Thanks ;)

    13. 13
      H-raf
       | le 5 octobre 2011 Ă  13:32  

    A vous de jouer ! Laissez un commentaire :

    XHTML: Vous pouvez utiliser ces tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

    Innovablog motorisé par WordPress
    Theme Wordpress par Olivier Favre
    Site Map
    RSS Feed
    Contenu intégralement sous licence Creative Commons