Designed by NoKi !
101 en ligne   Boutique | Sites | Bar | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  


 Recherche

 NewsLetter






   

[CSS] Menu compatible et très simple v4!!!

Compatible avec tous les navigateurs ?! si, si !





iubito
Je reproche beaucoup de choses aux menus super-moulinettes non CSS, qui plantent quand le javascript est désactivé, que les non-voyants ne peuvent pas utiliser, et que même google peut avoir du mal à lire les liens dedans...
Donc je vous propose une solution :-)

Alors que mon site était en pleins travaux, déjà beaucoup de monde me demandent le code de mon menu... donc le voici ! :-)
En plus d'être esthétique (disons... pas vilain au moins :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 !!!

Cet article est également publié sur mon site perso à l'adresse http://iubito.free.fr/prog/menu.php
Iubito's menu a été repéré par Tristan Nitot sur Standblog.

Démos !
avec en cadeau bonux les explications pour faire un menu au look XP très réaliste ! ;-)
voir différentes captures d'écran...

Téléchargez le zip

Nouveau : la FAQ !


Fonctionnalités - Comment construire le menu ? - Configuration très simple - Feuille de style - Cadeau Bonux !



Fonctionnalités

Iubito's menu :
  • design entièrement en CSS, avec un peu de javascript pour compléter
  • compatible avec les navigateurs modernes, texte (Lynx), plage tactile braille pour déficients visuels, navigable au clavier (touche tab)...
  • google peut facilement explorer et référencer votre site contrairement à certaines moulinettes tordues uniquement en JS... (les moteurs ignorent les codes javascript) !
  • peut rester scotché en haut de page, ou scroller en même temps que la page (donc toujours visible en haut de l'écran).
  • peut être horizontal ou vertical, centré ou positionné "manuellement".
  • ...

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, direction mon site perso ;-)

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

  • Internet Explorer 5.0/5.5 Windows 2000
  • Internet Explorer 6 Windows 98/2000/XP - javascript activé, et javascript désactivé ;
  • Synthése vocale JAWS dans IE6 Windows XP ;
  • MyIE2 ;
  • Netscape 7 Windows ;
  • Mozilla 1.5 Windows 2000/XP - javascript activé et javascript désactivé ;
  • Opera 7.11 et 7.23 Windows - javascript activé et javascript désactivé ;
  • Lynx (navigateur texte) Windows dont voici la capture d'écran :
    Capture d'écran sous Lynx, le menu apparaît sous forme de texte
  • Konqueror Linux (Knoppix) ;
  • Galeon 1.2 ;
  • Mozilla Linux (Knoppix) ;
  • Internet Explorer 5 Mac ;
  • Safari 1.0 MacOS X 10.2.8 ;
  • Safari 1.1 MacOS X 10.3 ;
  • Mozilla 1.6 Mac ;
  • Camino MacOS X ;
  • Firebird MacOS X ;
  • OmniWeb MacOS X ;
  • ... ça fait un bon petit nombre déjà, non ? ;-)
Il ne fonctionne pas avec Netscape 4.

Si quelqu'un le teste avec un autre navigateur, qu'il me dise le résultat !

Seul limitation actuelle du script, il ne peut pas y avoir de sous-menus dans les sous-menus. Mais à côté des gros avantage qu'il possède, ce n'est rien.
Et en même temps il faut savoir qu'un menu ce n'est pas un plan du site : inutile de vouloir tout faire rentrer dedans ! Un menu trop chargé est mauvais pour la page. Donc ça vous force à simplifier et structurer votre site... ce n'est pas un mal :)





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 :

<script language="javascript" src="menu.js"></script>
<link rel="stylesheet" type="text/css" href="menu.css" />


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

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

<!-- pour éviter le clignotement désagréable -->
<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>
    <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>
  <div id="texte"></div>
  <script language="Javascript"
      type="text/javascript">Chargement();</script>

Explications :

  • un <div id="conteneurmenu"> encadre tout le menu. Le style="float:left;" sert à placer le menu à gauche (une colonne) du site si toutefois le javascript est désactivé. C'est pas toujours génial mais c'est mieux que rien. Les liens sont présents ! (voilà encore un aspect de la comptabilité...).
  • un <p> fait un menu, chaque menu doit être nommé menu1, menu2...
  • le sous-menu est fait par un <ul></ul>, chaque sous-menu doit être nommé ssmenu1, ssmenu2...
  • chaque <li></li> constitue un item du sous-menu.

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

  • <a href="le lien ou le javascript">Texte</a>
  • avant le </a> on ajoute un <span>&nbsp;;</span>. Ceci sert juste aux synthèses vocales pour aveugles. Le point-virgule leur fait "prendre une pause pour respirer" ce qui facilite "l'écoute" du menu.
    Le span sera caché dans la feuille de style, pas de panique !
  • le <div id="texte"> sert juste au code javascript de tester si le navigateur est compatible CSS.

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 :-)





Configuration très simple

Ç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;

/* TRES IMPORTANT !
   Il faut mettre ici le nombre de menus, le script n'est pas capable de compter tout
   seul ! :-p Donc si votre code va jusqu'à <p id="menu5"...> il faut mettre 5. */
var nbmenu = 3;



/* 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. */
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. */
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 &nbsp; à la place des
   espace dans les items ! */
var largeur_sous_menu = 150;

/* ... 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;




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 :

  • couleurs, police, bordure et largeur des menu et ssmenu.
  • l'effet spécial IE pour les ssmenu
  • police et couleurs des liens "non survolés" et "survolés".





Résultat...

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





Et en cadeau bonux... !

Eh oui, fait rarissime, je publie quelque chose en ASP.Net !!!

Christophe Liacopoulos de la société Sokhar utilise Iubito's menu dans son ERP (par ici la démo !). Il a créé un code ASP.Net C# qui génère le menu à partir d'une base Access.
Il offre son script en téléchargement ici. Il intègre même une fonctionnalité que je vais ajouter bientôt.
Comme je n'y connais rien au .NET, en cas de soucis, contactez-le.

NOTE : La version de Iubito-Sokhar actuellement téléchargeable n'est pas "à jour" ! Le code n'est généré ne marche pas avec IE5. Je posterai la nouvelle version quand Christophe l'aura refaite.


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 :)

J'ai mis une liste de sites qui utilisent le menu sur la page http://iubito.free.fr/prog/menu.php.




Avant de poser une question, jetez un coup d'oeil à la F.A.Q., et si vous avez un problème d'affichage, comme je ne suis pas devin, ça serait sympa de donner une URL où je puisse déceler les erreurs dans le code. Merci !


Pour pouvoir écrire dans ce forum, identifiez-vous !

 Lire  20/06/09 09:47 de bormat
ce menu n'est pas compatible avec ie6 le js éésactivé...
  • 20/06/09 11:11 de DB77 Prends celui-là : http://www.milonic.com/ ...
  • 21/06/09 21:52 de Didier Moi, j'aime bien celui-là : http://www.t...
  • 22/06/09 08:55 de DB77 Ah oui, il est pas mal celui-là :)
  •   v1.3p © ASP-PHP.net 2002  

    iubito le 01/10/2004 (191 134 hits)
    Didier Téléchargez gratuitement et légalement des logiciels Microsoft ! Si, si ;)
    • Visual Studio 2010
    • Office 2010
    • Expression Studio 3
    • SQL Server 2008
    • et d'autres...
    Au fil des news  
    Magazines - Le N°128 de Programmez est disponible
    Magazines - Le N°127 de Programmez est disponible
    Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 6
    Pour continuer dans le même style, je vous propose une suite au précédent article. Rechercher tous ...
    Adobe - Adobe Photoshop.com Mobile pour iPhone 1.1
    JavaScript - Ajouter une page dans vos favorites
    Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 5 -
    Je vous propose cette fois deux astuces. Comment exporter une feuille de style avec l'aide de ...
    SharePoint Personalization Site Links - Les liens personnalisés des MySite SharePoint
    Nous avons vu dans les articles précédents comment agrémenter les pages de recherche afin de ...
    Magazines - Le n°126 de Programmez est disponible
    Outils - Traducteur en ligne automatique pour site web
    Adobe - Adobe Photoshop.com Mobile pour Iphone
    Magazines - Le n°125 de Programmez est disponible
    Adobe - Adobe AIR 2 et Flash Player 10.1version bêta
    Les conférences autour des technologies Microsoft - Liste non exhaustive des grands évènements
    Nous allons essayer de regrouper un grand nombre des évènements autour des technologies Microsoft ...
    Magazines - Le n°124 de Programmez est disponible
    PHP - Forum PHP 2009
    Composants - eFace - XAML en Java
    WPF - Désactiver le bouton de réduction d'une fenêtre
    Magazines - Le n°123 de Programmez est disponible
    Magazines - Le n°122 de Programmez est disponible
    Auditer une ferme SharePoint - Assurer le bon fonctionnement de SharePoint
    Dans le cadre de la bonne gestion de son environnement SharePoint, il est utile de faire un ...
    SQL Server 2008 Report Builder 2.0 - Installation et utilisation de Report Builder 2.0
    Dans le cadre de la création de rapports pour SQL Server Reporting Services 2008, un outil est ...
    Magazines - Le HS N° 1 de Web Design est disponible
    Adobe - Adobe propose en Open Source les frameworks.....
    Outils - EntityBuilder
    CSharp - Sérialisation XML de vos objets
    Magazines - Le n°121 de Programmez est disponible
    Adobe - Adobe annonce MAX 2009 !
    Outils - WhoIs
    [MAJ] Dreamweaver MX + Php + MySql - Les formulaires - partie 3
    Mise à jour du code, par DB 77, affichage du code erreur, dans la page erreur.php, traduction des ...
    PHP - News avec photo - Système de gestion - affichage
    Gestion - Administration - Affichage d'une "News", "Actualité", "Info", ... avec : - mise en forme ...
    Outils - Crypt
    Dreamweaver Php Mysql - Région répétée imbriquée
    Je rebondis, sur un post du forum, pour vous montrer comment obtenir grâce à l'extension Simulated ...
    Magazines - Le n° 120 de Programmez est disponible
    Gérer les bases de contenu SharePoint - Gérer la croissance du volume des données
    Dans le cadre de la gestion quotidienne de ferme SharePoint, il existe une partie qu'il faut ...
    PHP - Le Coach PHP sur Visual Studio
    .NET - Ecrire une application .NET utilisant MySQL
    PHP - Utilisation de PHP dans le monde Microsoft
    Magazines - Le n° 119 de Programmez est disponible
    Adobe - Adobe annonce Photoshop Marketplace
    [MAJ] Tutoriel AJAX simple - En avant vers le WEB2.0
    Mis à jour le 20/04/2009
    Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
    Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
      Scripts : Scripting | ASP-PHP | ASP.net | Divers
      Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats
    v3b © Didier 2003   
     

    Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
     ASP-magazine MVP DotNet Project TechNet Groupes Utilisateurs Microsoft