grid-template-columns 中 vw 单位不会失效,但因容器受父级约束(如 max-width、padding)导致实际宽度 ≠ 视口宽度,使列宽小于预期;需检查 computed width 或改用 minmax(0, 1fr) + clamp()。
不会失效,但容易误以为失效——因为 grid-template-columns 中的 vw 是相对于视口宽度计算的,而 Grid 容器本身可能被父元素约束(比如加了 max-width 或 padding),导致实际可用宽度 ≠ 视口宽度。这时候你设 10vw,结果发现列宽远小于预期。
width、max-width、padding 或 transform 等影响尺寸的样式width 是否真等于 100vw
minmax(0, 1fr) + clamp() 组合,比纯 vw 更可控Grid 列数变化本身不触发字体重算,所以不能指望 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)) 自动让文字变大变小。真正起作用的是媒体查询或 clamp(),而 Grid 只负责布局容器的分栏逻辑。
font-size: clamp(1rem, 2.5vw, 1.5rem) 是最简方案:下限保可读性,上限防过大,中间用 vw 平滑过渡resize 并读取 getComputedStyle(gridEl).gridTemplateColumns,再动态设 style.fontSize——但多数场景没必要,clamp() 足够clamp() 在 font-size 中的计算,旧版需降级为媒体查询常见原因是字体继承被阻断,或者 grid-area 只是定位指令,不产生样式作用域。它本身不创建新上下文,也不触发 font-size 的重新计算。
display: grid 和对应 grid-template-areas
font-size,别依赖父容器的 font-size 传递——Grid 不改变 CSS 继承链em 或 rem,检查根字体是否也被 vw 动态调整,否则会出现“响应式错位”:Grid 列数变了,但字体没跟上因为 vw 基于视口宽度,横屏时 100vw 变成原来的高度值(比如竖屏 375px → 横屏 667px),字体瞬间放大近一倍。这不是 bug,是单位定义使然。
立即学习“前端免费学习笔记(深入)”;
vmin 替代 vw:例如 font-size: calc(1rem + 1vmin),能同时适配横竖屏clamp(1rem, 2vmin, 1.75rem),既防过小,也控上限@media (orientation: landscape) 里单独覆盖字体——这会让代码碎片化,且 orientation 切换有延迟vw 当作“自动适配 Grid”的银弹——其实它只认视口,不认网格。