Fluid Typography 的目标不是让字体随着屏幕无限变大,而是在合理最小值和最大值之间平滑响应布局。首选值应包含相对字体单位,避免纯 vw 让浏览器 Zoom 失去效果。
响应式设计常见两种极端:每个断点手动改一次字号,维护成本很高;或者直接 `font-size: 5vw`,手机和超宽屏都失控。CSS `clamp()` 提供了更合理的第三种方式:定义最小值、流动区间和最大值,让字号在需要时连续变化。
01 核心判断:正确模式是“有上下限的流动”,不是纯 viewport 字号
`clamp(min, preferred, max)` 让 preferred 只在两个边界之间生效。为了保留用户浏览器缩放能力,preferred 通常应把 rem 与 vw 组合,而不是只用 vw。
02 一、理解 clamp 的三个值
例如 `clamp(2rem, 1.2rem + 3vw, 4rem)`:小屏不会低于 2rem,大屏不会超过 4rem,中间根据视口平滑变化。它本质上减少了为每个宽度写 media query 的需要,但仍需要设计师给出合理边界。

03 二、为什么纯 vw 有可访问性风险?
如果字号完全由 viewport 决定,用户浏览器放大文字时,字体可能不能按预期增长。WCAG 1.4.4 Resize Text 要求用户能够放大文字而不丢失内容/功能。使用 rem + vw 的组合可以让字号既响应视口,也响应根字号缩放。
04 三、不是所有文字都应该 Fluid
Hero 大标题、文章标题、展示性数字最适合平滑缩放;表格、表单帮助文字、标签、密集导航往往更需要稳定字号。设计系统可以给 Display / Heading 使用 Fluid Token,而 Body / Label 保持固定或较小变化。
05 四、字号变化会影响行长与换行
只让字体变大,却让内容容器无限变宽,会形成很长的阅读行。正文可通过 `max-width` 或字符宽度控制可读行长;标题则要测试中英文、长单词、数字和翻译扩展,避免 clamp 在某些宽度产生难看孤行。

06 五、Line-height 也要跟随角色,而不是简单同比例放大
超大 Display 的行高可能需要更紧,正文则需要足够呼吸。可以为不同 Typography Token 定义 font-size、line-height、weight、letter-spacing,而不是只做一个字号公式。
07 六、设计端要给开发“规则”,不只给三个 Figma 截图
如果 Figma 只展示 375、1440 两个字号,开发只能猜中间值。设计系统可以记录最小字号、最大字号、开始/结束视口范围和计算方式。即使 Figma 不能完全模拟 CSS,也能明确设计意图。
08 七、国际化需要重新测试边界
英文短标题变成德语、中文变日文或阿拉伯语后,文本长度和字形密度都不同。Fluid Typography 不能只在英文 Lorem Ipsum 下验收。需要测试实际语言、系统字体回退和 200% Zoom。

09 一个简单实施步骤
- 先定义各文字角色在最窄和最宽布局下的合理字号。
- 只对真正需要随布局变化的角色使用 clamp。
- preferred 使用 rem + viewport 组合。
- 同时约束容器宽度、行高和换行。
- 用浏览器 Zoom、移动横竖屏和多语言内容测试。
10 最后:Fluid Type 是“响应内容”的工具,不是视觉特效
它最有价值的地方是减少断点跳变,让排版在连续设备宽度上保持稳定比例。如果公式让用户无法放大、标题不断抖动或设计系统难以维护,就说明流动过度。规则应该服务可读性,而不是为了技术优雅。
11 八、计算公式不要“抄一个 clamp 值全站用”
不同排版角色的 min/max 和流动区间不同。可以根据两个设计锚点推导线性插值,再将结果封装成 Design Token。更重要的是在真实内容中视觉校验,而不是追求数学上完美。超宽屏往往还需要通过容器宽度限制布局,而不是继续放大字体。
常见问题
clamp() 的浏览器支持现在够吗?
现代主流浏览器已经广泛支持,但仍应根据项目目标浏览器测试。
为什么不建议纯 5vw 做字体?
它缺少合理上下限,也可能让文字缩放过度依赖 viewport,影响浏览器 Zoom。
正文也适合 Fluid Typography 吗?
可以轻微使用,但正文通常更重视稳定可读性,展示型标题更适合明显流动。
Figma 怎么交付 clamp 规则?
记录 min/max 字号、对应视口范围和开发公式,并提供关键宽度设计验证,而不是要求 Figma 自己计算 CSS。
Fluid Typography 能替代所有 Breakpoint 吗?
不能。布局、组件和内容结构仍可能需要断点,clamp 只是字体/尺寸连续变化的一种工具。