2009-07-03 6 views
0

J'essaie de créer un menu vertical et j'ai besoin de faire un sous-menu multicolonne. Mon code ressemble à ceci:float imbriqué li

<style type="text/css" media="screen"> 


#nav { 
     width: 100px; 
    } 
    #nav li { 
     position: relative; 
     background-color: red; 
    } 
    #nav li:hover .subnav { 
     display: block; 
    } 
    .subnav { 
     position: absolute; 
     top: 0; 
     left: 100px; 
     display: none; 
    } 
    .subnav > li { 
     float: left; 
    } 
</style> 



<ul id="nav"> 
    <li> 
     <a href="#">Link 1</a> 
     <ul class="subnav"> 
      <li> 
       <ul> 
        <li>Col 1.1</li> 
        <li>Col 1.2</li> 
       </ul> 
      </li> 
      <li> 
       <ul> 
        <li>Col 2.1</li> 
        <li>Col 2.2</li> 
       </ul> 
      </li> 
      <li> 
       <ul> 
        <li>Col 3.1</li> 
        <li>Col 3.2</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 

Ma question est de savoir pourquoi .subnav> li ne flotte pas à gauche? Je ne veux pas définir l'attribut de largeur, car je ne sais pas combien de temps l'élément de sous-menu sera.

Répondre

4

Je pense que la raison pour laquelle il ne fonctionne pas est à cause de cette partie du CSS:

#nav { 
    width: 100px; 
} 

Cela ne laisse pas le sous-nav une pièce horizontale, de sorte que tous les flotteurs wrap à la ligne suivante . Supprimer la largeur de #nav apparaît pour laisser faire la bonne chose. Si vous faites cela, vous devrez vous assurer que le texte des éléments de menu de niveau supérieur ne dépasse pas 100 pixels; sinon, le sous-nav le chevauchera.

(il ne fonctionne toujours pas dans IE, cependant).

+0

vous avez raison, mais si j'enlève la largeur de # nav, cela signifie que sa largeur sera égale à la largeur de son parent (c'est-à-dire sa largeur). Cependant, sur mon site, ce #nav est situé à l'intérieur d'une plongée avec une largeur de 100px. Si je prends ce #nav en dehors de la div alors la disposition entière sera un gâchis. –

+0

Ensuite, je ne vois pas de moyen de définir la largeur sur le sous-nav. Si vous le définissez sur la largeur maximale disponible (en supposant que le corps a une largeur fixe) et lui donnez un arrière-plan transparent, peu importe le nombre d'éléments sous-nav. – Jacob

+0

merci pour votre réponse –

0

Est-ce une solution viable:

.subnav ul li { 
    display: inline; 
} 

(Le vol stationnaire ne semble pas fonctionner dans IE si c'est une préoccupation).

+0

non, cela n'a pas fonctionné. J'utilise ff3.5 et safari 4 sur un mac et je ne suis pas inquiet à ce sujet pour l'instant. –