根源是字体字重支持程度不同及浏览器fallback策略差异:Chrome严格匹配或降级,Firefox偶尔模拟加粗但不稳定;常见原因包括@font-face未声明对应字重、系统字体缺失中间值、font简写重置权重等。

font-weight数值在Chrome和Firefox里渲染不一致的根源
不是浏览器bug,是字体本身字重支持程度不同 + 渲染引擎对“缺失字重”的 fallback 策略不同。Chrome(Blink)倾向于严格匹配或降级到最近可用字重;Firefox(Gecko)有时会尝试轻微模拟加粗,但效果不稳定且不可控。
为什么设了font-weight: 600却看起来和400一样
常见错误现象:代码写了font-weight: 600,DevTools里显示计算值确实是600,但文字粗细毫无变化。
- 检查
@font-face声明是否漏掉font-weight: 600——没声明就等于没加载该字重文件 - 打开DevTools → Fonts面板,确认当前文本实际渲染的是哪个字体文件,它的
weight字段是否真为600 - 系统字体(如
Segoe UI、PingFang SC)多数只提供300/400/600/700四档,500、550这类中间值基本被忽略 - 避免用
font简写覆盖:font: 16px/1.4 sans-serif会把font-weight重置为normal
font-weight关键词在Firefox中更“诚实”,Chrome里容易失效
Firefox对normal、bold的解析更贴近字体原始定义;Chrome常把bold硬映射到700,哪怕字体文件里根本没有700字重,也会强行fallback或静默降级。
-
normal≡400,bold≡700,但仅当字体文件真实包含这两个字重时才可靠 -
lighter/bolder完全依赖父元素权重,行为不可预测,跨浏览器差异极大,应禁用 - 用数值替代关键词:
font-weight: 500比font-weight: bold更容易暴露字体支持问题
真正能统一表现的写法:回退链 + 显式字重声明
靠单一font-weight值无法解决跨浏览器差异,必须配合字体加载策略。
立即学习“前端免费学习笔记(深入)”;
-
font-family必须带多层回退:例如"Inter", "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif - 每个
@font-face块必须明确声明对应font-weight,比如font-weight: 500要配单独的woff2文件 - 避免依赖
font-optical-sizing: auto——它需要可变字体+opsz轴,普通Web Font不支持 - 中文场景下,优先选思源黑体、HarmonyOS Sans等明确提供多字重的开源字体,别指望系统字体支持500以上
最易被忽略的一点:你看到的“Chrome没变粗”,往往不是CSS没生效,而是字体文件压根没那个字重——浏览器不会造字,只会找字。


















