Выпадающее меню получает странное положение - PullRequest
0 голосов
/ 27 февраля 2019

Вот код для моей панели инструментов:

.toolbar {
  list-style-type: none;
  height: 90px;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #252525;
  box-shadow: 1px 1px 5px #0d0d0d;
}

.centered_toolbar {
  display: flex;
  align-items: center;
  justify-content: center;
}

.toolbar ul {
  list-style-type: none;
  list-style: none;
}

.toolbar li {
  float: left;
}

.toolbar a {
  display: block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-family: 'Poppins', sans-serif;
}

.toolbar a:hover {
  color: #cccccc;
}

.dropdown a {
  float: left;
  font-size: 16px;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

.dropdown {
  float: left;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: inherit;
  font-family: inherit;
  margin: 0;
}

.navbar a:hover,
.dropdown:hover .dropbtn {
  background-color: red;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {
  background-color: #ddd;
}

.dropdown:hover .dropdown-content {
  display: block;
}
<div class="toolbar">
  <div class="centered_toolbar">
    <img src="./logo.png" width="200px" height="auto" style="position: absolute; left: 0px; margin-left: 30px;">
    <ul>
      <li class="active"><a a href='#' onclick="goToMainPage()"><i class="dashboard"></i>Dashboard</a></li>
      <li><a a href='#' onclick="goToNoteslistPage()"><i class="notenliste"></i>Notenliste</a></li>
    </ul>
    <a href='#' onclick="myFunction()" style="position: absolute; right: 0px; margin-right: 120px;">

      <div class="dropdown">
        <button class="dropbtn">Dropdown
                          <i class="fa fa-caret-down"></i>
                        </button>
        <div class="dropdown-content">
          <a href="#">Link 1</a>
          <a href="#">Link 2</a>
          <a href="#">Link 3</a>
        </div>
      </div>

    </a>
    <a href='#' onclick="logout()" style="position: absolute; right: 0px; margin-right: 20px; font-family: 'Poppins', sans-serif;"><i
                            class="logout"></i>Logout</a>
  </div>
</div>

Проблема лучше всего описана с помощью следующего изображения: https://www.dropbox.com/s/wt47iz5r5fhjrss/bug.PNG?dl=0
Раскрывающееся меню не находится под кнопкой раскрывающегося списка.И не только это.С этим кодом кнопка «Выпадающий» становится ниже, чем другие элементы на панели инструментов.Пожалуйста, помогите мне с этим.

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Вот, пожалуйста.

Я бы не использовал встроенный CSS, если только вы НЕ ДОЛЖНЫ, это делает код действительно сложным для поддержки по мере роста вашего проекта.В вашем случае position: absolute также не нужны.

.toolbar {
  list-style-type: none;
  height: 90px;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #252525;
  box-shadow: 1px 1px 5px #0d0d0d;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.toolbar ul {
  list-style-type: none;
  list-style: none;
}

.toolbar li {
  display: inline-block;
}

.toolbar a,
.dropbtn {
  display: block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-family: 'Poppins', sans-serif;
}

.toolbar a:hover {
  color: #cccccc;
}

.dropdown a {
  float: left;
  font-size: 16px;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

.dropdown .dropbtn {
  font-size: 16px;
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: inherit;
  margin: 0;
}

.navbar a:hover,
.dropdown:hover .dropbtn {
  background-color: red;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {
  background-color: #ddd;
}

.dropdown:hover .dropdown-content {
  display: block;
}
<div class="toolbar">
  <div class="logo">
    <img src="./logo.png" width="100px" height="auto">
  </div>
  <ul>
    <li class="active">
      <a a href='#' onclick="goToMainPage()"><i class="dashboard"></i>Dashboard</a>
    </li>
    <li><a a href='#' onclick="goToNoteslistPage()"><i class="notenliste"></i>Notenliste</a></li>
    <li>
      <div class="dropdown">
        <button class="dropbtn">Dropdown<i class="fa fa-caret-down"></i></button>
        <div class="dropdown-content">
          <a href="#">Link 1</a>
          <a href="#">Link 2</a>
          <a href="#">Link 3</a>
        </div>
      </div>
    </li>
  </ul>
  <ul>
    <li>
      <a href='#' onclick="logout()">
        <i class="logout"></i>Logout
      </a>
    </li>
  </ul>
</div>
0 голосов
/ 27 февраля 2019

Это из-за какой-то ошибки в настройке CSS.Вы можете использовать шаблоны начальной загрузки для вашей помощи. Посмотрите, поможет ли это

, пожалуйста, Upvote, если это поможет.

0 голосов
/ 27 февраля 2019

Если это ваше требование, вы можете удалить атрибут позиции.Атрибут позиции смещает вашу кнопку, но выпадающие значения не смещают позицию на основе вашего атрибута позиции.

enter image description here

0 голосов
/ 27 февраля 2019

Это то, что вы ищете?

Ваш HTML-макет был немного запутанным, вам нужно было включить раскрывающийся список в ваш список ul li с другими элементами.Я изменил ваш HTML и CSS ниже.

.toolbar {
  list-style-type: none;
  height: 90px;
  margin: 0;
  padding: 0;
  background-color: #252525;
  box-shadow: 1px 1px 5px #0d0d0d;
}

.centered_toolbar {
  display: flex;
  align-items: center;
  height: 100%;
  margin: 0 30px;
  justify-content: space-between;
}

.toolbar ul {
  list-style-type: none;
  list-style: none;
}

.toolbar li {
  float: left;
}

.toolbar a {
  display: block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-family: 'Poppins', sans-serif;
}

.toolbar a:hover {
  color: #cccccc;
}

.dropdown a {
  float: left;
  font-size: 16px;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

.dropdown:hover {
  background-color: red;
}

.dropdown-content {
  display: none;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
  flex-direction: column;
  padding: 0;
  position: absolute;
  top: 75px;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {
  background-color: #ddd;
}

.dropdown:hover .dropdown-content {
  display: flex;
}
<div class="toolbar">
  <div class="centered_toolbar">
    <img src="./logo.png" width="200px" height="auto">
    <ul>
      <li class="active"><a href='#' onclick="goToMainPage()"><i class="dashboard"></i>Dashboard</a></li>
      <li><a href='#' onclick="goToNoteslistPage()"><i class="notenliste"></i>Notenliste</a></li>
      <li class="dropdown"><a href='#' onclick="myFunction()">Dropdown<i class="fa fa-caret-down"></i></a>
        <ul class="dropdown-content">
          <li><a href="#">Link 1</a></li>
          <li><a href="#">Link 2</a></li>
          <li><a href="#">Link 3</a></li>
        </ul>
      </li>
    </ul>
    <a href='#' onclick="logout()"><i class="logout"></i>Logout</a>
  </div>
</div>

При дальнейшей проверке я исправил свой ответ следующим образом:

Я удалил position:absolute из изображения логотипа и кнопки выхода из системы ииспользуется justify-content:space-between на контейнере.Это более чистый способ равномерного распределения пунктов меню.

...