55

我正在尝试构建一个宽度灵活的 HTML/CSS 下拉菜单。由于position:absolute导航的第二级,我没有得到第一级的宽度。删除 position:absolute 将在悬停时移动所有以下元素...

我该如何解决这个问题?

这是代码:

ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

.level_1 > li {
  float: left;
  width: 45%;
  background-color: #2FA4CF;
  margin-right: 6px;
}

.level_1 > li:hover ul {
  display: block;
}

.level_2 {
  display: none;
  position: absolute;
  width: 45%;
}

.level_2 li {
  background-color: #535B68;
}
<ul class="level_1">
  <li>
    <a href="#">Level one (1)</a>
    <ul class="level_2">
      <li><a href="#">Level two (1)</a></li>
    </ul>
  </li>
  <li><a href="#">Level one (2)</a></li>
</ul>

<p>Paragraph</p>

在此处查看结果:http: //jsfiddle.net/5uf2Y/将 鼠标悬停在“第一级 (1)”上,您会看到,第二级的大小与第一级不同...

4

4 回答 4

82

您忘记了 100% 显示的两个元素。

在这里更正

第一个元素忘记了它: 在 level_1 > li 上的相对位置

.level_1 > li {
    float: left;
    width: 45%;
    background-color: #2FA4CF;
    margin-right: 6px;
    **position:relative;**
}

第二个元素更正它是: 更改第二个 li 的大小

.level_2 {
    display: none;
    position: absolute;
    width: 100%;
}

使用“ width:100%”,.level_2它会自动显示其父级的宽度。

于 2013-05-14T14:50:54.990 回答
13

添加position:relativelevel_1 > li

.level_1 > li {
    float: left;
    width: 45%;
    background-color: #2FA4CF;
    margin-right: 6px;
    position:relative;
}
于 2013-05-14T14:51:45.100 回答
0

嘿,伙计6px,你的第一排有一点边距,li这就是为什么它要大一点。我会使用左边而不是右边的边距。那应该固定间距。

于 2013-05-14T14:57:44.613 回答
0

尝试设置该body { width:100%;}属性,它将解决此问题,如下所示(添加到您的原始 CSS):

body{ width:100%;}
ul {
    margin: 0;
    padding: 0;
    list-style: none;
}
.level_1 > li {
    float: left;
    width: 45%;
    background-color: #2FA4CF;
    margin-right: 6px;
}
.level_1 > li:hover ul {
    display: block;
}
.level_2 {
    display: none;
    position: absolute;
    width: 45%;
}

.level_2 li {
    background-color: #535B68;
}
于 2013-05-14T14:55:14.510 回答