CSS3 Mega Dropdown Menu

CSS3 Mega Dropdown Menu

27 mar | Catégorie: HTML-CSS | Rédigé par Stéphane | 6255 lectures

 

Le but de ce tutoriel est de réaliser un menu en utilisant au maximum les nouvelles possibilités de CSS3 afin de réduire au mieux l'utilisation d'images. 

 

 

 

Ce tutoriel a été réalisé à partir de deux sources :

  • La première, c'est le design du menu. Il provient de Tuttoaster qui le propose en téléchargement gratuitement sur son site avec 10 associations de couleurs différentes.

Tuttoaster free navigation download

  • La deuxième source, c'est le script du menu. Il a été réalisé par Soh Tanaka qui a fait un tutoriel sur la réalisation d'un méga menu avec jQuery.

Soh Tanaka Mega Dropdown Menu

 

 

Etape 1 : la structure HTML

Du fait de la particularité du bouton d'accueil, j'ai choisi de le placer en dehors du <ul> afin de pouvoir le styler plus facilement. Pour le reste, c'est classique. Les <li> qui ont un sous-menu possèdent une classe "liSub" afin de les différencier.

Le sous-menu est placé dans une <div> que l'on cache par défaut. La catégorisation du sous-menu a été faite de façon à pouvoir afficher beaucoup de rubriques. Il est bien sûr possible de le simplifier en supprimant des <ul>.

 

Etape 2 : Styler le menu en CSS

La partie la plus intéressante du tutoriel réside dans la création de la plupart des éléments graphiques du menu avec l'utilisation des propriétés CSS3 qui permettent d'éviter l'accumulation d'images.

Pour ce menu, très peu d'images sont utilisées; cela permet d'optimiser le chargement de la page. En plus de cela, j'ai opté pour l'utilisation de sprite CSS. Pour ceux qui ne savent pas ce qu'est un sprite et à quoi ça sert, voici un petit schéma explicatif qui démontre l'intérêt de grouper ses images en une seule, surtout dans le cas ou elles sont quasiment identiques.

Sprite CSS

Les 5 autres images à droite sont les seules utilisées pour réaliser ce menu.

 

Je vais maintenant m'attarder sur l'utilisation des propriétés CSS3 qui ont permis d'obtenir un menu identique à sa version Photoshop.

L'ombre sur le texte : propriété text-shadow

text shadow CSS3

La propriété text-shadow comporte 4 paramètres : décalage horizontal, décalage vertical, flou, couleur.

Ici, j'applique une ombre sur "TUTORIALS" qui est au même niveau horizontal et vertical, de couleur noir et de flou 2px.

 

Les bords arrondis : propriété border-radius

border radius css3

Le sous-menu ainsi que le passage de la souris sur les éléments du menu ont des bords arrondis fait grâce à la propriété border-radius.



L'ombre : propriété box-shadow

box shadow css3

 

La div qui contient le sous-menu possède une ombre tout autour d'elle. La propriété CSS3 box-shadow permet d'obtenir cet effet qui utilise la même syntaxe que text-shadow.

Malheureusement, Internet Explorer ne supporte pas encore cette propriété dans ses versions actuelles du navigateur... Il faudra patienter jusqu'à la version 9 qui est actuellement en développement pour pouvoir utiliser toutes les propriétés CSS3.

 

Donc pour IE 8 et inférieur, j'ai juste utilisé un hack pour appliquer un background-color à la div.

 

Le dégradé : propriété background-image

background image css3

Pour cet effet, le CSS a appliqué nécessite ici une syntaxe particulière en fonction des navigateurs :

Pour que le dégradé fonctionne sur Internet Explorer, il faut utiliser la propriété "filter". Là encore la syntaxe est un peu différente pour Firefox et pour les navigateurs sous Webkit.

Pour vous faciliter la tâche, voici un site bien conçu qui vous permet de générer des dégradés CSS3 de façon très intuitive et rapide. Voir le site

 

Etape finale : Le résultat

Au final, le CSS3 aura permis une nouvelle approche dans la création d'effets visuels sur des éléments qui auraient auparavant été automatiquement et par défaut des images.

Il est désormais possible de substituer les techniques habituelles d'intégration par les nouveautés apportées par le CSS3.

Malheureusement, ce menu ne va pas être visualisé de la même façon sur tous les navigateurs...

Il a le mérite de s'y afficher correctement, mais pour ce qui concerne Internet Explorer, voici les différences que l'on obtient :

Comparaison CSS3 navigateurs

Internet Explorer 8 et 7 ne s'en tirent pas très bien, ces deux versions du navigateurs ne possèdent pas le support complet du CSS3, mais ce n'est pas pour autant que le menu s'affiche mal, il est juste beaucoup plus carré et moins esthétique. Internet Explorer 9 va pouvoir devenir un vrai rival lorsqu'il remplacera la version 8 d'ici peu de temps on l'espère.

En ce qui concerne Opera, il est entre les deux car il ne supporte pas encore les dégradés.

 

Conclusion

Je pense que même si les propriétés CSS3 peuvent paraîtres encore expérimentales du fait de l'utilisation de différentes syntaxes pour chaque navigateur, il est néanmoins important de commencer à s'y intéresser.

J'espère que ce tutoriel vous aura fait découvrir les possibilités très étendues du CSS3. D'autres tutoriels suivront pour vous apprendre à maîtriser toutes ses facettes.

 

Pour aller plus loin :

 

Creative Commons License
Cette création par Snoupix.com est mise à disposition selon les termes de la licence Creative Commons.
Partager ce tutoriel :
wikio scoopeo fuzz diggfr digg-design blogmemes delicious tapemoi yoolink bluegger pioche

19 Commentaires

gravatar
le 30 mars à 09h46 Léo Répondre Le temps où l'on pourra utiliser les dernières technos sans se soucier des compatibilités est loin d'être arrivé (encore merci à Microsoft) mais c'est déjà une grande avancée.
gravatar
le 04 avril à 00h25 Trib Répondre Salut déjà super tuto merci de le faire partager !
J'ai juste un petit soucis et j'arrive pas à mettre la main sur la solution

J'ai voulu faire évolué le design en dessous du menu, histoire de voir se que cela pourrais donner.
Mais mon soucis sais que dès que je développe un menu il me l'affiche incruster dans les cellules du dessous, il me les affiches mais je peux pas aller dessus avec ma souris.
Si je vire tout se qu'il y a en dessous du menu sa marche. Donc c pas une erreur sur le code du menu lui même.
Je pense que je dois rajoute ou une fonction au javascript ou modifie mon css.
Mais la je suis perdu
As tu une idée par hasard stp ?
Si ta besoin de plus d'info hésite pas!
gravatar
le 06 avril à 15h06 Medic Répondre J'adore vos tutoriels, c'est juste excellent... Big Merci ^^
gravatar
le 06 avril à 21h00 Trib Répondre Réponse à Trib:Salut déjà super tuto merci de le faire partager !
J'ai juste un petit soucis et j'arrive pas à mettre la main sur la solution

J'ai voulu faire évolué le design en dessous du menu, histoire de voir se que cela pourrais donner.
Mais mon soucis sais que dès que je développe un menu il me l'affiche incruster dans les cellules du dessous, il me les affiches mais je peux pas aller dessus avec ma souris.
Si je vire tout se qu'il y a en dessous du menu sa marche. Donc c pas une erreur sur le code du menu lui même.
Je pense que je dois rajoute ou une fonction au javascript ou modifie mon css.
Mais la je suis perdu
As tu une idée par hasard stp ?
Si ta besoin de plus d'info hésite pas!



Voici mes 2 bouts de code que je rajoute

<div id="apDiv1">Contenu</div>
Juste avant la fermeture de la div conteneur

et mon css

#apDiv1 {
display:block;
position:absolute;
left:230px;
top:220px;
width:960px;
height:390px;
}

J'ai beau essaye dans tout les sens il m'affiche tjrs le mot contenu incruste dans le 1er menu...
Si quelqu'un à la solution merci d'avance
gravatar
le 18 avril à 12h38 Ghost Répondre salut trib j'ai une solution partielle a ton problème joue avec les Z-index de ton css pour faire passer ton menu par dessus tes cellules. Le problème c'est que le menu n'est plus totalement incruster dans le design ...

je recherche une solution actuellement mais c'est c'est pas évident.

bon courage pour la suite

ps: excellent tutoriel merci snoupix.
gravatar
le 07 mai à 11h29 aurel Répondre Excellent tuto, merci !!

Sous Opera, dernière version, je vois le dégradé dans la démo. peut-être ajuster corriger le tuto
gravatar
le 14 juin à 18h38 FireSKT Répondre Très belle réussite ce tuto !

Néanmoins j'ai un petit soucis. Il semble que le hover ne marche plus quand je dirige ma souris sur le subMenu.
Concrètement : Je pointe sur "TUTORIALS" et au moment ou je déplace ma souris sur le subMenu pour sélectionner quelque chose sa ne marche pas.

PS : Je ne suis, à priori, pas le seul. Auriez-vous une (des) solution(s) ?

Merci d'avance.
gravatar
le 14 juin à 20h18 Stephane Répondre Si j'ai bien compris, c'est lorsque tu clique un lien dans le sous-menu que ensuite tu n'aperçois plus le hover ?

Si c'est ça, c'est normal, car normalement, lors du clique, tu es censé être redirigé vers une autre page.
gravatar
le 16 juin à 13h49 FireSKT Répondre J'ai finalement trouvé, la propriété z-index à mettre en positif. Merci de la réponse rapide Stéphane !
Pour la compréhension, la fenêtre du subMenu disparaissait quand je dirigeais ma souris dessus et plus précisément lors du passage de la barre menu au subMenu.

J'espère avoir été clair smile

Cordialement
gravatar
le 17 juin à 13h47 Ken Répondre il me semble qu'en laissant la feuille de style dans le src.html au lieu de l'importer
la resolution, la typo, et le submenusubover fonctionne.
gravatar
le 23 juin à 21h41 Olivier Répondre Super tuto, pleins de ressources.
gravatar
le 28 juin à 15h55 Olivier Répondre Réponse à Trib:
J'ai voulu faire évolué le design en dessous du menu, histoire de voir se que cela pourrais donner.
Mais mon soucis sais que dès que je développe un menu il me l'affiche incruster dans les cellules du dessous, il me les affiches mais je peux pas aller dessus avec ma souris.


J'ai peut-être la solution à ton problème essaies, dans ton css du menu de mettre ou changer la valeur z-index et passe la à 100 pour ul#topnav li .sub.

@+
gravatar
le 23 juillet à 21h37 Mario Répondre Bonjour,
Et tout d'abord merci pour ce très bon tutoriel !
Ce menu va a ravir sur mon wordpress ...
J'ai juste un problème encore ce fichu IE7 qui fait des siennes grrrr
Plus que des mots je vous laisse 2 images vous allez comprendre :
Menu OK sur chrome, Firefox, IE8 etc ... : http://img405.imageshack.us/img405/8963/menuok.jpg

Menu pas OK du tout sous IE7 : http://img249.imageshack.us/img249/6521/ie7p.jpg (l'onglet Nous contacter ce retrouve en bas à gauche)

(Site en question sur mon pseudo)

Seriez vous d'ou ça pourrais venir ?
Pourriez vous m'aider à résoudre ce problème ?

D'avance merci.
gravatar
le 29 juillet à 19h52 Adri3n Répondre Salut.
Super menu smile

j'ai cependant une question, comment faire si je souhaire que mon menu fasse 980px de large ?

Merci a bientot
gravatar
le 29 juillet à 19h54 Adri3n Répondre Oups j'ai aussi un souci, j'ai du text en dessous le menu et il remonte sur le coté droit a droite de contact...

j'ai pourtant mis clear:left comme le tuto mais ca ne marche pas.
gravatar
le 29 juillet à 20h42 Adri3n Répondre dernier souci,
quand je clique sur le menu tutorials ou ressource, les onglets s'ouvrent sous mes autres div!

comment faire ?
merci smile
http://yfrog.com/bgcapturesjj
gravatar
le 30 juillet à 01h12 Adri3n Répondre Bon finalement, j'ai réussi a faire passer le contenu au premier plan en modifiant le z-index:-10; à 0... Mais smile

il y a un mai. l'onglet apparait quand on pointe le bouton juste au dessus, ça c'est ok, mais maintenant le bouton en lui meme est en dessous de l'onglet et l'ombre de l'onglet apparait au dessus du bouton... on a plus la continuité de blanc bouton/onglet...

petite capture http://yfrog.com/2dcapturexpp

sinon comment faire pour que la largeur totale de la barre face 975px ?

Merci d'avance pour vos rep smile
gravatar
le 26 août à 11h18 michael Répondre Merci beaucoup pour cette indication, car effectivement j'ai eu le meme probleme au survol, avec des "div" juste sous le menu.

Solution :
passer z-index:-10; à 0px

Merci à Adri3n
gravatar
le 26 août à 11h58 michael Répondre J'ai trouvé une solution raisonnable :
-moz-box-shadow: #5a5a5a 4px 4px 5px;
Cela va décaler sur la droite et en bas l'ombre.
Donc plus d'ombre sur la partie haute.

Requête en cours, veuillez patienter...

Ajouter un commentaire