Кроме изученных нами типов блочных моделей
есть еще одна - флекс элементы. Для того,
чтобы получить такие элементы, нужно родителю
этих элементов написать свойство display
в значении flex
. Сам родитель останется
блочным элементом, а вот его потомки станут
флекс элементами.
Флекс элементы, подобно блочным могут иметь
ширину и высоту, margin
и padding
.
Однако, в отличие от блочных, по умолчанию
флекс элементы выстраиваются в ряд внутри
своего родителя.
Давайте попробуем:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
</div>
.parent {
display: flex; /* потомки будут флекс элементами */
width: 300px;
height: 200px;
border: 1px solid red;
}
.child {
width: 50px;
height: 50px;
border: 1px solid green;
}
:
Высота родителя
Если родителю флекс элементов не задана высота, то по высоте он будет растягиваться своим содержимым, то есть высотой потомков:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
</div>
.parent {
display: flex;
width: 300px;
border: 1px solid red;
}
.child {
width: 50px;
height: 50px;
border: 1px solid green;
}
:
Ширина родителя
Если родителю флекс элементов не задана ширина, то по ширине он займет все доступное место:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
</div>
.parent {
display: flex;
border: 1px solid red;
}
.child {
width: 50px;
height: 50px;
border: 1px solid green;
}
:
Строчно-блочный родитель
Вместо значения flex для свойства display
родителю можно поставить значение inline-flex
.
В этом случае этот родитель будет вести себя,
как строчно-блочный элемент.
Например, если не задать ширину родителя, то его ширина сформируется шириной потомков:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
</div>
.parent {
display: inline-flex;
border: 1px solid red;
}
.child {
width: 50px;
height: 50px;
border: 1px solid green;
}
:
Отступы padding родителя
Родителю можно задать отступы padding
:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
</div>
.parent {
display: inline-flex;
padding: 10px;
border: 1px solid red;
}
.child {
width: 50px;
height: 50px;
border: 1px solid green;
}
:
Отступы margin потомкам
Флекс элементам можно задать отступы margin
:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
</div>
.parent {
display: inline-flex;
border: 1px solid red;
}
.child {
margin: 10px;
width: 50px;
height: 50px;
border: 1px solid green;
}
: