Je souhaite réaliser un menu horizontal comprenant des boutons de même taille. Malgrès de nombreux essais, je n'ai pas réussi à y parvenir. Existe-t-il une solution à ce problème ?
A l'inverse de la technique décrite dans ce tutoriel, on va donner l'aspect d'un paragraphe à une liste. Le dernier item de cette liste sera de longueur plus importante que les autres. Malgré cela chaque bouton doit avoir la même largeur.
<ul> <li><a href="#">Item 1</a></li> <li><a href="#">Item 2</a></li> <li><a href="#">Item plus long</a></li> </ul>
Le principe est donc de transformer cette liste à puces verticale en liste (sans puces) horizontale. Pour commencer, on va donc déclarer la liste (ul
; list-style-type:none
) sans puces et mettre mes marges extérieures (margin
) et intérieures (padding
) à zéro.
Chaque item (li
) devra néanmoins être légèrement écarté de son voisin, on va donc déclarer une marge droite à 2 pixels (margin-left:2px
).
Vient ensuite le comportement des liens de cette liste (ul li a
). Le display:block
va permettre de ne pas passer à la ligne à chaque item, et pour ne pas qu'ils s'empilent les uns sur les autres, on déclare les différents élément flottants à droite float:left
. Mais comme MSIE ne fait rien comme tout le monde, cet attribut doit être aussi déclaré pour les items seuls.
Reste à déclarer l'aspect du bouton : sa taille (width
) ; sa couleur de fond (background-color
) ; la couleur du texte, son aspect, et son positionnement dans le bouton (color
; text-decoration
; text-align
; padding
) ; l'aspect des bordures (border-width
; border-style
; border-color
).
Et pour fignoler le tout, on définit l'aspect que prendra ce même bouton lors du survol de la souris (ul li a:hover
).
ul { padding:0; margin:0; list-style-type:none; } li { margin-left:2px; float:left; /*pour IE*/ } ul li a { display:block; float:left; width:100px; background-color:#6495ED; color:black; text-decoration:none; text-align:center; padding:5px; border-width:2px; border-style:solid; /*pour avoir un effet "outset" avec IE :*/ border-color:#DCDCDC #696969 #696969 #DCDCDC; } ul li a:hover { background-color:#D3D3D3; border-color: #696969 #DCDCDC #DCDCDC #696969; }
La ligne de séparation <hr />?
Oui, oui, je sais. Ca peut se résoudre avec un petit hack. Mais ce ne change rien à l'aspect des boutons ;)
Pascale - 28-02-2007 - 13:41
je suis sur les css maintenant debutant avetie meci c est que vous etes d un humanisme extaordinaire c est number one merci
Mahy - 16-03-2007 - 21:35
C'est un bien joli compliment! (Mérité.)
Un passant. ;-)
aqb - 18-03-2007 - 12:28
Merci Merci :-)
Mais n'en jetez plus, je vais finir par prendre la grosse tête ! ;-)
Pascale - 18-03-2007 - 13:19
Héhé, sympa l'astuce ;)
k-ny - 19-03-2007 - 22:13
Apparemment sur Internet Explorer 6 et Firefox2.0.2, on n'obtient pas le même résultat: le barre du bas est décalée.
tfe - 28-02-2007 - 12:56