2014-12-07 106 views
1

的寬度我有一個HTML菜單至極包括列表項和子菜單:CSS忽略一個子元素

* { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
#navi { 
 
    width: 500px; 
 
    height: 50px; 
 
    margin: 0 auto; 
 
    position: relative; 
 
    background-color: lightcoral; 
 
} 
 
#navi > ul { 
 
    right: 0; 
 
    list-style: none; 
 
    position: absolute; 
 
} 
 
#navi > ul li { 
 
    text-align: right; 
 
    margin-left: 10px; 
 
    margin-right: 10px; 
 
    white-space: nowrap; 
 
    background-color: lightblue; 
 
} 
 
#navi > ul li, 
 
#navi > ul li * { 
 
    height: 50px; 
 
    line-height: 50px; 
 
    vertical-align: top; 
 
    display: inline-block; 
 
} 
 
#navi > ul li ul { 
 
    display: block; 
 
    white-space: nowrap;
<div id="navi"> 
 
    <ul> 
 
    <li> 
 
     <a>top level a</a> 
 
     <ul> 
 
     <li> 
 
      <li> 
 
      <a>a sub level a</a> 
 
      </li> 
 
      <li> 
 
      <a>a sub level b</a> 
 
      </li> 
 
     </ul> 
 
     </li> 
 
     <li> 
 
     <a>top level b</a> 
 
     <ul> 
 
      <li> 
 
      <a>b sub level a</a> 
 
      </li> 
 
     </ul> 
 
     </li> 
 
    </ul> 
 
</div>

我想要的子菜單是水平頂級菜單的下方。子菜單應該在懸停時出現,並且與父列表項元素一起定位。

所有隱藏和顯示的東西都完成了,我的菜單工作,除了一個問題。

我想要的子菜單(ul)至效應的父元素的寬度,使得在頂部菜單項打下每個他人和子菜單下面膨脹。

我需要告訴li元素將其寬度基於第一個子元素(a),並忽略子元素ul元素的寬度。

此外,我不想使用JavaScript或類似的東西,一個普通的CSS解決方案將是美麗的!

我該如何做到這一點?

+0

如果您也可以發佈小提琴,那麼這將非常有用。 – Lal 2014-12-07 17:54:26

+0

我會看看我能做些什麼,CSS有點複雜,需要一點時間來提取必要的代碼。 – 2014-12-07 17:56:50

+0

你會更好..我想.. :) :) – Lal 2014-12-07 18:02:25

回答

1

定位子菜單絕對做你想做的。

演示:http://jsfiddle.net/v3xLkvke/1/

註釋出位置屬性將改變含li的寬度。

+0

但是,我該如何處理第一個/最後一個元素的問題?分中心可以在左邊或右邊突出......這不能用純CSS完成,對吧?也許flex或者什麼? – 2014-12-07 18:44:00

+0

是的,但它不會自動對齊第二個元素和next元素。我很確定沒有純粹的CSS解決方案來確保元素不突出。 – 2014-12-07 19:03:41

+0

一個注意事項:'ul'(用'position:absolute;')粘在父'li'的左邊緣水平上。當我做'let/right:0'時,'這個位置與父'li'沒有關係。這有什麼關係? – 2014-12-08 02:37:00