我试图用列的方向来包装元素。我的第一个元素是100%宽,所有其他元素都是50%宽。当涉及到包装时,最后几个元素从100%宽的第一个元素开始,而不是继续到第二行。
JSFiddle链接:https://jsfiddle.net/e4j16apg/
这就是我想要达到的目标:

.container {
display: flex;
flex-wrap: wrap;
flex-direction: column;
box-sizing: border-box;
height: 200px;
width: 50%;
border: 1px solid blue;
}
.ca {
width: 50%;
border: 1px solid red;
}
.ca-1 {
height: 50px;
width: 100%;
border: 1px solid green;
}<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>
非常感谢!
发布于 2019-10-16 19:53:17
您无法使用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;。
发布于 2019-10-16 20:08:47
你写道:
当涉及到包装时,最后几个元素从100%宽的第一个元素开始,而不是继续到第二行。
这就是问题所在。你认为有“第二线”。没有。
一旦使第一个元素获得100%的宽度,就定义了列的宽度。
通过使后面的元素宽度为50%,您将告诉它们消耗该列的50%。
包装的元素创建第二列。
它们不能在100%元素下面和第一组50%元素旁边包装,因为您不能将元素包装到同一行。
因此,您不必更改HTML,使用CSS Grid作为布局:
.container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: repeat(9, 1fr);
grid-auto-flow: column;
box-sizing: border-box;
height: 200px;
width: 50%;
border: 1px solid blue;
}
.ca {
border: 1px solid red;
}
.ca-1 {
grid-column: 1 / -1;
grid-row: 1 / 3;
border: 1px solid green;
}<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>
这里有更多细节:
https://stackoverflow.com/questions/58420710
复制相似问题