html - 展开子菜单时,菜单项会更改其在 html/css 菜单中的位置

标签 html css

我有一个用 html/css 制作的简单菜单,我遇到的问题是,如果我将鼠标指针放在菜单项 (test2) 上以展开子菜单,那么菜单部分 (test1) 中的其他元素会改变它们的位置:https://jsfiddle.net/dsb87pxz/

<nav>
  <ul>
    <li>test1</li>
    <li>
      test2
      <ul>
        <li>test2.1</li>
        <li>test2.2</li>
      </ul>
    </li>
  </ul>
</nav>


nav > ul > li {
  display: inline-block;
}

nav > ul > li > ul {
    display: none;
}

nav > ul > li:hover > ul {
    display: block;
}

nav > ul > li > ul > li {
  display: block;
}

你能为这个问题提出解决方案吗?

最佳答案

vertical-align: top

nav>ul>li {
  display: inline-block;
  vertical-align: top;
}

nav>ul>li>ul {
  display: none;
}

nav>ul>li:hover>ul {
  display: block;
}

nav>ul>li>ul>li {
  display: block;
}
<nav>
  <ul>
    <li>test1</li>
    <li>
      test2
      <ul>
        <li>test2.1</li>
        <li>test2.2</li>
      </ul>
    </li>
    <li>
      test2
      <ul>
        <li>test2.1</li>
        <li>test2.2</li>
      </ul>
    </li>
  </ul>
</nav>

当您将鼠标悬停在第一级的列表项上时,它会影响右侧的列表项,因为 display: inline-block .

因此可以使用 float: leftdisplay: relative对于 <li>在第一级和display: absolute对于 <ul><li>里面.

示例

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

li {
  padding: 2px 5px;
}

nav>ul>li {
  float: left;
  position: relative;
}

nav>ul>li>ul {
  position: absolute;
  left: 0;
  display: none;
}

nav>ul>li:hover>ul {
  display: block;
}
<nav>
  <ul>
    <li>test1</li>
    <li>
      test2
      <ul>
        <li>test2.1</li>
        <li>test2.2</li>
      </ul>
    </li>
    <li>
      test2
      <ul>
        <li>test2.1</li>
        <li>test2.2</li>
      </ul>
    </li>
  </ul>
</nav>

关于html - 展开子菜单时,菜单项会更改其在 html/css 菜单中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47846456/

相关文章:

html - 使用clearfix取消 float

javascript - 奇怪的使用 Date 对象

javascript - 如果切换了侧边栏,则停止滚动/多余空间

javascript - 使用 javascript 和 XMLHTTPRequest 将 FormData POST 到 php

CSS 对齐问题 - 尝试使页面响应时无法将 div 保持在同一行

javascript - 选择第二个字

html - 如何修改仅属于特定类的链接?

html - 如何为 Bootstrap 3 事件类设计样式

html - 如何并排对齐这些元素?

internet-explorer - 为什么 MS 过滤器(dropShadow、glow 或 shadow)对 IE 中的 <span> 标签不起作用?