有没有一种方法可以强制一个网格的最后一行中的所有项填充该行,而不管它们有多少?
我不知道网格中的项目数量,所以我不能直接针对它们。我尝试使用grid-auto-flow: dense
,但它并没有真正的帮助。
这是我的问题可视化:
:
div {
margin:20px auto;
width: 400px;
background: #d8d8d8;
display: grid;
grid-gap: 10px;
grid-template-columns: repeat(3, 1fr);
}
span {
height: 50px;
background: blue;
}
<div>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
6条答案
按热度按时间mznpcxlj1#
通过结合CSS规则nth-child和nth-last-of-type,这对于CSS网格是完全可行的。唯一的警告是列数需要提前知道。
jjjwad0x2#
我不认为CSS Grid是你要构建的布局的最佳选择,至少如果它是动态的,你不知道容器上有多少项,Flexbox实际上更适合一维布局;保持所有东西的大小完全相同并完全按照您的需要使用所有可用空间可能会有点困难,但最终这种类型的情况是FlexBox的构建目的。
当然,你也可以通过在CSS上使用少量的计算来利用100%的宽度。
CSS网格可能更好地保持行和列对齐,但这是一个不同的情况。
h9a6wy2h3#
对于那些只想知道最后一个元素的答案的人,如果使用的是tailwindcss,可以尝试
grid-column: 1 / -1;
或col-span-full
。vd2z7a6w4#
这在current version (Level 1) of CSS Grid中是不可能的,但是,这在flexbox中并不太复杂。
我使用Flexbox作为后备。我研究网格的一个(不是唯一的)原因是使用"gap"和它附带的其他特性。例如,尽管可以通过边距模拟gap,但由于我们不知道最后一行中的项数,因此消除侧面的gap(在容器的侧面)将需要额外的代码。
你说得对CSS Grid中的
grip-gap
特性非常方便,不过,您也可以在Flexbox中使用边距来模拟这种行为,而不会太复杂。daupos2t5#
您可以尝试使用
nth-child
和last-of-type
选择器只选择超出的项,最后将最后一项扩展到网格中的列总数(使用grid-column: 1 / -1
时自动完成)dly7yett6#
我已经找到了你问题的答案,我把它复制在这里:https://jsfiddle.net/nmcobalt/dg3mutwv/13/
为了降低css的复杂性并解决这个复杂的问题,建议使用SCSS* 而不是普通的css。
在SCSS文件中,您必须使用css选择器 nth:last-child,根据模函数和3列的常数因子迭代计算查尔兹项。
以及下面的HTML标记;我做了两个不同的例子(用div Package )来重现您的查询:
更改刻度数,以查看液体结果。