Подтвердить что ты не робот

Позиция CSS абсолютная и ширина родительского контейнера в процентах

Я пытаюсь создать раскрывающееся меню HTML/CSS, которое является гибким по ширине. Из-за position:absolute для второго уровня навигации я не получаю ширину первого уровня. Удаление позиции: абсолютное будет перемещать все следующие элементы при наведении...

Как я могу это решить?

Вот код:

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

.level_1 > li {
  float: left;
  width: 45%;
  background-color: #2FA4CF;
  margin-right: 6px;
}

.level_1 > li:hover ul {
  display: block;
}

.level_2 {
  display: none;
  position: absolute;
  width: 45%;
}

.level_2 li {
  background-color: #535B68;
}
<ul class="level_1">
  <li>
    <a href="#">Level one (1)</a>
    <ul class="level_2">
      <li><a href="#">Level two (1)</a></li>
    </ul>
  </li>
  <li><a href="#">Level one (2)</a></li>
</ul>

<p>Paragraph</p>
4b9b3361

Ответ 1

Вы забыли два элемента для отображения на 100%.

Коррекция здесь

1-й элемент забывает об этом: Позиция относительная на уровне_1 > li

.level_1 > li {
    float: left;
    width: 45%;
    background-color: #2FA4CF;
    margin-right: 6px;
    **position:relative;**
}

2-й элемент исправляет его: изменить размер 2-го li

.level_2 {
    display: none;
    position: absolute;
    width: 100%;
}

С "width:100%" на .level_2 он автоматически поворачивается с шириной родительского

Ответ 2

Добавить position:relative в level_1 > li

.level_1 > li {
    float: left;
    width: 45%;
    background-color: #2FA4CF;
    margin-right: 6px;
    position:relative;
}

Ответ 3

Попробуйте установить свойство body { width:100%;}, оно устранит эту проблему, как показано ниже (добавляется в исходный CSS):

body{ width:100%;}
ul {
    margin: 0;
    padding: 0;
    list-style: none;
}
.level_1 > li {
    float: left;
    width: 45%;
    background-color: #2FA4CF;
    margin-right: 6px;
}
.level_1 > li:hover ul {
    display: block;
}
.level_2 {
    display: none;
    position: absolute;
    width: 45%;
}

.level_2 li {
    background-color: #535B68;
}

Ответ 4

Эй, у тебя есть запас 6px в вашей первой строке li, поэтому его немного больше. Я бы использовал запас слева, а не правый. Это должно исправить интервал.