有谁知道如何限制 flexbox 可以换行的行数?
Does anyone know how I can set a limit to the rows that flexbox can wrap?
这是我的代码:
.wrap-here {
display: flex;
gap: 5px;
flex-wrap: wrap;
width: 250px;
overflow: auto;
}
.item {
flex: 0 0 20%;
border: 1px solid black;
padding: 10px;
margin-bottom: 5px;
}
<div class="wrap-here">
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
</div>
而不是我所拥有的,我希望 flexbox 将限制设置为 2 行的最大换行,并且它会继续水平添加项目,如下图所示:
有人知道我该怎么做吗?
我不确定 flexbox
是否可以实现。我强烈建议在 grid
中执行此操作以获得更好的布局控制。
说明
flexbox
is for one dimensional layouts, while grid
is for two dimensional layouts。
是的,flex-wrap
会生成多行,但您无法随心所欲地控制布局。这种情况下 flex-wrap
的问题在于,当应用时,它不会导致任何溢出,因为 flex-wrap
用于将项目包装到 防止 溢出。
解决方案
由于您使用 width: 250px
指定了大小,我假设您总是需要 2 行。
通过应用 grid-auto-flow: column
,布局将不断为每个项目创建一个新列。
使用grid-template-rows: 1fr 1fr
,布局中将始终有 2 行。
对于grid-auto-columns: 20%
,每个项目将是一列,占据250px
宽度的20%
,即50px
(据我了解, 您指定的首选尺寸 flex-basis: 20%
).
通过应用 overflow-x: auto
,从 250px
容器溢出的内容将出现一个水平滚动条。
.wrap-here {
display: grid;
gap: 5px;
grid-auto-flow: column;
grid-template-rows: 1fr 1fr;
grid-auto-columns: 20%;
width: 250px;
overflow-x: auto;
}
.item {
border: 1px solid black;
padding: 10px;
margin-bottom: 5px;
}
<div class="wrap-here">
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
</div>
这是我的代码:
.wrap-here {
display: flex;
gap: 5px;
flex-wrap: wrap;
width: 250px;
overflow: auto;
}
.item {
flex: 0 0 20%;
border: 1px solid black;
padding: 10px;
margin-bottom: 5px;
}
<div class="wrap-here">
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
</div>
而不是我所拥有的,我希望 flexbox 将限制设置为 2 行的最大换行,并且它会继续水平添加项目,如下图所示:
有人知道我该怎么做吗?
我不确定 flexbox
是否可以实现。我强烈建议在 grid
中执行此操作以获得更好的布局控制。
说明
flexbox
is for one dimensional layouts, while grid
is for two dimensional layouts。
是的,flex-wrap
会生成多行,但您无法随心所欲地控制布局。这种情况下 flex-wrap
的问题在于,当应用时,它不会导致任何溢出,因为 flex-wrap
用于将项目包装到 防止 溢出。
解决方案
由于您使用 width: 250px
指定了大小,我假设您总是需要 2 行。
通过应用 grid-auto-flow: column
,布局将不断为每个项目创建一个新列。
使用grid-template-rows: 1fr 1fr
,布局中将始终有 2 行。
对于grid-auto-columns: 20%
,每个项目将是一列,占据250px
宽度的20%
,即50px
(据我了解, 您指定的首选尺寸 flex-basis: 20%
).
通过应用 overflow-x: auto
,从 250px
容器溢出的内容将出现一个水平滚动条。
.wrap-here {
display: grid;
gap: 5px;
grid-auto-flow: column;
grid-template-rows: 1fr 1fr;
grid-auto-columns: 20%;
width: 250px;
overflow-x: auto;
}
.item {
border: 1px solid black;
padding: 10px;
margin-bottom: 5px;
}
<div class="wrap-here">
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
</div>