为什么默认字体粗细是 400?

Why is the default font weight 400?

因此,在使用字体时:

但是……为什么? 400 什么?这是一种单位吗?这背后有历史原因吗?

不是“400 什么”,只是 400。根据 CSS 规范,首先在 https://www.w3.org/TR/CSS1/#font-weight 中正式化。有九个级别的字体粗细,以无单位数字表示,从 100 开始到 900 结束,以 100 为增量。

除此之外,规范还定义了数值和字符串值之间的两种映射:

  • 数值400和字符串值normal是一回事,
  • 数值700和字符串值bold是一回事

(请注意,虽然 CSS4 将更改此设置以允许数字 1-1000 以 1 为增量,但它仍然只会正式识别字符串值 normalbold, 仍然分别映射到 400 和 700。有关详细信息,请参阅 https://drafts.csswg.org/css-fonts-4/#font-weight-prop)

关于这些权重的唯一正式规则是,如果您在 CSS 上下文中使用字体系列,则 400/normal 的字体权重应该可以满足您的需求该字体系列的 Regular 字体和 700/bold 的字体粗细应该让您得到该字体系列的 Bold 字体。其他任何东西都完全未定义,您所知道的是 100、200 和 300 可能 比 400、500 和 600 可能 轻介于常规和粗体之间,800 和 900 可能 比 700 重。

所有这些都符合 "probably" 的条件,因为 @font-face 完全使关于此的一切无效。如果您使用 @font-face,您 推翻了 CSS 对这些数值的完全含义的规则。例如:当您将 font-weight 设置为 900 时,此规则将影响超细字体,因为这就是我们告诉浏览器它 must do:

@font-face {
  font-family: MyFont;
  font-weight: 900;
  src: url("./fonts/ultra-thin.woff2") format("WOFF2");
}

同样重要的是要知道,这是仅有的两个官方 number/string 映射。官方没有没有其他映射,https://drafts.csswg.org/css-fonts-3/#font-weight-prop里面的数值table纯粹是为了说明哪个真实 CSS 值映射到人们倾向于使用的 粗略 名称。

最重要的是这个适用于CSS。它与实际的字体存储值或您在文字处理软件中看到的内容等无关

关于没有单位的原因

字体粗细没有给出一个单位,因为随着字体粗细的增加和减少,没有特定的、可识别的“东西”可以“调高和调低”。与 font-size 相比,计算机上的 increases/decreases 字体粗细传统上并没有通过编程实现 - 字体设计师需要将每个级别的字体粗细 hand-created 作为完全不同的字体.

这是因为以编程方式更改字体粗细比更改字体粗细要难得多。粗体文本不仅会增加整个字符的厚度。它通过选择性地为字母的某些部分增加比其他部分更多的厚度来增加对比度。请注意下面的字体,字母“a”的某些部分如何变得非常粗且权重更高,而同一字母的其他部分几乎没有增加那么多。

这不容易以编程方式完成,大多数情况下必须手动完成才能让它看起来不错 - 排版人员会创建几个不同版本的字体 - 通常是三个 - 开发人员会上传所有三种样式,并且 CSS font-weight 属性 将设置为仅在这三个值之间更改,通常为 300、400 和 700。这是假设您想要真正的粗体/斜体。人造样式 - 人造粗体、人造斜体等 - 已由浏览器提供,但结果通常不是很好。

现在正在朝着 2016 年推出的可变字体发展。这些字体专门设计用于让开发人员完全控制字体粗细和斜体等样式属性。本质上,字体创建者创建了几种不同的字体变体,具有不同的重量级别,然后计算机会智能地填充它们之间的空间,这样开发人员现在就有可能无限的 font-weight 度数来使用给定的字体。

不过,即使进行了此更改,也很难确定一个特定的、科学上可衡量的“事物”使文本或多或少变得沉重。所以我怀疑我们是否会很快看到 font-weight 引入任何 non-relative 单位。

关于100的倍数和默认400的原因

该系统基于 1957 年为 Univers 字体开发的 Linotype 系统。当时的想法是您可以使用三位数字按顺序指定 font-weight、宽度和斜体。所以 099 会很轻,很宽,而且很斜体。 905 会非常重,非常压缩,中等斜体。这只是一个示例,实际可用值不同。人们更多地使用系统的 'weight' 部分而不是其他两位数,因此后两位数的使用越来越少,直到它们变得过时,人们忘记了编号系统除了指定权重外还用于其他任何用途.在这一点上使用 1-9 的字体粗细比例确实更有意义,但 100-900 现在已经成为常规。

我猜 400 是默认值,只是因为它就在中间。我认为他们选择 400 而不是 500 是因为人们更希望将文本加粗而不是变亮,所以他们选择了默认值,为它留出了更多空间。