如何用CSS实现Grid组件动态列优先排列?适配任意子元素
实现自适应任意元素数量的列优先Grid布局
直接用以下纯CSS代码就能搞定,完全不需要硬编码行数,适配任意数量的<li>元素:
ul { display: grid; grid-template-columns: 1fr 1fr; grid-auto-flow: column; grid-auto-rows: 1fr; }
原理说明
grid-auto-flow: column把Grid默认的行优先排列改成了列优先,元素会先填满第一列的所有行,再自动切换到第二列继续填充grid-auto-rows: 1fr让自动生成的每一行高度均等,保证布局整齐- 不管列表项是偶数还是奇数(比如7个元素),都会自动调整列内的元素数量,第一列比第二列多1个,完美保持列优先逻辑
如果你想保留原有的行优先Grid基础配置,也可以通过order属性重新排序元素(之前没成功可能是没配合grid-column和密集排列):
ul { display: grid; grid-template-columns: 1fr 1fr; grid-auto-flow: dense; } li:nth-child(odd) { order: 0; grid-column: 1; } li:nth-child(even) { order: 1; grid-column: 2; }
这个方案的逻辑
- 给奇数项和偶数项分别设置
order,让所有奇数项整体排在偶数项前面 grid-column强制指定奇偶项分别占据第一、第二列grid-auto-flow: dense确保列内的元素自动向上填充,不会出现空白行
内容的提问来源于stack exchange,提问作者aloisdg
相关产品推荐
相关产品推荐

