#html #css #flexbox
Вопрос:
Я пытаюсь получить макет следующего вида с помощью flexbox.
| |
| |
| CENTER FIXED ELEMENT |
| |
| BOTTOM FIXED ELEMENT |
Это мой грубый CSS flexbox.
.wrapper{
display:flex;
justify-content:center;
flex-direction:column;
}
.bottom-element {
align-self:flex-end;
}
Идея заключается в том, что все, что находится внутри wrapper
, будет выровнено по центру и выровняется .bottom-element
по нижней части коробки.
Однако это работает не так, как ожидалось, и нижний элемент появляется сразу после центрального элемента.
Есть ли другой способ решить эту проблему? или что-то глупое, что я мог пропустить?
Ответ №1:
Обновление 1:
Центрируйте «середину» по вертикали всей «обертки».
.wrapper {
height: 100px;
width: 100px;
display: flex;
flex-direction: column;
justify-content: center;
position: relative;
border: 1px solid red;
}
.middle,
.bottom {
background: aqua;
}
.bottom {
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
<div class="wrapper">
<div class="middle">middle</div>
<div class="bottom">bottom</div>
</div>
Обновление 2:
Центрируйте «середину» по вертикали в пределах доступного пространства «обертки» минус «дно».
.wrapper {
height: 100px;
width: 100px;
display: flex;
flex-direction: column;
border: 1px solid red;
}
.middle,
.bottom {
background: aqua;
margin-top: auto;
}
<div class="wrapper">
<div class="middle">middle</div>
<div class="bottom">bottom</div>
</div>
Предыдущий ответ:
Идея заключается в создании пустого заполнителя для верхнего элемента с псевдоконтентом CSS, а затем просто используйте flex-direction: column;
justify-content: space-between;
, чтобы выровнять все 3 элемента по вертикали.
Примечание: средний div может быть не совсем посередине, когда речь заходит о нескольких строках текста в элементах flex.
.wrapper {
height: 100px;
width: 100px;
display: flex;
flex-direction: column;
justify-content: space-between;
border: 1px solid red;
}
.wrapper:before {
content: "0A0";
}
.wrapper>div {
background: aqua;
}
<div class="wrapper">
<div>middle</div>
<div>bottom</div>
</div>
Ответ №2:
.container {
display: flex;
flex-direction: column;
background-color: red;
height: 10em;
}
.third {
margin-top: auto;
}
.first{
margin-top: auto;
}
<div class="container">
<div class="first">First</div>
<div class="second">Second</div>
<div class="third">Third</div>
</div>