Вы не можете достичь желаемого с помощью flexbox, но вы можете использовать columns
(и сделать первый элемент охватом всех столбцов):
.container {
columns: 2;
width: 50%;
border: 1px solid blue;
column-gap: 0;
/* height: 200px; */
}
.ca {
border: 1px solid red;
break-inside: avoid;
/* height: calc(100% / 6); */
}
.ca-1 {
column-span: all;
}
* {
box-sizing: border-box;
}
<div class="container">
<div class="ca ca-1">ca-1</div>
<div class="ca ca-2">ca-2</div>
<div class="ca ca-3">ca-3</div>
<div class="ca ca-3">ca-3</div>
<div class="ca ca-4">ca-4</div>
<div class="ca ca-5">ca-5</div>
<div class="ca ca-6">ca-6</div>
<div class="ca ca-7">ca-7</div>
<div class="ca ca-8">ca-8</div>
<div class="ca ca-9">ca-9</div>
<div class="ca ca-10">ca-10</div>
</div>
Также обратите внимание, что по умолчанию columns
вычисляет общую высоту всех дочерних элементов, которые переносят и переносят как можно ближе к половине (когда естьдва). Так что вам на самом деле не нужна фиксированная высота для этого. И вам не нужен набор height
для детей, особенно если у них неровная высота.
CSS columns
предназначены для размещения в виде газетных колонок из коробки, что, кажется, является тем, что вам нужно.
Чтобы предотвратить разрывы внутри детей, используйте break-inside: avoid;
.