下拉菜单 - 使<ul>子菜单100%宽度

elm*_*ano 4 css width drop-down-menu

我想要实现客户想要的东西,我有点疯狂.我可以告诉他们这不可能,但我喜欢一个很好的挑战;)

基本上,我正在尝试下拉菜单<ul>,或者:

ul.menu li ul
Run Code Online (Sandbox Code Playgroud)

被div包围.的种类:

<ul class="menu">
   <li>
       <a href="#">Item</a>
       <div class="submenu">
           <ul>.....</ul>
       </div>
   </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我希望div具有宽度:100%并填充页面的整个宽度,但UL内部对齐到适当的宽度<li>.

问题是<div class="submenu">它将与relative容器一样宽,无论是主要<ul class="menu">还是<div>包装容器<ul class="menu">.

该网站本身宽度为1000像素,中心宽度 margin:0 auto;

我希望我已经正确地解释了自己:S这是一个模拟的链接我放在一起:下拉菜单模拟了

任何帮助高度赞赏.

谢谢,亚历克斯

dou*_*rve 9

老问题,但希望回答会帮助别人.一个月前我不得不做类似的工作.

这是我基本上做的一个小提琴(注意:你必须做一些额外的工作,以便在旧的IE中工作相同):http://jsfiddle.net/doubleswirve/xbLrW/2/

我没有使用嵌套div而是坚持使用嵌套列表.使用如下基本标记:

<div class="nav">
  <ul>

    <li>
      <a href="#">Products</a>
      <ul>
        <li><a href="#">Widget A</a></li>
        <li><a href="#">Widget B</a></li>
        <li><a href="#">Widget C</a></li>
      </ul>
    </li>

    <li>
      <a href="#">Locations</a>
      <ul>
        <li><a href="#">Location A</a></li>
        <li><a href="#">Location B</a></li>
        <li><a href="#">Location C</a></li>
      </ul>
    </li>

    <li>
      <a href="#">Staff</a>
      <ul>
        <li><a href="#">President</a></li>
        <li><a href="#">VP</a></li>
        <li><a href="#">Manager</a></li>
      </ul>
    </li>

  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

您可以使用以下样式:

/* GENERAL */

body { overflow-x: hidden; } /* trick from css-tricks comments */

/* FIRST LEVEL */

.nav > ul > li { 
  display: inline-block; 
  position: relative; 
  padding: 3px 10px 3px 0;
  z-index: 100;
}

/* SECOND LEVEL */

.nav > ul > li > ul {
  position: absolute;
  left: 0;
  top: 100%;
  padding: 0 1000em; /* trick from css-tricks comments */
  margin: 0 -1000em; /* trick from css-tricks comments */
  z-index: 101;
  visibility: hidden;
  opacity: 0;
  background: rgba(255, 240, 240, 0.8);
}

.nav > ul > li:hover > ul {
  visibility: visible;
  opacity: 1;
}

.nav > ul > li > ul > li {
  padding: 3px 0;
}
Run Code Online (Sandbox Code Playgroud)

如果你想让CSS变得时髦,你可以将它添加到第二级ul:

.nav > ul > li > ul {
  ...
  -webkit-transition: all 0.3s ease;
  -moz-transition: all 0.3s ease;
  -o-transition: all 0.3s ease;
  transition: all 0.3s ease;
}
Run Code Online (Sandbox Code Playgroud)

如果有人有兴趣在旧的IE中使这个工作类似或想要更深层次的嵌套列表,请告诉我.

为了给你一个良好的开端,这里有一些有用的链接帮助我:

Chris Coyier在工作中真的涵盖了我们.