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

#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 并设置 leftrightnav-dropdown-menu

#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/

10-17 02:53