如果当前字体中没有浏览器,浏览器如何更改字体权重?

Ser*_*rov 1 html css browser algorithm fonts

假设我有一个不同字体权重的网络字体作为每个权重的不同文件.当我在CSS中更改不同的权重时,我想它会查找与该字体权重相关联的相应字体文件.一切按预期工作.

现在,如果我有另一种字体,其中没有不同的字体权重,那么我再次在样式表中设置不同的字体权重,并在浏览器中查看字体权重更改.

所以,我想知道,如何用丢失的字体权重来计算字体的外观?这是什么浏览器尝试使用某些算法猜测?如果是这样,我还需要其他字体权重文件吗?或者,这些算法通过不同的浏览器有多可靠?

Juk*_*ela 6

正如@BoltClock在评论中提到的,这在CSS字体模块级别3 CR中描述,第3.2节字体权重:字体权重属性和5.2 匹配字体样式,但它没有定义所有细节,浏览器行为可能变化.

基本原则是使用具有给定字体粗细的字体.对于大多数字体,只有普通(常规,400)和粗体(700)字体可用,可能只是正常的.在这种情况下,所有小于正常和500的字体都映射到正常,600,800和900映射为粗体.

如果粗体字体不可用但要求加粗(通过font-weight设置为600或更大),浏览器可以在普通字体上使用算法(合成)粗体.理论上,这取决于font-synthesis属性,但尚未实现,因此它取决于浏览器.

测试页面(假设Lucida Sans Unicode的可用性,Windows中常见的字体,只有普通字体):

<!DOCTYPE html>
<title>Test</title>
<style>
* { font-family: Lucida Sans Unicode }
</style>
<p>Hello world
<p style="font-weight: 600">Hello world
<p style="font-weight: 700">Hello world
<p style="font-weight: 800">Hello world
Run Code Online (Sandbox Code Playgroud)

Firefox和IE以合成粗体(人造粗体)显示除第一个之外的段落,而Chrome仅显示最后两个段落,即不将600映射为粗体而是正常.

一般来说,合成的粗体是印刷工人不赞成的,这是有充分理由的.然而,对于具有很小或没有笔画宽度变化的无衬线字体,例如Lucida Sans Unicode或Arial Unicode MS,它可能产生可接受的结果.