Chrome更新突然中断@ font-face

时间:2017-11-03 14:57:23

标签: html css google-chrome fonts

我尝试使用@ font-face来替换字体的实例。这通常对我有用:

@font-face {
    font-family: 'Arial';
    font-weight: bold;
    font-style: italic;
    src: local('Times New Roman');
}

@font-face {
    font-family: 'Arial';
    font-weight: bold;
    src: local('Times New Roman');
}

@font-face {
    font-family: 'Arial';
    font-style: italic;
    src: local('Times New Roman');
}

@font-face {
    font-family: 'Arial';
    src: local('Times New Roman');
}

最终结果是Arial的实例被Times New Roman取代。实际上,这适用于运行Windows 10和Chrome 61.0.3163.100的单独计算机。

然而,在最近更新到62.0.3202.62之后,Arial仍然被Times New Roman取代,但粗体和斜体不再起作用。试图引用类似" Times New Roman Bold"没有工作,只是默认回Arial。在粗体和斜体src行之后放置!important会给出虚假粗体和虚假斜体。

旧的行为是错的吗?如果可能的话,通过CSS替换字体的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

我们无法引用像“Times New Roman Bold”或“Arial Bold”这样的内容,看起来像是Chrome的错误,请阅读以下内容。

  1. 跟踪问题:https://bugs.chromium.org/p/chromium/issues/detail?id=627143,在#25 drott中引用local()的规范。

  2. Here drott回答原因:

      

    我们的本地匹配被破坏并使用姓氏进行匹配,而不是使用postscript名称
       - Drott酒店

  3. Here drott表示,之前的解决方法打破了Google Fonts对Android Chrome的期望。

      

    这个改变实际上使得src:local()处理更加正确,通过将样式排除在外,但确实打破了Google Fonts所期望的。

         

    有两个问题:我们的src:local()匹配被破坏,与全字体名称或postscript字体名称不匹配,即问题627143.

         

    我们做了什么,我们将src:local()与字体系列名称相匹配,另外我们考虑了拉伸,样式,重量请求(来自CSS样式,存储在FontDescription中)并将其输入到家庭匹配。

         

    通过这种破坏的local()匹配,Google字体的CSS设法使用本地(“sans-serif”)加上font-weight:bold和font-weight:100来匹配本地机器人变体,或者300。

         

    我将部分恢复上述CL并恢复该错误,直到我以更持久的方式修复local()匹配。
       - Drott酒店

  4. 相关提交。

答案 1 :(得分:0)

首先,你为什么这样做? 你不能使用

font-family: "Times New Roman";

在身体元素上?