Page 1 sur 1

menu horizontal

Posté : 29 juin 2007, 07:48
par Invité
Bonjour à tous,

J'essaye de créer un menu horizontal avec effet roll over (images).
Ceci fonctionne:
a.menu_item 
{
	background-image:url(../images/bouton_off.gif);
	height: 26px;
	width: 150px;
	display: block;
	margin: 0px;
}

a.menu_item:hover 
{
	background-image:url(../images/bouton_on.gif);
	height: 26px;
	width: 150px;
	display: block;
}
Le problème est le display: block.
Si je l'enlève, plus rien ne marche.
Si je le mets, mon menu fonctionne mais il devient vertical car chaque item est renvoyé à la ligne.

Comment puis-je faire pour garder en même temps un menu horizontal et un effet background image?

Merci pour vos réponses.

Re: menu horizontal

Posté : 29 juin 2007, 08:06
par Calimero
Bonjour,
a.menu_item 
{
	background-image:url(../images/bouton_off.gif);
	height: 26px;
	width: 150px;
	display: block;
	margin: 0px;

        float:left;
        clear:none;
}

a.menu_item:hover 
{
	background-image:url(../images/bouton_on.gif);
}
clear:none; permet aux éléments de type block de s'empiler horizontalement, et float:left; active le "clear" en passant en positionnement flottant (dans le block conteneur).

J'ai aussi enlevé les répétitions dans le :hover car elles sont inutiles (car les deux règles désignent les mêmes éléments, la première est générale et la deuxième correspond à un changement d'état) et gênent la lecture du code.

@+

Posté : 29 juin 2007, 08:50
par Hubert Roksor
Est-ce que le "clear: none" est nécessaire ? Je crois me rappeler qu'il s'agit de la valeur par défaut, donc si aucun autre "clear" n'apparait dans la feuille de style il devrait être redondant non ?

Au passage, pour des rollovers plus efficaces pensez aux "CSS sprites". Un petit coup de Google m'a permis de trouver ce lien : http://css.alsacreations.com/Tutoriels- ... age-unique

Pour résumer, plutôt que d'utiliser une image pour chaque état, on n'utilise qu'une seule image, une sorte de "planche" de tous les états (voire de tous les boutons) et on change l'attribut "background-position" pour afficher la bonne vignette. Par exemple, si le bouton normal (disons de taille 100 x 50) est en haut et le bouton survolé est 50 px plus bas, il faut faire remonter l'arrière plan de 50 px et le CSS ressemble alors à

Code : Tout sélectionner

a.bouton { width: 100px; height: 50px; background: url("img/boutons.png") no-repeat 0px 0px; } a.bouton:hover { background-position: 0px -50px; }
Au passage, cette technique permet un chargement plus rapide et pour peu que tu compresses en PNG il se peut que la planche de 2 ou 3 états soit à peine plus grosse qu'un seul état.