Comment j'ai fait le menu de ce site ?


Beaucoup m'ont demandé le code de mon menu CSS... donc le voici ! :-)
En plus d'être esthétique (disons... pas vilain j'trouve :-D), il est compatible avec tous les navigateurs modernes, il fonctionne quand même si le javascript est désactivé... il est navigable au clavier et pratique pour les non-voyants équipés de plage braille ou d'une synthèse vocale...
Bref le maxi bonheur pour le webmaster et pour les surfeurs !!!


Iubito's CSS menu a été repéré par Tristan Nitot sur Standblog.

For an english version, Bogac Guven wrote a .NET control fully commented, his code is available at www.codeproject.com !



Fonctionnalités
Comment construire le menu ?
Configuration très simple du menu
Feuille de style CSS
Télécharger le script
(HTML, CSS et JS + démos !! - format Zip - 194 Ko)
Démo Look XP et autres !

Cadeau Bonux !
Ils utilisent iubito's CSS menu

Et ne ratez pas la F.A.Q. !
ou posez vos questions sur le forum...


Fonctionnalités

Iubito's CSS menu :

Je me suis inspiré librement du script disponible sur OpenWeb (excellent site que je vous recommande pour sa politique d'utilisation des standards, et permettre l'accès des handicapés à l'Internet).
J'ai grandement amélioré le script d'OpenWeb (scroll possible, feuille de style...).

Pour tester le menu en action, il suffit de lever un peu la tête, il est présent sur toutes les pages du site.

« Iubito's CSS menu » a été testé avec succès dans les conditions suivantes :

(ça fait un bon petit nombre déjà, non ?)
Il ne fonctionne pas avec Netscape 4.

Si vous visitez ce site avec un navigateur non listé ci-dessus, dites-moi si ça marche.

Remerciements :

Limitations du script :



Comment construire le menu ?

Assez de blabla ! il est temps de mettre les mains dans le cambouis... oh rassurez-vous ! c'est presque un jeu d'enfant ;-)


Étape 1 - le head :

Dans la section <head></head>, il faut mettre :


Étape 2 - le menu en lui-même :

Juste après le <body>, placez le code suivant... (exemple du menu de mon site) :

<!-- ici on mettrait un <div style="float:left;" id="conteneurmenu"> 
    mais l'affichage du menu dans un premier temps, puis son positionnement
    par le javascript donne un effet desagréble de clignotement.
    Voici l'astuce pour l'éviter. -->
<div id="conteneurmenu">
<script language="Javascript" type="text/javascript">
    preChargement();
</script>
    <p id="menu1" class="menu"
            onmouseover="MontrerMenu('ssmenu1');"
            onmouseout="CacherDelai();">
        <a href="http://iubito.free.fr"
            onfocus="MontrerMenu('ssmenu1');">iubito.free.fr<span> :</span></a>
    </p>
<!-- Si vous ne voulez pas de sous menu ne mettez pas de
     <ul></ul> tout simplement -->
    <ul id="ssmenu1" class="ssmenu"
        onmouseover="AnnulerCacher();"
        onmouseout="CacherDelai();"
        onfocus="AnnulerCacher();"
        onblur="CacherDelai();">
      <li>
        <a href="/">Accueil<span> ;</span></a>
      </li>
      <li>
        <a href="/livre/">Livre d'Or<span> ;</span></a>
      </li>
      <li>
        <a href="/annu/">Annuaire<span> ;</span></a>
      </li>
      <li>
        <a href="javascript:addFav();">Ajouter aux favoris<span>.</span></a>
      </li>
    </ul>

    ... idem avec menu2 et ssmenu2 ... et ainsi de suite ...

  </div>
  <script language="Javascript"
      type="text/javascript">
    // Vous pouvez éventuellement changer des variables ici
    // voir la configuration du menu plus bas.
    Chargement();</script>

Explications :

Dans le <p> et dans les <li> on met :

Donc ainsi vous constituez votre menu. Remarquez que la syntaxe étant du html pur et simple, il est très facile d'utiliser un langage serveur (ASP, PHP, JSP...) pour construire le menu :-)



Comment configurer le menu ?

Ça se passe dans le fichier menu.js. Les variables sont :

/* true = le menu sera vertical, à gauche.
   false = le menu sera horizontal, en haut. */
var vertical = false;

/* Centrer le menu ? (true/false).
	Centre horizontalement ou verticalement suivant le mode choisi. */
var centrer_menu = false;

/* On est obligé de définir une largeur pour les menus.
	Pour mettre des menus de largeurs différentes :
	var largeur_menu = new Array(largeur menu1, largeur menu2, largeur menu3...)
	Il faut faire attention à mettre autant de valeurs que de nombre de menu !
	Attention, si vous êtes en menu vertical, mettez une largeur fixe (pas de Array) !
	*/
var largeur_menu = 85;

/* En mode vertical, on a besoin de connaître la hauteur de chaque menu.
	Même si les "cases" ne sont pas dimensionnées en hauteur.
	Ajustez cette variable si les menus sont trop rapprochés ou espacés en vertical.
	Pour mettre des menus de hauteurs différentes :
	var hauteur_menu = new Array(hauteur menu1, hauteur menu2, hauteur menu3...)
	Il faut faire attention à mettre autant de valeurs que de nombre de menu !
	Attention, si vous êtes en menu horizontal, mettez une largeur fixe (pas de Array) !
	*/
var hauteur_menu = 25;

/* En mode horizontal.
	Largeur des sous-menus, pour IE uniquement, les autres navigateurs respectent la largeur
	auto. Mettez "auto" uniquement si vous êtes sûr d'avoir mis des   à la place des
	espace dans les items !
	Pour mettre des sous-menus de largeurs différentes :
	var largeur_sous_menu = new Array(largeur1, largeur2...).
	Il faut faire attention à mettre autant de valeurs que de menus.
	Si un menu n'a pas de sous-menus, il faut mettre quand même quelque chose !
	Il est possible de mettre "auto" dans certaines colonnes, à condition de respecter la
	consigne ci-dessus.
	*/
var largeur_sous_menu = 150;

/* Pour les navigateurs connaissant la largeur automatique (s'adapte au contenu), cette
	option (active par défaut) permet d'avoir une largeur automatique. En cas contraire
	(false), les sous menus auront la largeur largeur_sous_menu. */
var largeur_auto_ssmenu = true;

/* ... pour mettre un peu d'espace entre les menus ! */
var espace_entre_menus = 5;


/* position du menu par rapport au haut de l'écran ou de la page.
	0 = le menu est tout en haut. en px */
var top_menu = 2;
/* En version horizontale.
	position des sous-menus par rapport au haut de l'écran ou de la page. Il faut prévoir
	la hauteur des menus, donc ne pas mettre 0 et faire "à tâton". en px */
var top_ssmenu = top_menu + 28;

/* Position gauche du menu, en px. */
var left_menu = 0;
/* En version verticale.
	Position des sous-menus par rapport au bord gauche de l'écran. */
var left_ssmenu = largeur_menu+2;

/* Quand la souris quitte un sous-menu, si le sous-menu disparait immédiatement,
	cela gêne l'utilisateur. Alors on peut mettre un délai avant disparition du sous-menu.
	500 ms c'est bien :-) */
var delai = 650; // en milliseconde

/* En version horizontale.
	Comme le menu peut se superposer avec le texte de la page, il est possible de faire
	descendre un peu la page (on augmente la marge du haut) pour aérer un peu la page,
	une quarantaine de pixel c'est pas mal. en px*/
var marge_en_haut_de_page = top_menu + 40;
/* En version verticale.
	On décale le document à droite pour pas que le menu le superpose. */
var marge_a_gauche_de_la_page = largeur_menu + 10;


/* Mettez à true si vous souhaitez que le menu soit toujours visible.
	Mettez false si vous ne le souhaitez pas, dans ce cas le menu "disparaîtra" quand vous
	descendrez dans la page. */
var suivre_le_scroll=true;

/* Pour IE uniquement, les balises <select> passent toujours au-dessus du menu, donc
	par défaut on cache les listes déroulantes quand le menu est ouvert, puis on les fait
	réapparaître à la fermeture du menu. Pour empêcher ça, mettre à false. */
var cacher_les_select=true;


Comment modifier l'affichage ?

Des explications détaillées sont dans le fichier menu.css, mais pour résumer, voici ce qu'il y a à modifier :

Sans CSS, le menu sera une liste <ul> avec des <li>... ===> Lynx ou synthèse vocale.
Sans javascript, on aura une bande verticale à gauche ;
Avec JS et CSS, on aura le menu complet ;-)



Et en cadeau bonux... !

Bogac Guven (Turquie) a fait une version VB.NET (Very Compatible DHTML Menu ASP.NET User Control), très commentée, en anglais, disponible sur www.codeproject.com.
Il a repris le principe du travail réalisé par Christophe (Sokhar).

Christophe Liacopoulos (Sokhar) utilise Iubito's menu dans son ERP (par ici la démo !). Il a créé un code C# qui génère le menu à partir d'une base Access.
Il offre son script en téléchargement ici.
Attention ! La version du .js qu'il utilise est obsolète ! C'est donc juste pour prendre exemple sur le code de génération du menu... Comme je n'y connais rien au .NET, en cas de soucis, contactez-le.


Have Fun !

Vous pouvez utiliser librement ce menu, ça serait sympa de laisser mon nom dans le code, afin que les webmasters visitant votre site puissent bénéficier comme vous d'un menu sympa :)

Et puis à l'exemple de Christophe, si vous lui apportez un plus, ou alors si vous créez une feuille de style qui déchire tout, c'est sympa de me le dire :)



Ce script a également été publié sur :

ASP-PHP.net CodeS-SourceS JavaScript

© Sylvain Machefert, dernière modification novembre 2005