You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS Grid如何设置动态行列数 是否支持grid-row-end:max属性

回答

截至目前,CSS Grid 已经原生支持你需要的「元素自动跨到隐式网格最后一行」的能力,不需要手动计算行数、操作CSS变量,标准中也没有你提到的max这类特殊取值,直接用负索引就能实现效果。

具体实现说明

  • 给需要跨全部行的元素设置grid-row: 1 / -1即可,新版规范下的-1不再仅指向显式定义的网格最后一条线,会自动对齐到包含隐式生成轨道在内的整个网格的最末端线。
  • 唯一需要注意的生效前提:要跨全高/全宽的元素必须放在网格容器的子元素最前面,优先于所有会触发隐式网格创建的动态元素,浏览器才能在布局计算阶段正确把它延伸到网格最底部。
  • 目前该特性已经在所有主流现代浏览器落地(Chrome 113+、Firefox 112+、Safari 16.4+),覆盖绝大多数用户场景。如果需要兼容更旧的浏览器版本,你目前使用的CSS变量传行数的方案依旧是成本最低的兼容方案,比嵌套网格实现简洁很多。

调整后的可运行示例

完全不需要JS操作CSS变量,直接用原生Grid能力就能实现需求:

CSS代码

.wrapper {
  display: grid;
  grid-template-columns: 150px 100px;
  grid-gap: 10px;
  background-color: #fff;
  color: #444;
}

.box {
  background-color: #444;
  color: #fff;
  border-radius: 5px;
  padding: 20px;
  font-size: 151%;
}
/* 第一列跨全高,不需要依赖CSS变量 */
.first-col {
  grid-row: 1 / -1;
}

HTML代码

<div id='grid' class="wrapper">
    <!-- 跨全高的元素放在最前面 -->
    <div class="box first-col">First Col</div>
</div>

JavaScript代码

'use strict;'
const maxNbrOfRows = 6;
window.onload = () => {
    const nbrOfRows = Math.floor(Math.random() * maxNbrOfRows) + 1;
    const grid = document.getElementById('grid');
    for ( let i=1; i <= nbrOfRows; i++ ) {
        const tag = document.createElement('div');
        tag.append('row ' + i);
        tag.classList.add('box');
        tag.style.gridColumnStart = '2';
        grid.append(tag);
    }
    // 不需要再插入规则修改:root变量
}

内容的提问来源于stack exchange,提问作者edwardsmarkf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:06:28