Какой атрибут CSS хранит выпадающее меню под своим родительским li?

#html #css #css-position

#HTML #css #css-position

Вопрос:

Я создал панель навигации. Он содержит 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: defau<
}

#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">Myamp;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=1amp;cat_id=2'>Dell</a></li>
          <li class='dropdown-li'><a href='home.php?brand_id=4amp;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=2amp;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>  

Комментарии:

1. вы можете показать это где-нибудь или в codepen?

2. <li> имейте, position: absolute; чтобы они располагались к ближайшему position: abso/rel/fixed элементу. Назначьте position: relative каждому родительскому элементу <li>

Ответ №1:

Взгляните на это. Передайте position;relative вашему li и установите left и right вашего nav-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: defau<
}

#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">Myamp;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=1amp;cat_id=2'>Dell</a></li>
          <li class='dropdown-li'><a href='home.php?brand_id=4amp;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=2amp;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>