Макет может быть достигнут путем настройки flex-basis
внутри медиа-запросов.
Вот идея:
.flex-container {
display: flex;
flex-wrap: wrap;
}
.flex-container > div {
flex: 1 0 26%;
}
@media ( max-width: 768px) {
.flex-container > div {
flex-basis: 34%;
}
}
@media ( max-width: 320px) {
.flex-container > div {
flex-basis: 51%;
}
}
/* non-essential demo styles */
.flex-container > div {
height: 50px;
background-color: lightgreen;
border: 2px solid white;
display: flex;
justify-content: center;
align-items: center;
font-size: 1.2em;
}
<div class="flex-container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>
В первом правиле flex
flex-grow
установлено на 1
.Это означает, что гибкие элементы будут занимать все свободное пространство.
Следовательно, ширина каждого элемента, выраженная через flex-basis
, больше не должна быть традиционной 33,33% (3 элемента в строке), 50% (2 на строку) и 100%.
Эти цифры часто приходится настраивать вручную (например, calc()
), чтобы освободить место для полей.
В этом случае, благодаря технологии flex,flex-grow
занимает оставшееся пространство, а flex-basis
должен быть достаточно большим, чтобы обеспечить перенос.
Так, например, с flex-basis: 26%
на линию могут поместиться только три элемента.Четвертый должен обернуть.Там достаточно места для наценки.flex-grow
заполняет пустое место.