font-weight 设置导致在 Windows 上网页不显示加粗效果
文章目录
现象
- 同样一篇文章,在 macOS 操作系统的浏览器中能正常显示文字的加粗效果,在 Windows 操作系统中无论如何都不显示加粗效果。
- 显示粗体的文字位于
<strong>标签中。 - 浏览器无关。
解决
blog.zengrong.net 在 CSS 中设置了 font-weight(SASS语法):
1b, strong, em
2 font-weight: 500
将 font-weight 的值改为 bold 解决了问题。
1b, strong, em
2 font-weight: bold
原因
根据 CSS 定义,font-weight 可以使用短语或者数字格式表示。
短语的有效值为: nomral bold lighter bolder。
数字有效值为 100-900。
100 到 900 之间的数值大致对应如下的常见粗细值名称。lighter 和 bolder 会基于父元素继承,这里不讨论。

| 短语 | 数字(权重值) | 说明 |
|---|---|---|
| 100 | Thin (Hairline) | |
| 200 | Extra Light (Ultra Light) | |
| 300 | Light | |
| normal | 400 | Normal |
| 500 | Medium | |
| 600 | Semi Bold (Demi Bold) | |
| bold | 700 | Bold |
| 800 | Extra Bold (Ultra Bold) | |
| 900 | Black (Heavy) |
从上表可以看出,400 对应 normal,700 对应 bold。
浏览器在渲染字体时,会从字体中找到对应尺寸(权重级别)的矢量进行渲染。
但不是每个字体都有 100-900 这九级矢量级别。
macOS 系统默认的华文黑体(STHeiti) 有七个矢量级别:Heavy/Bold/MediumP4/Regular/Thin/Light/UltraLightP2 ,它包含上面 CSS 中设定的 500 这个精度。
Windows 系统默认的宋体(simsun) 显然没有那么多级别。在缺少级别支持的前提下,CSS 会根据扩展阅读中所述的「回退机制」寻找一个类似的精度。我相信它找到的是 400 (Normal)。
这就导致了这个现象:虽然浏览器知道要显示的是 <strong>,但字体渲染出来是 normal ,即加粗效果显示不出来。
扩展阅读
回退机制
如果指定的权重值不可用,则使用以下规则来确定实际呈现的权重:
- 如果指定的权重值在 400和 500之间(包括400和500):
- 按升序查找指定值与500之间的可用权重;
- 如果未找到匹配项,按降序查找小于指定值的可用权重;
- 如果未找到匹配项,按升序查找大于500的可用权重。
- 如果指定值小于400,按降序查找小于指定值的可用权重。如果未找到匹配项,按升序查找大于指定值的可用权重(先尽可能的小,再尽可能的大)。
- 如果指定值大于500,按升序查找大于指定值的可用权重。如果未找到匹配项,按降序查找小于指定值的可用权重(先尽可能的大,再尽可能的小)。
以上策略意味着,如果一个字体只有 normal 和 bold 两种粗细值选择,指定粗细值为 100-500 时,实际渲染时将使用 normal,指定粗细值为 501-900 时,实际渲染时将使用 bold 。
全文完
- 文章ID:2792
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/font-weight-500/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。