Это происходит из-за растяжения по умолчанию, примененного к контейнеру 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