Menu

CSS 字体粗细 font-weight:加粗与 100 到 900 数值

font-weight 属性让文字变粗、变细或介于两者之间。本文讲解从 100 到 900 的数值刻度、normal 和 bold、相对值 bolder 和 lighter,以及为什么有时设置了粗细却看不出变化。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

如何在 CSS 中让文字加粗

font-weight 设置字母笔画的粗细。bold(等同于 700)让文字加粗,normal(等同于 400)是常规文字。

标题、<th>、<b> 和 <strong> 因为浏览器自带的样式表而默认加粗,所以要去掉加粗,就用 font-weight: normal。至于在 HTML 本身中何时使用 <b> 或 <strong>,参见 HTML 加粗。

数值刻度:100 到 900

这些数字都有字体家族遵循的标准名称:

值常用名称
100Thin(极细)
200Extra Light(特细)
300Light(细体)
400Normal / Regular(常规)
500Medium(中等)
600Semi Bold(半粗)
700Bold(粗体)
800Extra Bold(特粗)
900Black / Heavy(黑体)

1 到 1000 之间的任何数字都有效,所以 450 和 650 也可以。能不能看出区别取决于字体:浏览器只能画出字体实际包含的粗细。

system-ui 是操作系统的界面字体,通常带有很多种粗细。如果上面每一行看起来都只是两种粗细之一,说明你的系统字体只有常规体和粗体。

为什么设置了粗细却没有变化

一个字体由一组文件组成,通常每种粗细一个文件。当缺少确切的粗细时,浏览器会选择它拥有的最接近的那个:

  • 对于 500,先找 500,然后找更细的,再找更粗的。
  • 对于 600 及以上,先找更粗的,然后找更细的。
  • 如果完全没有粗体文件,大多数浏览器会把常规字母加厚,模拟出一个粗体(合成粗体)。

把一个有很多粗细的字体和 serif 对比一下,serif 在大多数系统上只有常规体和粗体:

在 serif 那一栏里,300 和 500 通常会退回到常规体,600 退回到粗体。大多数“font-weight 不起作用”的问题,答案就在这里:CSS 没错,是字体缺少这个粗细。可变字体(一个带有粗细轴的文件)能平滑地画出其粗细范围内的每一个值。

bolder 和 lighter

bolder 和 lighter 相对于元素继承到的粗细。它们会跳到下一个粗细档位,而不是增加一个固定的量:

父元素粗细bolder 得到lighter 得到
100 至 349400100
350 至 549700100
550 至 749900400
750 至 900900700

实际用法:用变量定义一套粗细

为整个网站挑选三四种粗细并给它们命名,而不是到处散落数字:

:root {
  --weight-regular: 400;
  --weight-medium: 500;
  --weight-bold: 700;
}
body   { font-weight: var(--weight-regular); }
button { font-weight: var(--weight-medium); }
h1, h2 { font-weight: var(--weight-bold); }

常见错误

  • 以为每个数字看起来都不一样。 只有字体包含的粗细才会显示出区别。
  • 用 <b> 做按钮文字。 用 font-weight 设置按钮样式;<b> 和 <strong> 留给正文文字。
  • 给数字加引号。 font-weight: "700" 是无效的,会被忽略。应写成 font-weight: 700。
  • 到处用加粗来强调。 所有东西都加粗,就没有东西突出了。正文保持 400。
  • 小字用很细的粗细。 100 到 300 在小字号下很难阅读,在低对比度背景上尤其如此。

常见问题

CSS 中怎么让文字加粗?

在元素上使用 font-weight: bold;,或者等价的数值 font-weight: 700;。要去掉标题或 <strong> 的加粗,设置 font-weight: normal;(400)。

font-weight 有哪些取值?

1 到 1000 之间的数字,通常按百位写:100 极细,200 特细,300 细体,400 常规,500 中等,600 半粗,700 粗体,800 特粗,900 黑体。关键字 normal 和 bold 分别是 400 和 700,bolder 和 lighter 则相对于父元素。

font-weight bold 和 700 一样吗?

一样。bold 的计算值是 700,normal 的计算值是 400,所以两种写法的显示效果完全相同。

为什么 font-weight 500 或 600 看起来和 normal 或 bold 一样?

因为字体没有这个粗细。如果字体只提供 400 和 700,浏览器会选择最接近的可用文件,于是 500 显示得像 400,600 显示得像 700。请加载一个包含更多粗细的字体,或者使用可变字体。

应该用 CSS 的 font-weight 还是 <b> 标签?

文字重要时用 <strong>,只是样式不同时用 <b>,按钮、标签和标题这类视觉设计则用 font-weight。标签带有语义,而这个属性只管外观。

Coddy 编程语言插图

和 Coddy 一起学编程

开始