Menu horizontal
Nous pouvons aussi avoir un menu1 horizontal. Mais Nescape 4, Opera 5 et IE 4 ne seront pas en mesure de l'afficher correctement.
Il nous faut toujours deux feuilles de style :
pagecss2nn4.css contenant les règles qui sont ignorées ou correctement interprétées par nn4.
pagecss2.css avec les nouvelles règles et ce qui pose problème.
On a ajouté ce qui est nécessaire à MSIE 5 et 5.5.
Quelques filtres ou "hacks" vont permettre la compatibilité.
On définit maintenant menu_horizontal :
<link rel="stylesheet" href="pagecss2nn4.css" type="text/css" />
<style type="text/css">
<!--
/*<![CDATA[*/
   /*n'est pas interprété par nn4 ou ie4*/
@import "pagecss2.css";/*écrase les styles précédemment définis*/
/*modifications à apporter mais plutôt dans pagecss2nn4*/
#menugauche li{
margin-top:0;
border-bottom:0;
border-top:1px solid #90BADE;
margin-bottom:-5px;
border-bottom/*ignoré par IE5.0/Win à partir d'ici*/:1px solid #90BADE;
margin-bottom:-1px;
}
* html #menugauche li a{
width:155px;
w\idth:135px;/*n'est pas interprété par IE 5.x*/
}
/*on redéfinit ce qui n'a pas été modifié dans pagecss2nn4*/
#content{
margin-top:2.2em;/*pour IE5*/
margin-top/*ignoré par IE5.0/Win*/:2em;
}
/*On utilise ici les mêmes techniques que pour le menu à gauche
  On positionne en haut à gauche si on le souhaite
  On ajoute nowrap pour éviter un passage à la ligne si l'écran est trop petit
  (sauf avec IE 5.01)*/
#menu_horizontal ul{
top:0;
  /*
  top:expression(body.scrollTop + 0 + "px");
  permet une position du menu fixe avec IE5 et 5.5
  mais CSS ne sera plus valide !
  */
left:157px;/*0 peut permettre d'utiliser toute la largeur*/
position:absolute;
white-space:nowrap;
background-color:transparent;
color:#0A00B0;
/*width:83%;*//*peut permettre d'utiliser toute la largeur*/
margin:.3em 0 0 0;
padding:2px 3px 0 0;
padding-bottom:/*pour IE5.5 et IE6 ignoré de IE5.0*/2px;
border:1px solid #90BADE;
}
/*Pour Mozilla et Opera position fixe haut gauche
  et on definit la couleur de fond*/
html>body #menu_horizontal ul{
position:fixed;
background-color:#C9DDE4;
}
/*Ici on écrase la définition par défaut de ul : display:block;
  C'est ce qui va permettre d'afficher tout sur une même ligne*/
#menu_horizontal ul li{
display:inline;
}
/*On procède comme avec le menu de gauche pour afficher les liens
  et animer.
  Dans ce contexte IE5 n'interprète pas border, margin, padding
  sauf avec height:0;*/
#menu_horizontal ul li a{
font-weight:800;
background-color:#D2E1FB;
text-decoration:none;
border-left:6px solid #E9F5FE;
border-right:6px solid #E9F5FE;
margin-right:-3px;
margin-left:0;
padding:2px 7px 2px 7px;
margin-bottom:-4px;/*pour IE5.0*/
height:0;
}
#menu_horizontal ul li a:hover{
background-color:#A9CFFE;
color:#FFFFFF;
border-left:8px solid #5200A4;
border-right:8px solid #5200A4;
border-bottom:2px solid #E9F5FE;
border-top:2px solid #E9F5FE;
padding:0 5px 0 5px;
}
/*]]>*/
-->
</style>
CSS uniquement, pas de tableau ni javascript.
Voilà ce qui semble possible2, mais qui reste réservé aux navigateurs récents.
MSIE 7 risque de bouleverser les choses car il devrait lire html > body, body > element, head:first-child + body et ne plus lire * html.
Si cela se confirme, utiliser des commentaires conditionnels pour les différentes versions de MSIE deviendra l'option la plus raisonnable.
Et pour IE6.
1 CSS cutting edge propose d'autres solutions sans liste pour des menus horizontaux et verticaux.
1 Autres solutions pour des menus horizontaux et verticaux.
2 Si le mode "quirks" de IE6 vous convient, devnull propose d'autres solutions pour IE5, 5.5 et 6.