html - 什么 CSS 属性将下拉菜单保留在其父 li 之下?

标签 html css css-position

我创建了一个导航栏。它包含 li 元素,一些 li 元素包含下拉菜单。将鼠标悬停在特定的 li 元素上,下拉菜单将变为可见。问题是下拉菜单没有出现在其父 li 元素下。相反,它们都出现在远离其父元素的相同位置(在 Logo 下方)。我错过了什么?

#navigation {
  height: 50px;
  width: 95%;
  margin: auto;
  box-shadow: 0px 0 1px 1px #ddd;
  padding: 10px;
  background-color: #fff;
}

#navigation #nav {
  list-style: none;
  margin: 0;
  padding: 0;
}

#navigation #nav li.nav-block,
#navigation #nav li#logo-container {
  display: inline;
  margin-left: 10px;
  padding: 20px 0px;
  width: 50px;
  text-align: center;
  height: 40px;
  line-height: 50px;
  font-family: sans-serif;
  margin: 2px 0px;
}

#navigation #nav li a.nav-button,
#navigation #nav li a#logo {
  text-decoration: none;
  color: #333;
  padding: 15px 40px;
}

#navigation #nav li.nav-block:hover {
  background-color: skyblue;
}

#navigation #nav li.nav-block:hover a.nav-button {
  color: #fff;
}

a.category {
  cursor: default;
}

#logo-container {
  margin-right: 10px;
}

#logo {
  font-family: sans-serif;
  font-weight: bold;
  color: #333;
}

#logo-span {
  color: skyblue;
}

.nav-dropdown-menu {
  display: none;
  z-index: 11;
  position: absolute;
  width: 200px;
  min-height: 50px;
}

.nav-dropdown-menu>ul {
  display: block;
}

.nav-dropdown-menu>ul>.dropdown-li {
  display: block !important;
  background-color: #fff;
  border: 1px solid #fff;
  box-shadow: 0 0 1px 1px #ddd;
  width: 100%;
}

#navigation #nav li.nav-block:hover>.nav-dropdown-menu {
  display: block;
}

.nav-dropdown-menu>ul>.dropdown-li a {
  text-decoration: none;
  padding: 10px 50px;
  color: #333;
}

.nav-dropdown-menu>ul>.dropdown-li:hover {
  background-color: #333;
}

.nav-dropdown-menu>ul>.dropdown-li:hover a {
  color: #fff;
}
<div id="navigation">
  <ul id="nav">
    <li id="logo-container"><a id="logo">My&nbsp;<span id="logo-span">Logo</span></a></li>
    <li class='nav-block'><a class='nav-button category'>Handy</a>
      <div class='nav-dropdown-menu'>
        <ul>
          <li class='dropdown-li'><a href='home.php?brand_id=1&cat_id=2'>Dell</a></li>
          <li class='dropdown-li'><a href='home.php?brand_id=4&cat_id=2'>Samsung</a></li>
        </ul>
      </div>
      <li class='nav-block'><a class='nav-button category'>Tablet</a>
        <div class='nav-dropdown-menu'>
          <ul>
            <li class='dropdown-li'><a href='home.php?brand_id=2&cat_id=9'>Sony</a></li>
          </ul>
        </div>
        <li class="nav-block"><a class="nav-button" href="registration.php">Sign Up</a></li>

        <li class="nav-block"><a class="nav-button" href="main_login.php">Login</a></li>
  </ul>
</div>

最佳答案

看看这个。将 position;relative 给你的 li 并设置你的 nav-dropdown-menu 的 leftright

#navigation {
  height: 50px;
  width: 95%;
  margin: auto;
  box-shadow: 0px 0 1px 1px #ddd;
  padding: 10px;
  background-color: #fff;
}

#navigation #nav {
  list-style: none;
  margin: 0;
  padding: 0;
}

#navigation #nav li.nav-block,
#navigation #nav li#logo-container {
  display: inline;
  margin-left: 10px;
  padding: 20px 0px;
  width: 50px;
  text-align: center;
  height: 40px;
  line-height: 50px;
  font-family: sans-serif;
  margin: 2px 0px;
}

#navigation #nav li a.nav-button,
#navigation #nav li a#logo {
  text-decoration: none;
  color: #333;
  padding: 15px 40px;
}

#navigation #nav li.nav-block:hover {
  background-color: skyblue;
}

#navigation #nav li.nav-block:hover a.nav-button {
  color: #fff;
}

a.category {
  cursor: default;
}

#logo-container {
  margin-right: 10px;
}

#logo {
  font-family: sans-serif;
  font-weight: bold;
  color: #333;
}

#logo-span {
  color: skyblue;
}

.nav-block {
  position: relative;
}

.nav-dropdown-menu {
  display: none;
  z-index: 11;
  position: absolute;
  left: -39px;
  right: 0;
  width: 200px;
  min-height: 50px;
}

.nav-dropdown-menu>ul {
  display: block;
}

.nav-dropdown-menu>ul>.dropdown-li {
  display: block !important;
  background-color: #fff;
  border: 1px solid #fff;
  box-shadow: 0 0 1px 1px #ddd;
  width: 100%;
}

#navigation #nav li.nav-block:hover>.nav-dropdown-menu {
  display: block;
}

.nav-dropdown-menu>ul>.dropdown-li a {
  text-decoration: none;
  padding: 10px 50px;
  color: #333;
}

.nav-dropdown-menu>ul>.dropdown-li:hover {
  background-color: #333;
}

.nav-dropdown-menu>ul>.dropdown-li:hover a {
  color: #fff;
}
<div id="navigation">
  <ul id="nav">
    <li id="logo-container"><a id="logo">My&nbsp;<span id="logo-span">Logo</span></a></li>
    <li class='nav-block'><a class='nav-button category'>Handy</a>
      <div class='nav-dropdown-menu'>
        <ul>
          <li class='dropdown-li'><a href='home.php?brand_id=1&cat_id=2'>Dell</a></li>
          <li class='dropdown-li'><a href='home.php?brand_id=4&cat_id=2'>Samsung</a></li>
        </ul>
      </div>
      <li class='nav-block'><a class='nav-button category'>Tablet</a>
        <div class='nav-dropdown-menu'>
          <ul>
            <li class='dropdown-li'><a href='home.php?brand_id=2&cat_id=9'>Sony</a></li>
          </ul>
        </div>
        <li class="nav-block"><a class="nav-button" href="registration.php">Sign Up</a></li>

        <li class="nav-block"><a class="nav-button" href="main_login.php">Login</a></li>
  </ul>
</div>

关于html - 什么 CSS 属性将下拉菜单保留在其父 li 之下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55204025/

相关文章:

javascript - 这个讨厌的按钮是双跳

HTML 按钮和 div 出现在导航栏上,但使用 z-index 会破坏动画

css - 多个 onClick 事件触发

css - Position Fixed Child Restricted By Position Relative 父容器的 Z-index

javascript - 如何在没有硬编码维度的情况下扩展包含位置相对/绝对子项的 UL 元素?

javascript - 使用javascript清除固定 header

html - 阻止文本 div 重叠

javascript - ng-click 不适用于我的任何 div

css - 如何在悬停超链接上设置图像旋转

php - Wordpress, slider 中的最新帖子