font-weight合法值为100–900(步长100)及关键词normal/bold等,但实际生效取决于字体是否提供对应字重;可变字体支持连续值如372、689,需wght轴且兼容性有限。

font-weight 支持哪些数值?不是所有数字都有效
HTML/CSS 中 font-weight 的合法值分两类:关键词(如 normal、bold)和无单位数字(100–900,以 100 为步长)。但关键点在于:并非所有字体都实现了全部 9 档字重。比如多数系统默认的 serif 或 sans-serif 字体只提供 400(等价于 normal)和 700(等价于 bold)两档,font-weight: 600 可能被浏览器降级为 400 或模拟加粗(faking),视觉上没变化。
如何确认当前字体是否支持某档字重?
靠查文档或实测。Web 字体(如 Google Fonts)通常在页面上明确标注支持的 font-weight 值;系统字体则需验证:
- 用
font-family: "Helvetica Neue", Arial, sans-serif;时,300、500、600多数无效 - 使用
@font-face引入的自定义字体,必须确保每个font-weight对应一个独立的字体文件(如Roboto-Light.woff2对应font-weight: 300) - 检查浏览器开发者工具的「Computed」面板,看最终生效的
font-weight值——若显示为400却写了600,说明未命中
font-weight: bolder / lighter 是相对计算,容易误判
bolder 和 lighter 不是固定值,而是相对于父元素当前字重“向上/向下跳一档”。但这个“档”由浏览器按预设映射表决定,不可控。例如:
body { font-weight: 400; }
h1 { font-weight: bolder; } /* 可能变成 700 */
p { font-weight: bolder; } /* 父为 400 → 仍可能变成 700,而非 500 */更麻烦的是,如果父元素已是 900,bolder 也不会超出;同理 lighter 在 100 时无效。实际项目中建议直接写数字值,避免歧义。
立即学习“前端免费学习笔记(深入)”;
现代方案:用 font-variation-settings 精确控制可变字体
如果你用的是支持 OpenType Font Variations 的可变字体(如 Inter、IBM Plex Sans),font-weight 数值可真正连续生效(如 372、689),前提是:
- 字体文件本身包含
wght轴(可通过font-variation-settings: 'wght' 450;验证) - CSS 中声明
font-weight: 100–999(注意:可变字体允许突破 900 上限) - 不混用
font-weight和font-variation-settings,后者会覆盖前者
可变字体让字重控制从“有无”变成“多少”,但兼容性需留意:IE 完全不支持,iOS Safari 13.4+ 才稳定支持 wght 轴。
最常被忽略的一点:即使写了 font-weight: 600,若字体文件缺失对应字重,浏览器不会报错,也不会警告——它就安静地回退到最近可用值。调试时得盯紧「Computed」面板里的真实取值,而不是代码里写的那个数字。











