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

5

因此,在处理字体时:

  • 默认字重(也称为“常规”)是400
  • “粗体”字重是700
  • “轻”字重是300

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


我发现了这个,也许可以帮助你:Open type specification,它来自mdn - Sfili_81
1
我希望在此被关闭为POB之前,有人能找到答案。 - Mr Lister
CSS规范中并没有“light”这个属性,官方只定义了“normal”和“bold”。还有“bolder”和“lighter”这两个属性,它们曾经用于相对于父级规则增加/减少字重值,但在现代网络字体中这些属性已经没什么意义了。 - Mike 'Pomax' Kamermans
2个回答

5
不是“400什么”,只是400。根据CSS规范,最初在https://www.w3.org/TR/CSS1/#font-weight中确定,有九个字重级别,表示为无单位数字,从100开始,以100递增,到900。
除此之外,规范定义了两个数值和字符串值之间的映射:
- 数值400和字符串值normal是相同的, - 数值700和字符串值bold是相同的。
(请注意,虽然CSS4将更改为允许以1的增量使用数字1-1000,但它仍然只会正式识别字符串值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 更重。
所有这些都被称为“可能”,因为 @font-face 完全可以使这些数字值的含义失效。如果使用 @font-face,则完全否决了 CSS 对这些规则的定义。例如:当设置字体权重为 900 时,此规则将影响超薄字体,因为这就是我们告诉浏览器它必须做的事情。
@font-face {
  font-family: MyFont;
  font-weight: 900;
  src: url("./fonts/ultra-thin.woff2") format("WOFF2");
}

重要的是要知道这是唯一的两个官方数字/字符串映射。官方上没有其他映射,https://drafts.csswg.org/css-fonts-3/#font-weight-prop中的数值表只是为了说明哪些真正的CSS值映射到人们倾向于使用的粗略名称。最重要的部分是这仅适用于CSS,与实际存储在字体中的值或您在文字处理软件中看到的内容无关。

2

关于字体粗细没有单位的原因

字体粗细没有单位是因为随着字体粗细的增加和减少,并没有具体可辨认的“事物”被“调高和调低”。与字体大小不同,计算机上字体粗细的增加/减少通常并没有通过编程实现 - 每个字体厚度级别都需要由字体设计师手工创建为完全不同的字体。

这是因为编程实现字体粗细变化比改变大小要困难得多。加粗文本不仅仅是在整个字符上添加了厚度。它通过有选择地在某些字母的某些部分比其他部分更加厚重来添加对比度。请注意下面字体中字母“a”的某些部分如何随着权重的增加变得非常厚重,而同一字母的其他部分则没有增加多少。

Kazimir Text typeface.

这在编程方面并不容易实现,大多数情况下需要手动完成以使其看起来好看 - 印刷工人会创建他们字体的几个不同版本 - 通常是三个 - 开发人员会上传所有三种样式,并设置CSS font-weight属性仅在这些三种之间更改,通常为300、400和700。这是假设您想要真正的粗体/斜体。浏览器提供了假样式 - 假粗体、假斜体等,但结果通常并不理想。

现在的趋势是朝向可变字体,这种字体于2016年推出。它们是专门设计的字体,可以让开发人员完全控制字体粗细和斜体等样式属性。基本上,字体创建者会创建几个不同版本的字体,具有不同的粗细级别,计算机会智能地填充中间空白,以便开发人员现在可以使用给定字体的潜在无限度的字重。

即使有了这种变化,也很难确定使文本更加重或更轻的具体、科学可测量的“事物”。因此,我怀疑我们不会很快看到任何非相对单位引入字体粗细。

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

该系统基于1957年为Univers字体开发的Linotype系统。其想法是使用三个数字指定字重、宽度和斜体,顺序为字重、宽度和斜体。因此,099非常轻、非常宽、非常斜体。905非常沉重、非常压缩、斜体适中。这只是一个例子,实际可用值是不同的。人们更多地使用了系统中的“字重”部分,因此第二个和第三个数字越来越少被使用,直到它们变得像遗传器官一样,人们忘记了编号系统用于除了指定字重之外的任何其他内容。在这一点上,使用1-9级字重比100-900更有意义,但100-900现在已成为惯例。
我猜400是默认值,仅仅因为它正好位于中间。我认为他们选择400而不是500,是因为人们更经常希望加粗文本而不是减轻它,所以他们选择了留下更多空间供加粗使用的默认值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接