menu déroulant horizontal
Voici un tutoriel qui va vous permettre de faire un beau menu déroulant tout en transparence entièrement en css.
Cette page est un peu longue, j'en convient, mais il est indispensable de bien lire du début à la fin.
L'utilisation de la transparence en css3 avec la notation hexadécimale RGBa va nous permettre de ne pas utiliser d'images pour rendre les cellules de nos menus transparentes.
Et cerise sur le gâteau !
Un menu qui est en plus compatible avec tous les navigateurs !
Oui, oui, j'ai bien tous ! (même IE !)
Enfin presque, car IE6 et inférieur pose problème, il existerait bien des solutions, mais j'en ai marre de IE, alors ben, je laisse tomber IE6 et pis temps pis pour lui ! (na!)
Ce menu a été testé avec IE7, IE8, firefox, google chrome, safari, opéra.
Voir ce beau menu dans votre navigateur !
Quelques explications sur la notation RGBa avant de commencer !
Vous connaissez peut être la propriété opacity, qui permet également de réduire l'opacité !
Seulement on rencontre plusieurs soucis avec cette propriété :
- ne marche pas avec IE6.
- puis l'opacité s'applique à tous ses descendants! C'est à dire, par exemple, que la transparence s'appliquera également à la police et non uniquement au fond !
La notation RGBa permet quand à elle, de n'appliquer un fond de couleur en transparence uniquement à un seul élément.
Comment ça marche ?
Et bien ce n'est pas compliqué ! Vous connaissez déjà surement la méthode RGB qui consiste à donner une valeur pour chaque couleur, je rappelle que RGB veut dire red, green, blue, on donne donc une valeur pour chaque couleur et on obtient ainsi la couleur désiré.
Pour la RGBa, on va rajouté une composante en dernier qui sera compris entre 0 et 1. ( 0.5 étant 50% de transparence )
Le code devient donc :
background-color: rgba(0, 0, 0, 0.5);
Pourquoi se compliquer la vie et ne pas utiliser d'images avec un fond transparent ?
Parce que j'aime bien ça moi, me compliquer la vie !
J'ai voulu faire un menu accessible à tous qui nous dispense d'avoir à faire des images avec un fond transparent et qui permet également d'alléger un peu le chargement des pages.
Ok ! alors allons y !
Tout d'abord nous allons nous occuper de la partie HTML.
Pour mon menu, j'ai choisi de le faire avec des balises de listes, auquel j'ai indiqué des identifiants et des classes.
Dans mes listes <ul><li></li></ul> de premier niveau, j'y ai incorporé une autre liste pour mon sous menu.
Voici ma structure en html :
<ul id="menu"> <li> <a href="#1">Menu 1</a> <ul class="menuderoulant"> <li><a href="#2">sous menu </a></li> <li><a href="#3">encore un sous menu !</a></li> <li><a href="#4">bah ! allez un autre !</a></li> </ul> </li> <li> <a href="#5">Menu 2</a> <ul class="menuderoulant"> <li><a href="#6">sous menu </a></li> <li><a href="#7">et un autre</a></li> <li><a href="#8">encore un</a></li> <li><a href="#9">un autre</a></li> <li><a href="#10">le même</a></li> </ul> </li> <li> <a href="#21">Menu 3</a> <ul class="menuderoulant"> <li><a href="#11">et bin v'la un autre sous menu</a></li> <li><a href="#12">et un autre</a></li> <li><a href="#13">puis un autre</a></li> <li><a href="#14">taratata</a></li> <li><a href="#15">fait beau hein !</a></li> <li><a href="#16">oui mais froid</a></li> <li><a href="#17">jamais content celui-là</a></li> <li><a href="#18">c'est sur</a></li> <li><a href="#19">en même temps</a></li> <li><a href="#20">c'est vrai</a></li> </ul> </li> <li> <a href="#22">Menu 4</a> <ul class="menuderoulant"> <li><a href="#23">sous catégorie</a></li> <li><a href="#24">ça change de sous menu</a></li> <li><a href="#25">mettez-y ce qu'il vous plait</a></li> <li><a href="#26">allez encore un</a></li> <li><a href="#27">puis un autre</a></li> <li><a href="#28">et puis un autre</a></li> <li><a href="#29">c'est rudement joli hein !</a></li> <li><a href="#30">moi ça me plait bien</a></li> <li><a href="#31">pourait etre mieux </a></li> <li><a href="#32">oui mais c'est plus cher !</a></li> </ul> </li> </ul>
Ok pour la structure en html !
Passons maintenant à la partie la plus intéressante, celle qui va nous permettre de rendre ce menu transparent avec du style en CSS !
Je vais décomposer mon CSS en plusieurs partie pour essayer d'être plus clair !
Je vais donc commencer par détailler le CSS du menu de premier niveau ! (pas le sous menu)
#menu /*-----pour le menu horizontal-------*/
{
width:520px; /*-----donner une largeur au menu, prendre en compte les marges-------*/
height: auto; /*-----important pour IE7, mettre une hauteur auto sinon pas de menu deroulant------*/
list-style-type: none; /*-----pas de puce-----*/
margin: 0 auto; /*-----marge auto pour centrer mon menu dans l'élément-------*/
padding: 0; /*-----marge interne à 0 et bordure à 0 pour ne pas avoir de soucis avec les différents navigateurs-----*/
border: 0;
}
#menu > li /*------uniquement pour la liste de premier niveau-------*/
{
float: left; /*------permet de mettre les items <li> horizontalement------*/
width: 120px; /*------je donne une largeur à mes cellules-------*/
margin: 5px; /*------j'espace mes cellules de 5px-------*/
padding: 0;
border: 0;
}
#menu li a /*------pour les liens de premier niveau-------*/
{
display: block; /*------pour mettre mes liens en block------*/
color: #FFFFFF; /*------donne une couleur à la police------*/
background-color: rgb(0, 0, 0); /*------je donne un fond solide par sécurité pour les navigateurs qui ne reconnaissent pas la transparence-----*/
background-color: rgba(0, 0, 0, 0.5); /*------fond transparent reconnus par les bons éléves-----*/
margin: 0; /*------mettre tout le monde d'accord--------*/
padding: 4px 8px; /*-----marge interne----*/
border:1px solid #FFFFFF; /*-----une bordure extérieur-------*/
text-decoration: none; /*-----pas de décoration pour mes liens-----*/
}
#menu li a:hover { /*-------une couleur de fond au survol sur mes liens-------*/
background-color: rgb(175, 214, 1);
background-color: rgba(175, 214, 1, 0.5);
}
/*---------------fin du menu de premier niveau-------------*/
Vous aurez remarqué que je déclare deux couleurs de fond (background).
Une déclaration solide pour les navigateurs qui ne prendraient pas la transparence, ceux-ci ignoreront la méthode rgba et appliqueront la méthode rgb.
Ensuite la partie pour le menu déroulant :
#menu .menuderoulant /*----pour mon menu déroulant-------*/
{
display: none; /*------pour le faire disparaitre------*/
list-style-type: none; /*-------pas de puce-------*/
margin: 0; /*------pas de marge interne et externe ni bordure pour mettre tout le monde d'accord--------*/
padding: 0;
border: 0;
position:absolute; /*------pour ne pas pousser un éventuel texte dessous-----*/
}
#menu .menuderoulant li /*-------pour ma liste de deuxième niveau-------*/
{
margin: 0;
padding: 0;
border: 0;
width: 140px; /*----------je donne une largeur à mes cellules de sous menu----------*/
border-top: 1px solid transparent; /*-----des bordures transparentes pour espacer mes cellules-----*/
border-right: 1px solid transparent;
}
#menu .menuderoulant li a /*---------pour mes liens du menu deroulant---------*/
{
display: block;
color: #FFF;
margin: 0;
border: 0;
text-decoration: none;
background-color:rgb(0, 0, 0);
background-color:rgba(0,0,0,0.5);
}
#menu .menuderoulant li a:hover /*------pour le survol du sous menu-------*/
{
background-color: rgb(18, 89, 239);
background-color: rgba(18, 89, 239, 0.8);
}
#menu .menuderoulant li a:visited { /*---------pour permmetre au visiteur de savoir sur les liens qu'il a déjà visité--------*/
background-color:rgb(227, 22, 30);
background-color:rgba(227, 22, 30, 0.5);
}
#menu li:hover > .menuderoulant { display: block; } /*------pour faire apparaitre notre sous menu au survol du menu de premier niveau------*/
Ok, voici donc notre css pour les très bons navigateurs !
Passons maintenant au css qui va nous permettre de bien afficher notre menu avec Internet Exlorer.
Eh oui ! Vous vous en doutiez, IE pose toujours problème.
IE ne connait pas cette méthode et n'affichera pas la transparence, il est néanmoins possible d'arriver au même résultat.
Pour ce faire nous allons utiliser le filtre gradient pour IE dans un commentaire conditionnel.
Le filtre gradient permet de déclarer un dégradé, je vais donc m'en servir.
Puis le commentaire conditionnel permet de déclarer dans une feuille de style ou dans une page html, l'interprétation du style qui ne sera lu que par internet explorer grâce à une syntaxe spéciale.
Il va donc falloir créer deux feuilles de styles CSS.
Une pour les bons élèves et une pour IE.
Voici la feuille de style pour IE :
#menu li a {
background:transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#33000000,endColorstr=#33000000);
zoom:1; /* important pour ie7*/
}
#menu li a:hover {
background:transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#80AFD601,endColorstr=#80AFD601);
zoom: 1;
}
#menu .menuderoulant li a {
background:transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#80000000,endColorstr=#80000000);
zoom: 1;
}
#menu .menuderoulant li a:hover {
background:transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#C01259EF,endColorstr=#C01259EF);
zoom: 1;
}
#menu .menuderoulant li a:visited {
background:transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#C0E3161E,endColorstr=#C0E3161E);
zoom: 1;
}
Pour plus de clarté, voici les deux feuilles de styles que vous pouvez voir en pleine page :
CSS pour tous les navigateurs
CSS pour internet explorer seul.
Comment faire appel à ces deux fichiers CSS !
Pour faire appel au fichier CSS pour tous les navigateurs, vous le savez, on utilise ce code :
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
Par contre pour notre cas ou l'on veut que IE ne lise uniquement le fichier qui lui est attribué, on utilise un commentaire conditionnel .
Voici ce fameux commentaire conditionnel !
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="design_ie.css" />
<![endif]-->
Voyez c'est la même chose sauf que l'on indique le chemin pour le fichier spécial pour ie, mais le plus important, c'est bien sur, la syntaxe qui permet le commentaire conditionnel.
Vous devez donc indiquer ces deux lignes de codes dans votre source.
Pour ceux qui n'utilisent pas de fichier css, mais qui insèrent le style directement dans la page html.
Le css pour IE de doit pas être placé avec le css global.
C'est à dire que vous devez faire deux déclarations de style, une pour le css normal et une déclaration pour IE, toujours entre les balises<head>
Une déclaration comme celle-ci:
<style type="text/css"> mettez votre style css entre ces deux balises </style>
et une autre déclaration pour IE avec un commentaire conditionnel comme ceci :
<!--[if IE]> <style type="text/css"> votre css pour IE </style> <![endif]-->
Résumé
Pour faire ce menu déroulant :
- premièrement : structure html
- ensuite faire deux fichiers css, un pour tous les navigateurs et un pour IE, soit deux comme ça :
- faire deux appels pour les deux fichiers css, l'un normal et l'autre avec le commentaire conditionnel.
CSS pour tous les navigateurs
CSS pour internet explorer seul.
Et pour ceux qui n'utilisent pas de fichiers CSS, rendez vous sur cette page de test du menu et afficher la source pour comprendre comment insérer les CSS. ![]()

about 1 year ago
Bonjour Cire69,
j'espère que tu vas bien.
En fait, concernant mon menu déroulant et IE, j'avais sollicité une connaissance qui navigue avec IE89 pour qu'elle regarde ce que cela donne chez elle.
Elle n'a répondu que tout fonctionnait bien alors que je n'avais pas encore ré-introduit le CSS IE que tu donnes !!
Alors, voilà, miracle !
est-ce que IE8 se serait mis à lire le code que tous les autres navigateurs reconnaissent ?
Si tu peux me confirmer en passant sur mes blogs
http:/lesyeuxducyclone.canalblog.com et
http://lydc.canalblog.com
Merci grandement
about 1 year ago
Bonjour à tous
Je rencontre quelques soucis avec mon menu déroulant
1) les items survolés poussent les autres items du menu
) quand on survole le menu, il déplace complètement mon bloc en dessous
merci de bien vouloir m'aider, aussi vite que vous pouvez
ça urge!
about 1 year ago
bonjour galant
utilise tu le menu vertical ou horizontal ?
as tu une adresse que je m’aperçoive du soucis ?
mais en général c'est une histoire de taille, il faut bien calculer les width et les height et prendre en compte les marges, enfin bref c'est tout un tout qui permettra de tout mettre en place !
about 11 months ago
je suis tres satisfait de ce tuto,car ça m'a aider à resoudre mon probleme de menu transparent....Aussi, je n'ai pas rencontré d'eventuelle difficultés à réaliser les test car la tranparence marche aussi bien sous IE !
about 10 months ago
Salut Cire69, ca fait un bail.
J'ai un petit soucis car je tente d'installer un de tes menus sur mon site radio. Et ca donne ça...
http://sites.estvideo.net/suzyland/Radio/Musicstation_cire.php
Peut-tu m'aider. Y a pas urgence.
Cordialement
about 10 months ago
salut angélo
oui ça fait un bail et ça me fais bien plaisir de savoir que je peu encore rendre service, tu sais que j'adore ça !
bon je pense que ce qui te chagrine, ce sont les puces carrés qui sont venus s'insérer !
alors pour y remédier tu va simplement entrer cette ligne de code :
list-style-type: none;
dans ces deux blocs css :
#menu > li
et
#menu .menuderoulant li
et si tu continu à être embêter, alors je t'invite à venir me retrouver sur le forum : http://www.net-simple.com
about 10 months ago
Merci, Cire69 pour ton aide. J'ai bricolé un peu le code mais cela ne me satisfait pas. On verra ça à la rentrée. La je pars en vacances. En tous cas, chouette le site !!! En tous cas le script est sympa.
about 8 months ago
Bonjour à tous,
Voilà un tutoriel particulièrement intéressant et bien expliqué.
On sait à quoi correspond précisément l'élément sue lequel on intervient.
Le fait de pouvoir faire de la transparence sans recourir à un graphique transparent est pour moi une vraie découverte.
Pour fignoler, même si cela peut paraître hors sujet, il serait bon d'ajouter et de motiver
dans le tuto le code qui permet de placer correctement l'image de fond.
Je n'y suis parvenu qu'après l'avoir déniché dans l'index
Bravo et merci
http://damier.manceau.free.fr/design/design.htm
about 8 months ago
merci volubil pour ta sympathie

oui effectivement je n'explique pas le placement de l'image de fond, celle-ci n'est présente que montrer la transparence du menu !
mon but était de faire un menu accessible à tous et surtout compréhensible, le fait de préciser le placement de cet image pourrait mettre certaine personne en échec lors de l’insertion du menu.
ce menu est bien entendu à "adapter" sur le site du web master intéressé !
cordialement
about 5 months ago
Très bien mais ce menu déroulant horizontal poussen tous les élements qui se trouvent en dessous ! :/
Du coup le texte en dessous est poussé vers le bas...
C'est pas un petit soucis selon moi.
Y a t-il une solution ?
Merci et bonne continuation.
about 5 months ago
salut Ian
et merci pour ta remarque, c'est un petit défaut dont personne ne s'est plaint jusqu'à présent !
la mise à jour est effectué, tu pourra le constaté sur la page de test : http://www.cireasy.com/menu/menu_horizontal/menu_deroulant.html
il suffit de rajouter une :
position:absolute;
dans le :
#menu .menuderoulant
évidement j'ai fais la correction dans le tuto, il te suffit de regarder à cet emplacement.
merci de tes encouragements
about 3 months ago
bonjour et merci pour ce tuto en ce qui me concerne je l'ai totalement transformer alors sur
Firefox il fonctionne a merveille
dont voici le résultat
http://gagner-de-l-argent-garanti.com/
par contre sur ie même avec la feuille de style pour ie c'est une vrai cata voici le resulta
merci pour ta réponse
cordialement
about 3 months ago
bonjour many
merci pour ton commentaire !
voici ce que tu dois faire :
enlève le "float:none" que tu as mis dans :
#menu .menuderoulant li
ensuite tu devra forcer un peu la police en italique dans ta feuille de style général en mettant "! important" comme ceci :
a:hover
{
color: red;
font-style:italic ! important;
}
tout devrait rentrer dans l'ordre
reviens me dire si ça marche !
about 2 months ago
Bonjour,
merci pout ce bon tutoriel.
Cependant je rencontre quelques problèmes d'adaptation.
J'ai rajouté un background à chaque et du coup au survol on ne voit pas le background-color sur firefox.
Peux-être pour que tu comprennes mieux mon problème je peux t'envoyer mes fichiers.
Merci.
about 2 months ago
bonjour softarg

je t’envoie un mail pour que tu puisse m'envoyer tes fichiers
j'essaierai de voir ça