Высота относительного деления составляет 100%, пока я не установлю высоту: 100% - PullRequest
1 голос
/ 09 апреля 2020

Настройка

.container {
  position: relative;
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  flex: 1 1;
  padding: 28px;
  width: 100%;
  background-color: #eee;
}

.bar {
  position: relative;
  width: 5px;
  background-color: blue;
}
<div class="container">
  <div class="bar"></div>
  <div>
    lskdjf
  </div>
</div>

Обратите внимание, что синяя полоса достигает полной высоты контейнера, минус отступы.

Если я добавлю height: 100% к .bar класс, однако, высота исчезает.

.bar {
  position: relative;
  width: 5px;
  background-color: blue;
  height: 100%;
}

Вопрос

Я полагаю, что на самом деле установка высоты на 100% сбивает с толку браузер, потому что родительский объект на самом деле не имеет высоты, которая установлена , но какое свойство pre-setting-height-to-100% позволяет высоте быть равной 100%? И, учитывая, что это на самом деле моя цель, было бы «правильно» просто не указывать 100%, или есть лучший способ обеспечить, чтобы элемент .bar достиг полной высоты?

1 Ответ

1 голос
/ 09 апреля 2020

Это происходит из-за растяжения по умолчанию, примененного к контейнеру flexbox, из-за которого все элементы растягиваются, чтобы соответствовать их родительской высоте.

.container {
  position: relative;
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  flex: 1 1;
  padding: 28px;
  width: 100%;
  background-color: #eee;
}

.bar {
  position: relative;
  width: 5px;
  background-color: blue;
}
<div class="container">
  <div class="bar"></div>
  <div>
    lskdjf
  </div>
</div>

Если свойство размера креста , гибкий элемент вычисляется как auto , и ни одно из полей поперечной оси не является автоматическим гибкий элемент растянут . Его используемое значение - это длина, необходимая для того, чтобы размер креста поля поля элемента был как можно ближе к тому же размеру, что и линия, при этом соблюдая ограничения, накладываемые min-height / min-width / max-height / max- ширина. ref

Если вы измените выравнивание, этого больше не произойдет

.container {
  position: relative;
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  flex: 1 1;
  padding: 28px;
  width: 100%;
  background-color: #eee;
  align-items:flex-start;
}

.bar {
  position: relative;
  width: 5px;
  background-color: blue;
}
<div class="container">
  <div class="bar"></div>
  <div>
    lskdjf
  </div>
</div>

И если вы установите какое-либо значение высоты, размер больше не будет автоматически с учетом вышеуказанной спецификации, поэтому растяжение больше не будет применяться, и вы попадете в проблема высоты в процентах, которая приведет к падению высоты до auto , поскольку родительская высота не установлена ​​явно.

Указывает процентную высоту. Процент рассчитывается относительно высоты содержащего блока сгенерированного блока. Если высота содержащего блока не указана явно (т. Е. Зависит от высоты содержимого), и этот элемент не является абсолютно позиционированным, значение вычисляется как 'auto'. ref

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...