贝利信息

css grid中fr单位到底是什么意思_通过剩余空间分配规则解析

日期:2026-01-25 00:00 / 作者:P粉602998670
fr单位指剩余空间的份数,非百分比;需先扣除px、%等固定宽度,再将剩余空间按份数分配;无剩余空间时fr失效,混用%与fr时顺序影响结果。

fr单位不是“百分比”,而是“剩余空间的份数”

很多人一看到 1fr 2fr 就下意识理解成“第一列占33%,第二列占67%”,这在**容器宽度固定且没有其他固定列**时碰巧对了,但本质错误。

fr 的真实含义是:在扣除所有非弹性轨道(如 px%auto)占用的空间后,把剩下的可用宽度按份数切分。

fr失效的三大典型场景

fr 不是万能胶,它依赖“有剩余空间可分”。以下情况它会退化或表现异常:

混用 % 和 fr 时顺序决定结果

百分比列先按容器总宽计算,fr 列后分“剩下的全部”,而不是“剩下的百分比”。顺序一换,布局就变:

.container {
  width: 900px;
}
/* 第一列 30% = 270px,剩余 630px → 两个 1fr 各得 315px */
grid-template-columns: 30% 1fr 1fr;

/ 第一列 1fr 先拿走“剩余空间”的 1 份,但此时还没扣百分比 → 实际先算中间 30% = 270px,再把 630px 分给前后两列 → 各 315px,中间最窄 / grid-template-columns: 1fr 30% 1fr;

结论:% 建议放开头或结尾;中间插 % 会让后续 fr 可用空间难预估,容易踩坑。

真正健壮的响应式分栏:用 minmax() + auto-fit

1fr 在小屏下可能让列窄到文字溢出,全靠媒体查询太累。推荐组合:

grid-template-columns: repeat(auto-fit, minmax(250px, 1fr))));

fr 的核心从来不是“多酷”,而是“你告诉它怎么分剩余空间”,而剩余空间是否真实存在、是否被正确继承,才是实际项目里卡住人的地方。