Поскольку средний элемент содержит только абсолютные элементы, поэтому внутри него нет содержимого потока, определяющего его высоту. Тогда значение по умолчанию align-items
равно stretch , поэтому ваш элемент будет растянут по умолчанию, а его высота будет равна его родительской высоте, НО, если вы измените выравнивание, элемент будет учитывать его содержимое для определения высоты, и так как нет никакого элемента в потоке, у которого будет height:0
, что означает, что индикатор выполнения, определенный top:0;bottom:0
, также будет иметь высоту 0
.
Чтобы избежать этого, оставьте хотя бы один элемент без позиции (тот, который содержит текст), чтобы средний элемент имел некоторое содержимое в потоке, а его высота будет отличаться от 0
в зависимости от того, какое выравнивание будет .
body {
background-color: gray;
}
.menu {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
padding: 5px 0;
background-color: hsl(0, 0%, 30%);
}
.menu-item {
position: relative;
z-index:0;
display: flex;
justify-content: center;
align-items: center;
flex: 1;
font-size: 13px;
color: hsl(0, 0%, 70%);
}
.menu-item.progress {
background-color: gray;
}
.progress-bar {
position: absolute;
z-index:-1;
top: 0;
bottom: 0;
left: 0;
width: 83%;
background-color: hsla(191, 58%, 46%, 1);
}
.progress-value {
color: hsl(0, 0%, 90%);
}
<div class="menu">
<div class="menu-item">Stuff</div>
<div class="menu-item progress">
<div class="progress-bar"></div>
<div class="progress-value">83</div>
</div>
<div class="menu-item">Things</div>
</div>