clamp()在旧浏览器中整条声明被丢弃,文字回归默认16px;@supports必须用font-size: clamp(0px, 0px, 0px)检测,单位不可省;兜底样式须写在@supports块之前;preferred值需含固定基准以防小屏过小;line-height应同步clamp或用无单位值。

clamp() 在旧浏览器里不是降级,是整条声明被丢弃
它不会退回到默认值或上一行样式,而是像没写过一样——font-size: clamp(1rem, 2.5vw, 1.5rem) 在 Safari 13.0 或 iOS 12 上直接失效,文字回归浏览器默认 16px,布局可能错位甚至塌陷。
@supports 检测必须写对,否则照样崩
@supports (clamp: 0) 看似简洁,但 Safari 12.1 和部分安卓 WebView 会误判为支持,结果运行时报错或静默失效。真正可靠的是:
- 用完整调用形式检测:
@supports (font-size: clamp(0px, 0px, 0px)) - 单位不能省:
clamp(1rem, 2vw, 1.5rem)可以,clamp(1, 2, 1.5)会触发解析失败 - 兜底样式必须写在
@supports块之前,且不能是calc()等动态表达式
纯 vw 做 preferred 容易在小屏跌破 min
比如 clamp(1rem, 4vw, 2rem):在 320px 屏上 4vw = 12.8px ≈ 0.8rem,已低于 1rem,此时浏览器仍按规则取 min,但用户实际看到的是极小字号,可读性崩坏。
- 更稳的做法是让
preferred含固定基准,如calc(1rem + 0.5vw) - 或先算出两个锚点宽度(如 360px → 1.5rem,1440px → 2.5rem),再反推系数
- 避免在
min和max中混用vw,否则极端宽高比下可能出现min > max
line-height 不同步 clamp 就会挤字或空行
clamp() 只改 font-size,但 line-height: 1.5 是无单位数值,它乘的是当前字号——小屏时字号变小,line-height 也缩,文字就糊在一起;大屏时又撑开太多。
- 要么用无单位值但接受它随字号缩放(这是正确行为)
- 要么也对
line-height做clamp(),如line-height: clamp(1.2, 1.2 + 0.02vw, 1.6) - 别写
line-height: 24px这类固定像素值,它和流体字号天然冲突
@supports 里面,或者以为加了回退就万事大吉——其实只要检测写错、单位漏写、preferred 计算越界,旧环境就直接裸奔。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











