По разным причинам эта работа лучше подходит для CSS Grid, чем Flexbox.
Во-первых, заставить работать желоба в Grid просто. Вы можете использовать свойство grid-gap
, которое пока недоступно во flexbox.
Во-вторых, запрашиваемые вами «столбцы» на самом деле не являются столбцами. Столбец имеет одинаковую ширину сверху вниз. Вы запрашиваете макет кладки , который позволяет элементам содержимого распределяться по нескольким столбцам и строкам.
Опять же, эту задачу гораздо проще выполнить с помощью CSS Grid.
Вот одно решение, которое может работать для вас (включая медиа-запрос):
jsFiddle demo
.grid-container {
display: grid;
grid-auto-columns: 1fr;
width: 500px;
grid-auto-rows: 50px;
grid-gap: 10px;
}
.col-1 {
grid-column: 1 / span 4;
grid-row: 1;
}
.col-2 {
grid-column: 5 / span 6;
grid-row: 1;
}
.col-3 {
grid-column: 1 / span 5;
grid-row: 2;
}
.col-4 {
grid-column: 6 / span 5;
grid-row: 2;
}
.col-5 {
grid-column: 1 / span 6;
grid-row: 3;
}
.col-6 {
grid-column: 7 / span 4;
grid-row: 3;
}
@media ( max-width: 992px ) {
.grid-container>div {
grid-column: 1;
grid-row: auto;
}
}
/* non-essential demo styles */
.grid-container {
border: 1px solid black;
background-color: lightgray;
}
.grid-container > div {
font-size: 1.3em;
color: white;
display: flex;
align-items: center;
justify-content: center;
}
.grid-container > div:nth-child(odd) {
background-color: green;
}
.grid-container > div:nth-child(even) {
background-color: orangered;
}
<div class="grid-container">
<div class="col-1">40%</div>
<div class="col-2">60%</div>
<div class="col-3">50%</div>
<div class="col-4">50%</div>
<div class="col-5">60%</div>
<div class="col-6">40%</div>
</div>
В приведенном выше макете каждый создаваемый вами столбец имеет ширину 1fr
. Это означает, что каждый столбец занимает равное распределение свободного пространства в контейнере.
Теперь вы можете охватывать столбцы для создания областей сетки с желаемой шириной.
Например, если вы хотите, чтобы «столбец» имел ширину 60%, скажите элементу сетки, чтобы он охватывал шесть столбцов (span 6
).
Еще одним преимуществом 1fr
является то, что он применяется после того, как все фиксированные ширины (например, желоба) учтены в длине строки. Это означает, что вам не нужно делать какие-либо расчеты для размещения десяти столбцов.