2009-08-21 19 views
0

Le menu déroulant suivant fonctionne très bien dans les navigateurs modernes (IE7/firefox) mais pas dans IE6. Quelqu'un peut-il suggérer une solution?Le menu déroulant ne fonctionne pas dans IE6

CSS:

#menu { 
    height: 29px; 
    background: url(img/menu.png) repeat-x top; 
    border-left: 1px solid #0b2f3e; 
    border-right: 1px solid #0b2f3e; 
    position: relative; 
} 

#menu ul { 
    display: none; 
    position: absolute; 
    top: 29px; 
    left: 0; 
    background: #316f86; 
    width: 220px; 
    z-index: 10; 
} 

#menu ul ul { 
    top: -1px; 
    left: 220px; 
    width: 200px; 
    border: 1px solid #4a7a8c; 
    border-bottom: none; 
} 

#menu li { 
    float: left; 
    display: block; 
    position: relative; 
} 

#menu li li { 
    float: none; 
} 

#menu li a { 
    float: left; 
    display: block; 
    color: #fff; 
    height: 16px; 
    line-height: 16px; 
    padding: 7px 20px 6px 20px; 
    border-right: 1px solid #0b2f3e; 
} 

#menu ul li a { 
    float: none; 
    border-right: none; 
    border-bottom: 1px solid #4a7a8c; 
} 

#menu li a:hover { 
    border-bottom: none; 
} 

#menu ul li a:hover { 
    color: #c0e8ff; 
    border-bottom: 1px solid #4a7a8c; 
} 

.menu-bottom { 
    background: url(img/menu.png) repeat-x bottom; 
} 

.menu-top { 
    background: url(img/menu.png) repeat-x top; 
} 

#menu li:hover ul ul, #menu li:hover ul ul ul, #menu li:hover ul ul ul ul{ 
display:none; 
} 
#menu li:hover ul, #menu li li:hover ul, #menu li li li:hover ul, #menu li li li li:hover ul{ 
display:block; 
} 

#menu img { 
    vertical-align: middle; 
    overflow: hidden; 
    width: 16px; 
    height: 16px; 
    margin: 0 8px 0 0; 
} 

jQuery: (ne devrait pas être un problème jquery)

// dropdown menu (unlimited sub-levels) 
jQuery("#menu ul").css({display: "none"}); // Opera Fix 

jQuery("#menu li").hover(
    function(){ 
     if (jQuery(this).parent().attr("id") == 'menu') { 
      jQuery(this).removeClass('menu-top'); 
      jQuery(this).addClass('menu-bottom'); 
     } 
     jQuery(this).find('ul:first').css({visibility: "visible",display: "none"}).fadeIn(500); 

    }, 
    function(){ 
     if (jQuery(this).parent().attr("id") == 'menu') { 
      jQuery(this).removeClass('menu-bottom'); 
      jQuery(this).addClass('menu-top'); 
     } 
     jQuery(this).find('ul:first').css({visibility: "hidden"}); 
    } 
); 

Je suis sûr que ses quelque chose avec la façon dont IE6 traite flotteurs/blocks..but ne peuvent tout simplement pas obtenir le coup de lui.

+0

peut vous moquer jusqu'à à jsbin.com ou pastebin.me – redsquare

Répondre

3

Pourquoi réinventer la roue. Bon système de menu est superfish ou suckerfish. Et testé sur Essayé IE6 etc.

+0

Je réinvente la roue parce que je veux développer ma propre version. C'est plus facile que de personnaliser les menus prédéfinis. et j'en ai besoin dans jQuery aussi. Le problème est que quand je supprime float: à gauche de #menu li {} il apparaît .. donc le problème n'est pas dans jquery .. son flottant juste: à gauche .. mais il semble moche quand son enlevé –

+0

Tweaking super/menus suckerfish est trivial si vous comprenez css. –

+0

en fait, vous devriez garder un flotteur: à gauche; et l'affichage ajouté: inline – albert

1

Il vaut la peine de jeter un oeil sur le site Web de Stu Nicholl CSS Play, la page de son menu détient des dizaines d'exemples, dont beaucoup sont multi-navigateurs compatibles et compris IE6.

0

essayer d'utiliser la méthode jquery en direct au lieu de vol stationnaire

jQuery("#menu li").hover -> jQuery("#menu li").live("hover", function() 

il pourrait résoudre le problème avec vol stationnaire pas tiré dans IE6

0

Merci à tous .. J'ai réussi à fixer le CSS et le faire fonctionner avec IE6 :)

Ici c'est juste au cas où quelqu'un en aurait besoin.

#menu, #menu ul { 
    position: relative; 
    z-index: 300; 
    width: 100%; 
} 

#menu { 
    height: 29px; 
    background: url(img/menu.png) repeat-x top; 
    border-left: 1px solid #0b2f3e; 
    border-right: 1px solid #0b2f3e; 
} 

#menu ul { 
    width: 230px; 
    position: absolute; 
    display: none; 
    top: 29px; 
    left: 0; 
    background: #316f86; 
} 

#menu ul ul { 
    width: 232px; 
    top: -1px; 
    left: 230px; 
    background: #316f86; 
    border: 1px solid #4a7a8c;border-bottom: none; 
} 

#menu li { 
    float: left; 
    position: relative; 
} 

#menu a { 
    display: block; 
    padding: 9px 20px 8px 20px; 
    color: #fff; 
    border-right: 1px solid #0b2f3e; 
} 

#menu li ul a { 
    float: left; 
    height: auto; 
    border-right: none; 
    border-bottom: 1px solid #4a7a8c; 
    width: 190px; 
} 

#menu li a:hover { 
    border-bottom: none; 
} 

#menu li ul a:hover { 
    color: #c0e8ff; 
    border-bottom: 1px solid #4a7a8c; 
} 

.menu-bottom { 
    background: url(img/menu.png) repeat-x bottom; 
} 

.menu-top { 
    background: url(img/menu.png) repeat-x top; 
} 

#menu li:hover ul ul, #menu li:hover ul ul ul, #menu li:hover ul ul ul ul {display:none;} 
#menu li:hover ul, #menu li li:hover ul, #menu li li li:hover ul, #menu li li li li:hover ul {display:block;} 

#menu img { 
    vertical-align: middle; 
    overflow: hidden; 
    width: 16px; 
    height: 16px; 
    margin: 0 8px 0 0; 
} 
+0

@ solution de redsquare était correcte, les mains vers le bas. Alors que vous pensez que vous avez "réparé le CSS pour le faire fonctionner dans IE6", jQuery le faisait tout le temps; tout ce que vous avez "réparé" vous a juste paru juste après avoir fait quelques changements. : hover ne fonctionne sur aucun élément autre que dans IE6. C'est la raison pour laquelle htmldog a passé de nombreuses heures à développer des dropdowns de poisson-chair, pour être compatible avec tous les navigateurs, en particulier pour IE6. et pourquoi @redsquare a dit que vous n'avez pas besoin de réinventer la roue. – albert

Questions connexes