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

能否使用calc()函数结合grid-template-columns属性计算网格列份数?

CSS Grid中calc与fr单位的正确用法

不行,你当前的写法没法得到注释里8fr 12fr的效果。

问题出在CSS语法规则上:calc()函数的计算结果必须直接包含单位,你写的calc(9 - 1)fr相当于先算出数字8,再硬接个fr,浏览器会把这当成无效值,网格列会自动 fallback 到默认的分配逻辑。

要实现你想要的计算效果,得把fr放进calc()里面,正确写法是:

.classname {
    display: grid;
    grid-template-columns: calc(9fr - 1fr) calc(13fr - 1fr);
    /* 这就等同于 8fr 12fr */
}

如果是结合CSS变量的动态场景,比如需要根据变量调整列数,写法可以是这样:

.classname {
    --col1: 9;
    --col2: 13;
    display: grid;
    grid-template-columns: calc(var(--col1) * 1fr - 1fr) calc(var(--col2) * 1fr - 1fr);
}

要是只是简单的静态数字运算,直接写8fr 12fr当然最省事,但涉及动态计算时,一定要保证单位在calc()的表达式范围内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:31:03