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

时间:2014-05-27 12:04:10

标签: html css algorithm browser fonts

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

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

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

3 个答案:

答案 0 :(得分:5)

正如@BoltClock在评论中所提到的,这在CSS字体模块级别3 CR,第3.2节Font weight: the font-weight property和5.2 Matching font styles中有所描述,但它没有定义所有细节和浏览器行为可能会有所不同。

基本原则是使用具有给定字体粗细的字体。对于大多数字体,只有普通(常规,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

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

一般来说,合成大胆是印刷工人不赞成的,这是有充分理由的。但是,对于中风宽度变化很小或没有变化的sans-serif字体,它可能会产生可接受的结果,例如Lucida Sans Unicode或Arial Unicode MS。

答案 1 :(得分:3)

回答link

  

font-weight属性接受关键字值或预定义   数值。可用的关键字是:

     

普通粗体大胆打火机可用的数值为:

     

100 200 300 400 500 600 700 800 900关键字值法线映射到   数值400和粗体值映射到700。

     

为了使用400或700以外的值查看任何效果,   正在使用的字体必须具有与指定的面匹配的内置面   权重。

     

如果字体有粗体(&#34; 700&#34;)或普通(&#34; 400&#34;)版本作为   字体系列,浏览器将使用它。 如果没有,   浏览器将模仿其自己的粗体或正常版本的字体。它   不会模仿其他不可用的重量。字体通常使用名称   喜欢&#34;常规&#34;和&#34; Light&#34;识别任何备用字体权重。

答案 2 :(得分:0)

如果找不到合适的字体系列,浏览器基本上会猜测。并且猜测意味着您将获得较差的质量渲染,以及跨浏览器的不一致结果。所以,如果可能的话,你真的应该试着不要让这种情况发生:

参考:http://alistapart.com/article/say-no-to-faux-bold