2014-01-08 2 views
0

Зеленая ul не расширяется, чтобы плавать, оставив две синие лики. Абсолютное значение для зеленого вызывает мое горе на высоте, не покрывающей его вложенные элементы. Как я могу пройти мимо этого, чтобы зеленый фон расширялся, чтобы покрыть его детей? Я хотел бы сохранить это как прямой css, но если jquery будет делать трюк, который им интересен. http://jsfiddle.net/B34AU/parent ul не распространяется на контент

ul, li { 
    list-style: none; 
    margin: 0; 
    padding: 0; 
} 
ul { 
    background: red; 
} 
li { 
    display: inline-block; 
    position: relative; 
    width: 100px; 
    background: yellow; 
    margin: 10px; 
} 
li ul { 
    display: none; 
    position: absolute; 
    background: green; 
    overflow: visible; 
    white-space: nowrap; 

} 
li:hover > ul { 
    display: block; 
} 
li > ul > li { 
    background: blue; 
    width: 200px; 
    display: inline-block; 
} 

li > ul > li > ul { 
    background: #cc0000; 
    display:block; 
} 

li > ul > li > ul > li { 
    background: #cc0000; 
    display:block; 
    width: 200px; 
    margin: 0; 
    padding: 0; 
} 
<ul> 
    <li> 
     1 
     <ul> 
      <li><a href="">1.1</a> 
      <ul> 
      <li><a href="">1.1.1</a></li> 
      <li><a href="">1.1.2</a></li> 
      <li><a href="">1.1.3</a></li> 
      </ul> 
      </li> 
      <li><a href="">1.2</a></li> 
      <li><a href="">1.3</a></li> 
     </ul> 
    </li> 
    <li> 
     2 
     <ul> 
      <li>2.1</li> 

     </ul> 
    </li> 
    <li> 
     3 
     <ul> 
      <li>3.1</li> 
      <li>3.2</li> 
     </ul> 
    </li> 
</ul> 
+0

Лучше использовать детей селекторы ('>') вместо потомков тех, которые медленнее. – Oriol

ответ

0

Я изменил эти CSS линии и его работает отлично, как и ожидалось.

Working Demo

изменили эти CSS

li > ul > li { 
    background: blue; 
    width: 200px; 
    display: inline-block; 
    vertical-align: top; /*Added this line*/ 
} 

li > ul > li > ul { 
    background: #cc0000; 
    display:block; 
    position: static;/*Added this line*/ 
} 
0

Demo

Вы должны установить width:

width: 440px; 

Просто используйте следующую формулу

numChilds * (marginLeft + borderLeft + paddingLeft + width + paddingRight + borderRigth + marginRigth) 
= 2 * (10+0+0+200+0+0+10) 
= 2 * 220 
= 440 
+0

Есть ли способ, которым зеленый расширяет или заключает контракты на основе количества подсистем? скажем, есть три под 1, один под 2 и два в три? – user520300

1

Если вы хотите расширить <ul> независимо от числа детей, вы можете использовать

li > ul { 
    white-space: nowrap; 
} 
li > ul > li { 
    display: inline-block; 
} 

Demo

+0

это работает для ширины, но теперь, если я хочу добавить вложенную ul в пределах 1.1, то есть 1.1.1, 1.1.2, 1.1.3 и т. Д. Высота просто добавляет скроллеры? – user520300

+0

@ user520300 Использовать 'li> ul {overflow: visible; } 'вместо' auto'. [** Demo **] (http://jsfiddle.net/3aVEC/2/) – Oriol

+0

почти. У меня 1.1.1, 1.1.2, 1.1.3 и т. Д., Не плавающие, они просто идут вниз под 1.1 и т. Д. Если высота зеленого фона может расширяться, чтобы покрыть всю вложенность, которая будет тем, что им ищет http: // jsfiddle .net/B34AU/ – user520300

Смежные вопросы