跳到正文
FluidClamp
语言: 简体中文

用 CSS clamp() 实现流式排版:指南与生成器

流式排版让文字在小屏和大屏之间平滑缩放,而不是在断点处跳变。先用生成器得到代码,再阅读如何选择既易读又无障碍的字号。

输入单位
输出单位

常用预设

你的 clamp() 值

clamp(1.125rem, 0.8333rem + 1.4583vw, 2rem)

斜率: 1.4583vw · 截距: 0.8333rem

CSS
clamp(1.125rem, 0.8333rem + 1.4583vw, 2rem)
CSS 自定义属性
--fluid-size: clamp(1.125rem, 0.8333rem + 1.4583vw, 2rem);
Tailwind 类名
text-[clamp(1.125rem,0.8333rem_+_1.4583vw,2rem)]

最大值是最小值的 1.78 倍,符合 WCAG 1.4.4「调整文字大小」常用的 2.5 倍上限。

各视口下的渲染尺寸
视口尺寸 (px)尺寸 (rem)
320px181.125
375px18.81.1751
768px24.531.5333
1024px28.271.7667
1280px322
1440px322
1920px322

所有设置都保存在网址中,你可以收藏或分享这个结果。

实时预览

视口 1024px 时为 28.27px

流式字体随屏幕宽度平滑变化。

什么是流式排版

传统的响应式字体会挑选几个固定字号,再用媒体查询切换:手机 16px、平板 18px、桌面 20px。流式排版则把这些台阶换成随视口宽度连续变化的函数。借助 CSS clamp(),整条规则只需一行,浏览器会为两个端点之间的每一个宽度算出合适的字号。

clamp() 背后的公式

流式尺寸是一条穿过两点的直线:(最小视口,最小尺寸)和(最大视口,最大尺寸)。斜率 =(最大尺寸 − 最小尺寸)÷(最大视口 − 最小视口),乘以 100 就是 vw 系数。截距 = 最小尺寸 − 斜率 × 最小视口。最终结果为 clamp(最小尺寸, 截距 + 斜率·100vw, 最大尺寸)。上方的生成器正是这样计算的,并按你选择的小数位数取整。

如何选择合适的字号

正文字号通常不需要大幅变化:16 到 18 或 16 到 20 像素已能满足大多数阅读场景。标题更能从流式字号中受益,因为在笔记本上好看的 48px 标题,放到手机上会占据半个屏幕。建议从最大的标题开始逐级向下设计,字号越小,最小值与最大值之间的比例也应越小。

视口范围应根据你的布局而不是设备清单来确定。最小值通常是 320 或 360 像素;最大值是内容容器达到 max-width 的宽度。超过这个宽度后行长不再增加,字号也不应该继续增大。

无障碍检查清单

最小值、最大值和截距都使用 rem,确保用户的字号偏好依然生效。将页面放大到 200% 检查 WCAG 1.4.4:当最大值超过最小值约 2.5 倍时,缩放可能无法让文字足够变大,工具会给出提示。行高使用相对值(例如 1.5),让它随字号一起缩放;并在最窄的屏幕上检查最长的单词。

常见问题

流式排版会影响无障碍吗?

只要使用 rem 并控制好比例就不会。问题通常出现在纯 vw 字号,或最小与最大视口之间增长超过约 2.5 倍时,因为此时浏览器缩放的效果会变弱。

还需要媒体查询吗?

对字号来说通常不需要。媒体查询可以保留给布局变化,例如从单栏切换为双栏。

哪些浏览器支持 clamp()?

Chrome、Edge、Firefox 和 Safari 自 2020 年起都已支持 clamp(),可放心用于生产环境。旧浏览器会直接忽略该声明,因此你可以在它前面写一个普通的后备字号。

行高也需要流式变化吗?

使用无单位的行高即可,例如标题 1.2、正文 1.5,它会自动随流式字号一起缩放。