28119 sujets

CSS et mise en forme, CSS3

Salut,

Je viens de migrer ma page HTML vers PHP (j'ai changé l'extension!). Des bugs d'affichage apparaissent alors que mes feuilles CSS marchaient parfaitement en HTML. En particulier mon menu dynamique vertical qui s'affiche sous forme de liste verticale et pas sous forme de boutons !

Auriez-vous une explication ?? Quelles types d'entête faut-il déclarer pour une bonne lecture du code de la page par le navigateur web ??


De plus, il me semblait que faire un :
<?php include(Parts/masthead.php"); ?>

dans ma page conteneur n'introduisait que le code contenu dans le fichier correspondant et j'observe un décalage en cascade vers la droite de mes différents éléments

Auriez-vous des précisions à ce sujet ??

Merci
Modifié par polothentik (24 Apr 2008 - 08:35)
Désolé pas d'exemple en ligne et comme il s'agit d'une migration de HTML à PHP, c'est difficilement postable !
Pourrais tu nous donner le code d'une page entière ou le problème existe ?

Car là sans rien, si tu n'as fait comme tu l'explique que changer d'extension, normalement y'a aucun problème.

Par contre si tu as commencé à utiliser du php à proprement parler, et dans ton cas, je crois que c'est l'include, peut être que tu as inclus deux fois là même chose, ou deux body, etc etc ...
polothentik a écrit :
Désolé pas d'exemple en ligne et comme il s'agit d'une migration de HTML à PHP, c'est difficilement postable !

Difficile d'arriver à comprendre le problème alors. Smiley ohwell

Peut-être peux-tu fournir un exemple du code HTML généré ?
Ok bon c'est galère mais ça passe !

Fichier HTML :

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">

<head>
	<title>Frame Base</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" type="text/css" href="global.css" />
	<link rel="stylesheet" type="text/css" href="masthead.css" />
	
</head>

<body>

<div id="global">

<div id="masthead1">
&nbsp;&nbsp;
<a href="http://techline.intranet.byefe.com/methodesGC/site_MGC/mgc_DCL/default.asp" class="whitelink">Accueil</a> &nbsp;-&nbsp;
<a href="http://techline.intranet.byefe.com/methodesGC/site_MGC/Sous_Page_Assistant_Ing.htm" class="whitelink">Retour</a>
</div>

<div id="masthead2">
</div>


</div>

</body>

</html>



Fichier PHP :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">

<head>
	<title>Frame Base</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" type="text/css" href="global.css" />
	<link rel="stylesheet" type="text/css" href="masthead.css" />
</head>

<body>

<div id="global">

<?php include('Parts/masthead1.htm'); ?>
<?php include('Parts/masthead2.htm'); ?>

</div>

</body>

</html>




Fichier CSS "masthead.css" liés aux 2 configurations :

#masthead1 {
	padding: 4px;
	background-color: #000000;
	font-family: Arial;
	font-size: 11px;
	color: #CCCCCC;
	z-index: 10;

	/* Patch pour fixer une élément de la page sous IE6 */ 
	position : expression("absolute"); 
	width : expression("100%");
	top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
	left: expression( "center" );
  }
  
#masthead2 {
	background-color: #A60000;
	height: 100px;
	z-index: 10;
	
	/* Patch pour fixer une élément de la page sous IE6 */ 
	position : expression("absolute"); 
	width : expression("100%");
	top: expression( ( 22 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
	left: expression( "center" );
	}


Voilà j'espère que c'est tout bon ! Smiley langue
Modifié par polothentik (03 Apr 2008 - 18:04)
Bonjour,

Pour commencer, assure-toi que:
1. tu n'as pas de prologue XML (ça sert à rien en HTML et ça perturbe IE6);
2. le code HTML généré est correct (tu vas sur ton script PHP qui t'affiche la page, et tu consultes le code source), sans répétition des éléments html, head et body notamment.

En passant, tu devrais mettre tes correctifs pour IE6 dans une feuille de style séparée appelée via un commentaire conditionnel, tu risqueras moins de t'emmêler les pinceaux ainsi.
Salut, merci pour ces 1ers conseils !

Alors pour ce qui est du décalage en cascade des différents éléments à inclure, cela vient du fait que j'avais toujours laissé "2 sauts de ligne" en entête de mes fichiers contenant le code de chacun des éléments. Je ne pensais pas que ça influerait...
En les supprimant, tout est revenu dans l'ordre ! (YES !)

Cependant, "un irréductible problème résiste encore est toujours à l'envahisseur...". Le fait que mon menu dynamique ne s'affiche plus correctement : sous "default.htm" il marchait parfaitement bien. Cela donne l'impression que le list-style n'est pas correctement appliqué.

Je post donc mon menu, ça surement des heureux... (Bien évidemment, il n'est pas de moi ! Je crois même qu'il vient d'ici ! Smiley lol )

Fichier html :

<div id="left_menu">
	<ul id="menu">
   		<li><a href="#menu1">MENU 1</a>
       		<ul>
           		<li><a href="default.htm">ELEM 1</a> </li>
           		<li><a href="#">ELEM 2</a> </li>
           		<li><a href="#">ELEM 3</a> </li>
       		</ul>
   		</li>
   		<li><a href="#menu2" >MENU 2</a>	
       		<ul>
           		<li><a href="#">ELEM 1</a></li>
           		<li><a href="#">ELEM 2</a></li>
           		<li><a href="#">ELEM 3</a></li>
       		</ul>
   		</li>
   		<li><a href="#menu3" >MENU 3</a>	
       		<ul>
           		<li><a href="#">ELEM 1</a></li>
           		<li><a href="#">ELEM 2</a></li>
           		<li><a href="#">ELEM 3</a></li>
       		</ul>
   		</li>
	</ul>

<script type="text/javascript"> initMenu(); </script>
</div>


Fichier CSS correspondant :

/* Feuille CSS de "Left_Menu" */


/* Positionnement et Bordures d'un élément "menu" */
#left_menu .menu {
	padding: 0px;
	margin: 0px 0px 0px 9px;
	top: 0px;
	z-index: 10;
	
	border-top-style: solid;
	border-right-style: solid;
	border-left-style: solid;
	border-top-width: 1px;
	border-right-width: 1px;
	border-left-width: 1px;
	border-top-color: #000000;
	border-bottom-color: #000000;
	border-left-color: #000000;
	
	/* Patch pour fixer une élément de la page sous IE6 */ 
	position : expression("absolute"); 
	width : expression("180px");
	top: expression( ( 228 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
	left: expression( ( 'center' + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
}




/* Positionnement et Bordures d'un élément "sous-menu" */
#left_menu .menu ul {
	visibility: hidden;
	padding: 0px;
	margin: -1px 0px 0px 9px;
	position: absolute;
	width: 180px;
	
	border-top-style: solid;
	border-right-style: solid;
	border-left-style: solid;
	border-top-width: 1px;
	border-right-width: 1px;
	border-left-width: 1px;
	border-top-color: #000000;
	border-bottom-color: #000000;
	border-left-color: #000000;

}



/* Positionnement et Bordures d'un élément "sous-sous-menu" */
/*
#left_menu .menu li ul {
    visibility: hidden;
    margin-left: 185px;
    margin-top: -24px;
    }
*/


/* Apparence et Taille du contenu d'un élément "menu" */
#left_menu .menu li a {
	background-color: #4D4D4D;
	margin: 0;
	padding: 3px 0px 3px 0px;
	
	font-family: Arial;
	color: #FFFFFF;
	font-size: 12px;
	font-weight: bold;
	text-decoration: none;
	text-align: center;
	vertical-align: middle;
	
	width: 180px;
	display: block;
	float: left;
    list-style: none;
	
	border-bottom-style: solid;
	border-bottom-width: 1px;
	border-bottom-color: #000000;
}


/* Apparence et Taille du contenu d'un élément "sous-menu" */
#left_menu .menu ul li a {
	background-color: #4D4D4D;
	margin: 0;
	padding: 3px 0px 3px 0px;
	
	font-family: Arial;
	color: #FFFFFF;
	font-size: 12px;
	font-weight: bold;
	text-decoration: none;
	text-align: center;
	vertical-align: middle;

	width: 180px;
	display: block;
	float: left;
    list-style: none;
}



/* Apparence de l'élément lorsque la souris est positionnée dessus */
#left_menu .menu a:hover {
	background-color: #AE0000;
}



#left_menu .menu span {
    display: none;
    }
    


#left_menu .menu li {
    width: 180px;
    display: block;    
    float: left;
    list-style: none;
    }


    
/* IE PC selector */
* html .menu li {
    display:inline; /* solve a IE PC list bug */
    float:none; /* solve a IE5 clav nav bug */
    }
    
#left_menu a.linkOver{
	background-color: #AE0000;
}


Fichier Javascript de détection du browser "browserdetect.js" :

// Browser Detect Lite  v2.1.4
//  http://www.dithered.com/javascript/browser_detect/index.html
 
// modified by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)


function BrowserDetectLite() {
   var ua = navigator.userAgent.toLowerCase(); 

   // browser name
   this.isGecko     = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
   this.isMozilla   = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
   this.isNS        = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
   this.isIE        = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) ); 
   this.isSafari    = (ua.indexOf('safari') != - 1);
   this.isOpera     = (ua.indexOf('opera') != -1); 
   this.isKonqueror = (ua.indexOf('konqueror') != -1 && !this.isSafari); 
   this.isIcab      = (ua.indexOf('icab') != -1); 
   this.isAol       = (ua.indexOf('aol') != -1); 
   
   // spoofing and compatible browsers
   this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
   this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);
   
   // browser version
   this.versionMinor = parseFloat(navigator.appVersion); 
   
   // correct version number
   if (this.isNS && this.isGecko) {
      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
   }
   else if (this.isIE && this.versionMinor >= 4) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
   }
   else if (this.isMozilla) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );
   }
   else if (this.isSafari) {
      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
   }
   else if (this.isOpera) {
      if (ua.indexOf('opera/') != -1) {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera/') + 6 ) );
      }
      else {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera ') + 6 ) );
      }
   }
   else if (this.isKonqueror) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
   }
   else if (this.isIcab) {
      if (ua.indexOf('icab/') != -1) {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab/') + 6 ) );
      }
      else {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab ') + 6 ) );
      }
   }
   
   this.versionMajor = parseInt(this.versionMinor); 
   this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
   
   // dom support
   this.isDOM1 = (document.getElementById);
   this.isDOM2Event = (document.addEventListener && document.removeEventListener);
   
   // css compatibility mode
   this.mode = document.compatMode ? document.compatMode : 'BackCompat';

   // platform
   this.isWin   = (ua.indexOf('win') != -1);
   this.isWin32 = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
   this.isMac   = (ua.indexOf('mac') != -1);
   this.isUnix  = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
   this.isLinux = (ua.indexOf('linux') != -1);
   
   // specific browser shortcuts
   this.isNS4x = (this.isNS && this.versionMajor == 4);
   this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
   this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
   this.isNS4up = (this.isNS && this.versionMinor >= 4);
   this.isNS6x = (this.isNS && this.versionMajor == 6);
   this.isNS6up = (this.isNS && this.versionMajor >= 6);
   this.isNS7x = (this.isNS && this.versionMajor == 7);
   this.isNS7up = (this.isNS && this.versionMajor >= 7);
   
   this.isIE4x = (this.isIE && this.versionMajor == 4);
   this.isIE4up = (this.isIE && this.versionMajor >= 4);
   this.isIE5x = (this.isIE && this.versionMajor == 5);
   this.isIE55 = (this.isIE && this.versionMinor == 5.5);
   this.isIE5up = (this.isIE && this.versionMajor >= 5);
   this.isIE6x = (this.isIE && this.versionMajor == 6);
   this.isIE6up = (this.isIE && this.versionMajor >= 6);
   
   this.isIE4xMac = (this.isIE4x && this.isMac);
}
var browser = new BrowserDetectLite();


Fichier de création du menu "menu.js" :

// the timeout for the menu
var timeout = 1000;

// not very clean but simple
// the function can be run in the HTML for faster display
// window.onload=initMenu;

// create timeout variables for list item
// it's to avoid some warning with IE
for( var i = 0; i < 100; i++ )
{
    eval("var timeoutli" + i + " = false;");
}

// this fonction apply the CSS style and the event
function initMenu()
{
    // a test to avoid some browser like IE4, Opera 6, and IE Mac
    if ( browser.isDOM1 
    && !( browser.isMac && browser.isIE ) 
    && !( browser.isOpera && browser.versionMajor < 7 )
    && !( browser.isIE && browser.versionMajor < 5 ) )
    {
        // get some element
        var menu = document.getElementById('menu'); // the root element
        var lis = menu.getElementsByTagName('li'); // all the li
        
        // change the class name of the menu, 
        // it's usefull for compatibility with old browser
        menu.className='menu';
        
        // i am searching for ul element in li element
        for ( var i=0; i<lis.length; i++ )
        {
            // is there a ul element ?
            if ( lis.item(i).getElementsByTagName('ul').length > 0 )
            {        
                // improve IE key navigation
                if ( browser.isIE )
                {
                    addAnEvent(lis.item(i),'keyup',show);
                }
                // link events to list item
                addAnEvent(lis.item(i),'mouseover',show);
                addAnEvent(lis.item(i),'mouseout',timeoutHide);
                addAnEvent(lis.item(i),'blur',timeoutHide);
                addAnEvent(lis.item(i),'focus',show);
                
                // add an id to list item
                lis.item(i).setAttribute( 'id', "li"+i );
            }
        }
    }
}

function addAnEvent( target, eventName, functionName )
{
    // apply the method to IE
    if ( browser.isIE )
    {
        //attachEvent dont work properly with this
        eval('target.on'+eventName+'=functionName');
    }
    // apply the method to DOM compliant browsers
    else
    {
        target.addEventListener( eventName , functionName , true ); // true is important for Opera7
    }
}
    
// hide the first ul element of the current element
function timeoutHide()
{
    // start the timeout
    eval( "timeout" + this.id + " = window.setTimeout('hideUlUnder( \"" + this.id + "\" )', " + timeout + " );");
}

// hide the ul elements under the element identified by id
function hideUlUnder( id )
{   
    document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'hidden';
}

// show the first ul element found under this element
function show()
{
    // show the sub menu
    this.getElementsByTagName('ul')[0].style['visibility'] = 'visible';
    var currentNode=this;
    while(currentNode)
    {
            if( currentNode.nodeName=='LI')
            {
                currentNode.getElementsByTagName('a')[0].className = 'linkOver';
            }
            currentNode=currentNode.parentNode;
    }
    // clear the timeout
    eval ( "clearTimeout( timeout"+ this.id +");" );
    hideAllOthersUls( this );
}

// hide all ul on the same level of  this list item
function hideAllOthersUls( currentLi )
{
    var lis = currentLi.parentNode;
    for ( var i=0; i<lis.childNodes.length; i++ )
    {
        if ( lis.childNodes[i].nodeName=='LI' && lis.childNodes[i].id != currentLi.id )
        {
            hideUlUnderLi( lis.childNodes[i] );
        }
    }
}

// hide all the ul wich are in the li element
function hideUlUnderLi( li )
{
    var as = li.getElementsByTagName('a');
    for ( var i=0; i<as.length; i++ )
    {
        as.item(i).className="";
    }
    var uls = li.getElementsByTagName('ul');
    for ( var i=0; i<uls.length; i++ )
    {
        uls.item(i).style['visibility'] = 'hidden';
    }
}


Si vous avez la solution n'hésitez surtout pas. Je rappel que le problème apparait en php et pas en html Smiley decu

PS: Même s'il y a peut etre des erreurs, le CSS est entièrement cpmréhensible maintenant que je l'ai retouché un peu (j'avoue que c'était un peu hardcore la 1ère version Smiley sweatdrop )

Enjoy ![/i][/i][/i]
Bonjour,

Le sélecteur CSS #left_menu .menu et tous les sélecteurs reposant sur ce modèle ne correspondent à rien dans ton code HTML. Sauf erreur de ma part, il n'y a dans div#left_menu aucun élément qui porterait une classe "menu". Il y a par contre ul élément ul qui porte l'identifiant "menu". Donc je suppose que le sélecteur devrait être #left_menu #menu... ou bien que tu devrais corriger ce code HTML.
Même en changeant les ".menu" par des "#menu", le résultat est le même en HTML comme en PHP. Cela n'a pas l'air d'influencer le code CSS !

Je conserve tout de même cette correction qui me semble plus logique !

Si tu as une idée pour résoudre le BUG d'affichage en PHP... Smiley biggrin
polothentik a écrit :
Si tu as une idée pour résoudre le BUG d'affichage en PHP... Smiley biggrin

Il n'y a pas de bug d'affichage en PHP. PHP n'a aucune incidence sur l'affichage. Ce qui compte, c'est le code HTML (généré par PHP ou Python ou Ruby ou à la main...) et le code CSS.

Ça va être dur d'en dire plus sans page en ligne...
Prenons un nouveau départ voulez-vous ? Ce POST étant quelque peu poussiéreux, je vais faire le point sur mon problème :

Lorsque l'extension est .htm, le menu dynamique fonctionne très bien sous IE6 : affichage vertical et déroulement des sous-menu; Cependant, sous FF2, l'affichage horizontal persiste ! (ce n'est pas mon souci prioritaire !)

Le vrai problème vient du fait que lorsque je souhaite faciliter l'inclusion de ce menu (puisque présent dans toutes les pages) par l'utilisation de la fonction include en PHP, le "design", et donc l'apparition in-line des sous menus ne fonctionne plus sous IE6 uniquement : on retrouve l'affichage sous forme de liste.

Le problème avec FF2 étant toujours le même... (RE: ce n'est pas mon souci prioritaire !)

Si quelqu'un pouvait le tester ou m'indiquer un moyen de résoudre le problème, j'en serais plus que ravi...

Le code du menu : HTML + CSS

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<script type="text/javascript" src="menu.js"></script>	<!-- script du menu -->
	<script type="text/javascript" src="browserdetect.js"></script>	 <!-- détéction du navigateur -->	
<style type="text/css">
 
/* Feuille CSS de "Left_Menu" */
 
 
/* Positionnement et Bordures d'un élément "menu" */
#left_menu #menu {
	padding: 0px;
	margin: 0px 0px 0px 9px;
	top: 0px;
	z-index: 10;
	
	border-top-style: solid;
	border-right-style: solid;
	border-left-style: solid;
	border-top-width: 1px;
	border-right-width: 1px;
	border-left-width: 1px;
	border-top-color: #000000;
	border-bottom-color: #000000;
	border-left-color: #000000;
	
	/* Patch pour fixer une élément de la page sous IE6 */ 
	position : expression("absolute"); 
	width : expression("180px");
	top: expression( ( 232 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
	left: expression( ( 'center' + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
}
 
 
 
 
/* Positionnement et Bordures d'un élément "sous-menu" */
#left_menu #menu ul {
	visibility: hidden;
	padding: 0px;
	margin: -1px 0px 0px 9px;
	position: absolute;
	width: 180px;
	
	border-top-style: solid;
	border-right-style: solid;
	border-left-style: solid;
	border-top-width: 1px;
	border-right-width: 1px;
	border-left-width: 1px;
	border-top-color: #000000;
	border-bottom-color: #000000;
	border-left-color: #000000;
 
}
 
 
 
/* Positionnement et Bordures d'un élément "sous-sous-menu" */
/*
#left_menu .menu li ul {
    visibility: hidden;
    margin-left: 185px;
    margin-top: -24px;
    }
*/
 
 
/* Apparence et Taille du contenu d'un élément "menu" */
#left_menu #menu li a {
	background-color: #4D4D4D;
	margin: 0;
	padding: 3px 0px 3px 0px;
	
	font-family: Arial;
	color: #FFFFFF;
	font-size: 12px;
	font-weight: bold;
	text-decoration: none;
	text-align: center;
	vertical-align: middle;
	
	width: 180px;
	display: block;
	float: left;
    list-style-type: none;
	
	border-bottom-style: solid;
	border-bottom-width: 1px;
	border-bottom-color: #000000;
}
 
 
/* Apparence et Taille du contenu d'un élément "sous-menu" */
#left_menu #menu ul li a {
	background-color: #4D4D4D;
	margin: 0;
	padding: 3px 0px 3px 0px;
	
	font-family: Arial;
	color: #FFFFFF;
	font-size: 12px;
	font-weight: bold;
	text-decoration: none;
	text-align: center;
	vertical-align: middle;
 
	width: 180px;
	display: block;
	float: left;
    list-style-type: none;
}
 
 
 
/* Apparence de l'élément lorsque la souris est positionnée dessus */
#left_menu #menu a:hover {
	background-color: #AE0000;
}
 
 
 
#left_menu #menu span {
    display: none;
    }
    
 
 
#left_menu #menu li {
    width: 180px;
    display: block;    
    float: left;
    list-style: none;
    }
 
 
    
/* IE PC selector */
* html menu li {
    display:inline; /* solve a IE PC list bug */
    float:none; /* solve a IE5 clav nav bug */
    }
    
#left_menu a.linkOver{
	background-color: #AE0000;
}
</style>
</head>
 
<body>
 
<div id="left_menu">
	<ul id="menu">
   		<li><a href="#menu1">MENU 1</a>
       		<ul>
           		<li><a href="#">ELEM 1</a> </li>
           		<li><a href="#">ELEM 2</a> </li>
           		<li><a href="#">ELEM 3</a> </li>
       		</ul>
   		</li>
   		<li><a href="#menu2" >MENU 2</a>	
       		<ul>
           		<li><a href="#">ELEM 1</a></li>
           		<li><a href="#">ELEM 2</a></li>
           		<li><a href="#">ELEM 3</a></li>
       		</ul>
   		</li>
   		<li><a href="#menu3" >MENU 3</a>	
       		<ul>
           		<li><a href="#">ELEM 1</a></li>
           		<li><a href="#">ELEM 2</a></li>
           		<li><a href="#">ELEM 3</a></li>
       		</ul>
   		</li>
	</ul>
 
<script type="text/javascript"> initMenu(); </script>
</div> 
 
</body>
 
</html>


Le fichier browserdetect.js :

// Browser Detect Lite  v2.1.4
//   http://www.dithered.com/javascript/browser_detect/index.html
 
// modified by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)
 
 
function BrowserDetectLite() {
   var ua = navigator.userAgent.toLowerCase(); 
 
   // browser name
   this.isGecko     = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
   this.isMozilla   = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
   this.isNS        = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
   this.isIE        = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) ); 
   this.isSafari    = (ua.indexOf('safari') != - 1);
   this.isOpera     = (ua.indexOf('opera') != -1); 
   this.isKonqueror = (ua.indexOf('konqueror') != -1 && !this.isSafari); 
   this.isIcab      = (ua.indexOf('icab') != -1); 
   this.isAol       = (ua.indexOf('aol') != -1); 
   
   // spoofing and compatible browsers
   this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
   this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);
   
   // browser version
   this.versionMinor = parseFloat(navigator.appVersion); 
   
   // correct version number
   if (this.isNS && this.isGecko) {
      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
   }
   else if (this.isIE && this.versionMinor >= 4) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
   }
   else if (this.isMozilla) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );
   }
   else if (this.isSafari) {
      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
   }
   else if (this.isOpera) {
      if (ua.indexOf('opera/') != -1) {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera/') + 6 ) );
      }
      else {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera ') + 6 ) );
      }
   }
   else if (this.isKonqueror) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
   }
   else if (this.isIcab) {
      if (ua.indexOf('icab/') != -1) {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab/') + 6 ) );
      }
      else {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab ') + 6 ) );
      }
   }
   
   this.versionMajor = parseInt(this.versionMinor); 
   this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
   
   // dom support
   this.isDOM1 = (document.getElementById);
   this.isDOM2Event = (document.addEventListener && document.removeEventListener);
   
   // css compatibility mode
   this.mode = document.compatMode ? document.compatMode : 'BackCompat';
 
   // platform
   this.isWin   = (ua.indexOf('win') != -1);
   this.isWin32 = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
   this.isMac   = (ua.indexOf('mac') != -1);
   this.isUnix  = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
   this.isLinux = (ua.indexOf('linux') != -1);
   
   // specific browser shortcuts
   this.isNS4x = (this.isNS && this.versionMajor == 4);
   this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
   this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
   this.isNS4up = (this.isNS && this.versionMinor >= 4);
   this.isNS6x = (this.isNS && this.versionMajor == 6);
   this.isNS6up = (this.isNS && this.versionMajor >= 6);
   this.isNS7x = (this.isNS && this.versionMajor == 7);
   this.isNS7up = (this.isNS && this.versionMajor >= 7);
   
   this.isIE4x = (this.isIE && this.versionMajor == 4);
   this.isIE4up = (this.isIE && this.versionMajor >= 4);
   this.isIE5x = (this.isIE && this.versionMajor == 5);
   this.isIE55 = (this.isIE && this.versionMinor == 5.5);
   this.isIE5up = (this.isIE && this.versionMajor >= 5);
   this.isIE6x = (this.isIE && this.versionMajor == 6);
   this.isIE6up = (this.isIE && this.versionMajor >= 6);
   
   this.isIE4xMac = (this.isIE4x && this.isMac);
}
var browser = new BrowserDetectLite();


Le fichier menu.js :

// the timeout for the menu
var timeout = 1000;
 
// not very clean but simple
// the function can be run in the HTML for faster display
// window.onload=initMenu;
 
// create timeout variables for list item
// it's to avoid some warning with IE
for( var i = 0; i < 100; i++ )
{
    eval("var timeoutli" + i + " = false;");
}
 
// this fonction apply the CSS style and the event
function initMenu()
{
    // a test to avoid some browser like IE4, Opera 6, and IE Mac
    if ( browser.isDOM1 
    && !( browser.isMac && browser.isIE ) 
    && !( browser.isOpera && browser.versionMajor < 7 )
    && !( browser.isIE && browser.versionMajor < 5 ) )
    {
        // get some element
        var menu = document.getElementById('menu'); // the root element
        var lis = menu.getElementsByTagName('li'); // all the li
        
        // change the class name of the menu, 
        // it's usefull for compatibility with old browser
        menu.className='menu';
        
        // i am searching for ul element in li element
        for ( var i=0; i<lis.length; i++ )
        {
            // is there a ul element ?
            if ( lis.item(i).getElementsByTagName('ul').length > 0 )
            {        
                // improve IE key navigation
                if ( browser.isIE )
                {
                    addAnEvent(lis.item(i),'keyup',show);
                }
                // link events to list item
                addAnEvent(lis.item(i),'mouseover',show);
                addAnEvent(lis.item(i),'mouseout',timeoutHide);
                addAnEvent(lis.item(i),'blur',timeoutHide);
                addAnEvent(lis.item(i),'focus',show);
                
                // add an id to list item
                lis.item(i).setAttribute( 'id', "li"+i );
            }
        }
    }
}
 
function addAnEvent( target, eventName, functionName )
{
    // apply the method to IE
    if ( browser.isIE )
    {
        //attachEvent dont work properly with this
        eval('target.on'+eventName+'=functionName');
    }
    // apply the method to DOM compliant browsers
    else
    {
        target.addEventListener( eventName , functionName , true ); // true is important for Opera7
    }
}
    
// hide the first ul element of the current element
function timeoutHide()
{
    // start the timeout
    eval( "timeout" + this.id + " = window.setTimeout('hideUlUnder( \"" + this.id + "\" )', " + timeout + " );");
}
 
// hide the ul elements under the element identified by id
function hideUlUnder( id )
{   
    document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'hidden';
}
 
// show the first ul element found under this element
function show()
{
    // show the sub menu
    this.getElementsByTagName('ul')[0].style['visibility'] = 'visible';
    var currentNode=this;
    while(currentNode)
    {
            if( currentNode.nodeName=='LI')
            {
                currentNode.getElementsByTagName('a')[0].className = 'linkOver';
            }
            currentNode=currentNode.parentNode;
    }
    // clear the timeout
    eval ( "clearTimeout( timeout"+ this.id +");" );
    hideAllOthersUls( this );
}
 
// hide all ul on the same level of  this list item
function hideAllOthersUls( currentLi )
{
    var lis = currentLi.parentNode;
    for ( var i=0; i<lis.childNodes.length; i++ )
    {
        if ( lis.childNodes.nodeName=='LI' && lis.childNodes[i].id != currentLi.id )
        {
            hideUlUnderLi( lis.childNodes[i] );
        }
    }
}
 
// hide all the ul wich are in the li element
function hideUlUnderLi( li )
{
    var as = li.getElementsByTagName('a');
    for ( var i=0; i<as.length; i++ )
    {
        as.item(i).className="";
    }
    var uls = li.getElementsByTagName('ul');
    for ( var i=0; i<uls.length; i++ )
    {
        uls.item(i).style['visibility'] = 'hidden';
    }
}


Merci d'avance Smiley biggrin

PS : Ce menu est simple et donne un rendu bien sympa sur un siteweb ![/i][/i]
Modifié par polothentik (24 Apr 2008 - 08:51)
Bon,

pour que vous puissiez voir quand ça marche niquel !

'fichier'.htm : (tout est là!!)



<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">

<head>

	<script type="text/javascript">
	// Browser Detect Lite  v2.1.4
//  http://www.dithered.com/javascript/browser_detect/index.html
 
// modified by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)


function BrowserDetectLite() {
   var ua = navigator.userAgent.toLowerCase(); 

   // browser name
   this.isGecko     = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
   this.isMozilla   = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
   this.isNS        = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
   this.isIE        = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) ); 
   this.isSafari    = (ua.indexOf('safari') != - 1);
   this.isOpera     = (ua.indexOf('opera') != -1); 
   this.isKonqueror = (ua.indexOf('konqueror') != -1 && !this.isSafari); 
   this.isIcab      = (ua.indexOf('icab') != -1); 
   this.isAol       = (ua.indexOf('aol') != -1); 
   
   // spoofing and compatible browsers
   this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
   this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);
   
   // browser version
   this.versionMinor = parseFloat(navigator.appVersion); 
   
   // correct version number
   if (this.isNS && this.isGecko) {
      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
   }
   else if (this.isIE && this.versionMinor >= 4) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
   }
   else if (this.isMozilla) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );
   }
   else if (this.isSafari) {
      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
   }
   else if (this.isOpera) {
      if (ua.indexOf('opera/') != -1) {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera/') + 6 ) );
      }
      else {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera ') + 6 ) );
      }
   }
   else if (this.isKonqueror) {
      this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
   }
   else if (this.isIcab) {
      if (ua.indexOf('icab/') != -1) {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab/') + 6 ) );
      }
      else {
         this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab ') + 6 ) );
      }
   }
   
   this.versionMajor = parseInt(this.versionMinor); 
   this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
   
   // dom support
   this.isDOM1 = (document.getElementById);
   this.isDOM2Event = (document.addEventListener && document.removeEventListener);
   
   // css compatibility mode
   this.mode = document.compatMode ? document.compatMode : 'BackCompat';

   // platform
   this.isWin   = (ua.indexOf('win') != -1);
   this.isWin32 = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
   this.isMac   = (ua.indexOf('mac') != -1);
   this.isUnix  = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
   this.isLinux = (ua.indexOf('linux') != -1);
   
   // specific browser shortcuts
   this.isNS4x = (this.isNS && this.versionMajor == 4);
   this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
   this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
   this.isNS4up = (this.isNS && this.versionMinor >= 4);
   this.isNS6x = (this.isNS && this.versionMajor == 6);
   this.isNS6up = (this.isNS && this.versionMajor >= 6);
   this.isNS7x = (this.isNS && this.versionMajor == 7);
   this.isNS7up = (this.isNS && this.versionMajor >= 7);
   
   this.isIE4x = (this.isIE && this.versionMajor == 4);
   this.isIE4up = (this.isIE && this.versionMajor >= 4);
   this.isIE5x = (this.isIE && this.versionMajor == 5);
   this.isIE55 = (this.isIE && this.versionMinor == 5.5);
   this.isIE5up = (this.isIE && this.versionMajor >= 5);
   this.isIE6x = (this.isIE && this.versionMajor == 6);
   this.isIE6up = (this.isIE && this.versionMajor >= 6);
   
   this.isIE4xMac = (this.isIE4x && this.isMac);
}
var browser = new BrowserDetectLite();






// the timeout for the menu
var timeout = 1000;

// not very clean but simple
// the function can be run in the HTML for faster display
// window.onload=initMenu;

// create timeout variables for list item
// it's to avoid some warning with IE
for( var i = 0; i < 100; i++ )
{
    eval("var timeoutli" + i + " = false;");
}

// this fonction apply the CSS style and the event
function initMenu()
{
    // a test to avoid some browser like IE4, Opera 6, and IE Mac
    if ( browser.isDOM1 
    && !( browser.isMac && browser.isIE ) 
    && !( browser.isOpera && browser.versionMajor < 7 )
    && !( browser.isIE && browser.versionMajor < 5 ) )
    {
        // get some element
        var menu = document.getElementById('menu'); // the root element
        var lis = menu.getElementsByTagName('li'); // all the li
        
        // change the class name of the menu, 
        // it's usefull for compatibility with old browser
        menu.className='menu';
        
        // i am searching for ul element in li element
        for ( var i=0; i<lis.length; i++ )
        {
            // is there a ul element ?
            if ( lis.item(i).getElementsByTagName('ul').length > 0 )
            {        
                // improve IE key navigation
                if ( browser.isIE )
                {
                    addAnEvent(lis.item(i),'keyup',show);
                }
                // link events to list item
                addAnEvent(lis.item(i),'mouseover',show);
                addAnEvent(lis.item(i),'mouseout',timeoutHide);
                addAnEvent(lis.item(i),'blur',timeoutHide);
                addAnEvent(lis.item(i),'focus',show);
                
                // add an id to list item
                lis.item(i).setAttribute( 'id', "li"+i );
            }
        }
    }
}

function addAnEvent( target, eventName, functionName )
{
    // apply the method to IE
    if ( browser.isIE )
    {
        //attachEvent dont work properly with this
        eval('target.on'+eventName+'=functionName');
    }
    // apply the method to DOM compliant browsers
    else
    {
        target.addEventListener( eventName , functionName , true ); // true is important for Opera7
    }
}
    
// hide the first ul element of the current element
function timeoutHide()
{
    // start the timeout
    eval( "timeout" + this.id + " = window.setTimeout('hideUlUnder( \"" + this.id + "\" )', " + timeout + " );");
}

// hide the ul elements under the element identified by id
function hideUlUnder( id )
{   
    document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'hidden';
}

// show the first ul element found under this element
function show()
{
    // show the sub menu
    this.getElementsByTagName('ul')[0].style['visibility'] = 'visible';
    var currentNode=this;
    while(currentNode)
    {
            if( currentNode.nodeName=='LI')
            {
                currentNode.getElementsByTagName('a')[0].className = 'linkOver';
            }
            currentNode=currentNode.parentNode;
    }
    // clear the timeout
    eval ( "clearTimeout( timeout"+ this.id +");" );
    hideAllOthersUls( this );
}

// hide all ul on the same level of  this list item
function hideAllOthersUls( currentLi )
{
    var lis = currentLi.parentNode;
    for ( var i=0; i<lis.childNodes.length; i++ )
    {
        if ( lis.childNodes[i].nodeName=='LI' && lis.childNodes[i].id != currentLi.id )
        {
            hideUlUnderLi( lis.childNodes[i] );
        }
    }
}

// hide all the ul wich are in the li element
function hideUlUnderLi( li )
{
    var as = li.getElementsByTagName('a');
    for ( var i=0; i<as.length; i++ )
    {
        as.item(i).className="";
    }
    var uls = li.getElementsByTagName('ul');
    for ( var i=0; i<uls.length; i++ )
    {
        uls.item(i).style['visibility'] = 'hidden';
    }
} 




	</script>
	
	<style type="text/css">
	/* Positionnement et Bordures d'un élément "menu" */
#left_menu #menu {
	padding: 0px;
	margin: 0px 0px 0px 9px;
	top: 0px;
	z-index: 10;
	
	border-top-style: solid;
	border-right-style: solid;
	border-left-style: solid;
	border-top-width: 1px;
	border-right-width: 1px;
	border-left-width: 1px;
	border-top-color: #000000;
	border-bottom-color: #000000;
	border-left-color: #000000;
	
	/* Patch pour fixer une élément de la page sous IE6 */ 
	position : expression("absolute"); 
	width : expression("180px");
	top: expression( ( 228 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
	left: expression( ( 'center' + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
}




/* Positionnement et Bordures d'un élément "sous-menu" */
#left_menu #menu ul {
	visibility: hidden;
	padding: 0px;
	margin: -1px 0px 0px 9px;
	position: absolute;
	width: 180px;
	
	border-top-style: solid;
	border-right-style: solid;
	border-left-style: solid;
	border-top-width: 1px;
	border-right-width: 1px;
	border-left-width: 1px;
	border-top-color: #000000;
	border-bottom-color: #000000;
	border-left-color: #000000;

}



/* Positionnement et Bordures d'un élément "sous-sous-menu" */
/*
#left_menu .menu li ul {
    visibility: hidden;
    margin-left: 185px;
    margin-top: -24px;
    }
*/


/* Apparence et Taille du contenu d'un élément "menu" */
#left_menu #menu li a {
	background-color: #4D4D4D;
	margin: 0;
	padding: 3px 0px 3px 0px;
	
	font-family: Arial;
	color: #FFFFFF;
	font-size: 12px;
	font-weight: bold;
	text-decoration: none;
	text-align: center;
	vertical-align: middle;
	
	width: 180px;
	display: block;
	float: left;
    list-style-type: none;
	
	border-bottom-style: solid;
	border-bottom-width: 1px;
	border-bottom-color: #000000;
}


/* Apparence et Taille du contenu d'un élément "sous-menu" */
#left_menu #menu ul li a {
	background-color: #4D4D4D;
	margin: 0;
	padding: 3px 0px 3px 0px;
	
	font-family: Arial;
	color: #FFFFFF;
	font-size: 12px;
	font-weight: bold;
	text-decoration: none;
	text-align: center;
	vertical-align: middle;

	width: 180px;
	display: block;
	float: left;
    list-style-type: none;
}



/* Apparence de l'élément lorsque la souris est positionnée dessus */
#left_menu #menu a:hover {
	background-color: #AE0000;
}



#left_menu #menu span {
    display: none;
    }
    


#left_menu #menu li {
    width: 180px;
    display: block;    
    float: left;
    list-style: none;
    }


    
/* IE PC selector */
* html menu li {
    display:inline; /* solve a IE PC list bug */
    float:none; /* solve a IE5 clav nav bug */
    }
    
#left_menu a.linkOver{
	background-color: #AE0000;
}





	</style>
	
</head>

<body>

<div id="left_menu">
	<ul id="menu">
   		<li><a href="#menu1">MENU 1</a>
       		<ul>
           		<li><a href="default.htm">ELEM 1</a> </li>
           		<li><a href="#">ELEM 2</a> </li>
           		<li><a href="#">ELEM 3</a> </li>
       		</ul>
   		</li>
   		<li><a href="#menu2" >MENU 2</a>	
       		<ul>
           		<li><a href="#">ELEM 1</a></li>
           		<li><a href="#">ELEM 2</a></li>
           		<li><a href="#">ELEM 3</a></li>
       		</ul>
   		</li>
   		<li><a href="#menu3" >MENU 3</a>	
       		<ul>
           		<li><a href="#">ELEM 1</a></li>
           		<li><a href="#">ELEM 2</a></li>
           		<li><a href="#">ELEM 3</a></li>
       		</ul>
   		</li>
	</ul>

<script type="text/javascript"> initMenu(); </script>
</div>

</body>

</html>

[/i][/i][/i]
Modifié par polothentik (24 Apr 2008 - 15:14)
Bonjour,

Déjà, tu peux commencer par virer le prologue XML qui ne sert à rien et qui fait buguer IE6. Si tu veux comprendre les dessous de l'affaire, je te laisse faire une recherche sur ce sujet. Smiley cligne

Ensuite, le code de ton menu est celui d'une page HTML+CSS+JS complète. Je suppose que tu ne l'inclues pas tel quel dans la page finale, mais que tu inclues bien:
1. Les appels des scripts JS dans le head de la page.
2. L'appel de la feuille de styles spécifique au menu, également dans le head de la page.
3. L'appel du code HTML du menu (sans Doctype, éléments html, head et body, donc juste <div id="left_menu">...</div>) au bon emplacement dans ta page.

On en revient donc au code HTML généré au final. Je crois que dans ce sujet tu n'as pas 1) vérifié que le code HTML généré était correct ou 2) fourni de lien vers la page pour qu'on puisse le vérifier pour toi.
Donc c'est bien beau de rebalancer des flots de code, mais je crois que personne ne va prendre le temps de les lire en détail ou de les tester en local, car l'erreur vient peut-être simplement de la manière dont tu inclues tes scripts les uns dans les autres et qu'à moins d'avoir l'archive complète de ton site c'est difficilement reproductible, du moins pas de manière fiable. Et puis le temps des gens est limité...

Bref:
1. Vérifie que le code HTML généré est correct (j'ai indiqué le moyen de le faire précédemment). Vérifie aussi que le code CSS est bien inclus (chemins corrects), idem pour le JS. Valide le code HTML de la page généré, tant qu'à faire.
2. Si tout va bien côté HTML, il se peut que tu aies un problème soit de styles CSS (écrasement de styles) ou de JS (écrasement de variables ou d'évènements). Pour CSS, utiliser Firebug et vérifier quels styles s'appliquent.
Modifié par Florent V. (24 Apr 2008 - 16:52)
Cher Florent, toi qui semble également avoir "la classe américaine" Smiley cligne sache qu'à mon grand étonnement ta remarque sur la ligne xml m'a interpellé au plus haut point et je demande tes lumières... parce que tu le croiras ou pas... dans mon code bien ficelé avec les include bien comme il faut mes entêtes impeccables... j'avais retiré cette ligne :

<?xml version="1.0" encoding="utf-8" ?>


Figure toi qu'en la rajoutant, mon menu marche à merveille sous IE6 !!

Je suis scié ! Smiley confus

Alors du coup, je me permet de t'en demander un peu plus sur cette fameuse ligne... qu'est-ce qui selon toi fais que ça marche avec et pas sans ?

nondijiou
IE7, Firefox, Opera, Safari: se fichent pas mal du prologue XML pour un document servi en "text/html". Donc autant ne pas le mettre...

Internet Explorer 6: passe en mode Quirks s'il rencontre autre chose que du blanc (espaces, tabulations, retours à la ligne) avant le Doctype: ce qui inclut tout contenu textuel, y compris des commentaires HTML ou le prologue XML. C'est un bug d'IE6.

Donc, en statique, ton menu ne marche avec IE6 qu'en mode Quirks, et pas en mode Standard.
Ce qui est tout de même assez problématique...

Edit: A propos du Modèle de boîte Microsoft (ou "quirks")

Edit 2:
a écrit :
parce que tu le croiras ou pas... dans mon code bien ficelé avec les include bien comme il faut mes entêtes impeccables...
Je suis tout disposé à le croire. Mais comme les erreurs dans l'utilisation d'include sont le problème n°1 pour les débutants en PHP (ce que tu n'es peut-être pas, d'ailleurs), et que tu n'avais pas confirmé que tout était ok de ce côté, je me suis permis d'insister. Smiley smile
Modifié par Florent V. (24 Apr 2008 - 17:37)