Поместить последний элемент гибкости в конец контейнера
Этот вопрос касается браузера с полной поддержкой css3, включая flexbox.
У меня есть гибкий контейнер с некоторыми элементами. Они все оправданы для начала .end
но я хочу, чтобы последний элемент .end
был оправдан для гибкого конца. Есть ли хороший способ сделать это, не изменяя HTML и не прибегая к абсолютному позиционированию?
.container {
display: flex;
flex-direction: column;
outline: 1px solid green;
min-height: 400px;
width: 100px;
justify-content: flex-start;
}
p {
height: 50px;
background-color: blue;
margin: 5px;
}
<div class="container">
<p></p>
<p></p>
<p></p>
<p class="end"></p>
</div>
Ответы
Ответ 1
Модуль гибкой коробки - 8.1. Выравнивание с автоматическими полями
Автоматические поля на элементах flex имеют эффект, очень похожий на автоматические поля в потоке блоков:
-
При расчетах гибких оснований и гибких длин автоматические поля обрабатываются как 0.
-
Перед выравниванием через justify-content
и align-self
любое положительное свободное пространство распространяется на автоматические поля в этом измерении.
Поэтому вы можете использовать margin-top: auto
чтобы распределить пространство между другими элементами и последним элементом. Это будет позиционировать элемент внизу.
.end {
margin-top: auto;
}
Вы также можете избежать использования класса и использовать псевдокласс класса :last-of-type
/last-child
.
p:last-of-type {
margin-top: auto;
}
.container {
display: flex;
flex-direction: column;
outline: 1px solid green;
min-height: 400px;
width: 100px;
justify-content: flex-start;
}
p {
height: 50px;
background-color: blue;
margin: 5px;
}
.end {
margin-top: auto;
}
<div class="container">
<p></p>
<p></p>
<p></p>
<p class="end"></p>
</div>
Ответ 2
Этот принцип flexbox также работает горизонтально
При расчете гибких оснований и гибких длин автоматические поля рассматриваются как 0.
До выравнивания через justify-content и align-self любое положительное свободное пространство распределяется по автоматическим полям в этом измерении.
Установка автоматического левого поля для последнего элемента сделает эту работу.
.last-item {
margin-left: auto;
}
Пример кода:
.container {
display: flex;
width: 400px;
outline: 1px solid black;
}
p {
height: 50px;
width: 50px;
margin: 5px;
background-color: blue;
}
.last-item {
margin-left: auto;
}
<div class="container">
<p></p>
<p></p>
<p></p>
<p class="last-item"></p>
</div>