2014-12-07 75 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