【问题标题】:The web version of the Noto Serif font seems to be missing the dagger character in spite Google says that this character does existNoto Serif 字体的网络版本似乎缺少匕首字符,尽管谷歌说这个字符确实存在
【发布时间】:2021-05-14 05:03:10
【问题描述】:

我在 10 月份使用 LibreOffice 在我的计算机上安装了 Noto Serif 字体。

这是一个测试文件:

@import url('https://fonts.googleapis.com/css2?family=Noto+Serif&display=swap');

body {
  font-family: "Noto Serif", sans-serif;
  font-size: 50px;
}
<p>† foo</p>

<p>‡ bar</p>

如果我删除导入行,浏览器将使用本地版本的字体,两个匕首看起来都正确。 (右图。)

但是,如果我 删除导入行,因此浏览器将使用该字体的 Web 版本,则字体中似乎缺少第二把匕首,因此会自动用无衬线字体的字体代替。 (左图。)

Google 自己“说”这两种匕首都包含在网页版字体中:

https://fonts.google.com/specimen/Noto+Serif?query=noto+serif&preview.text_type=custom&preview.text=test%20%E2%80%A0%20%E2%80%A1

为什么会这样?

【问题讨论】:

    标签: css fonts typography


    【解决方案1】:

    解决方案

    要解决此符号的问题,您可以使用Google Font API text query parameter,它将仅返回提供的符号/字符的字形:

    在这些情况下,您应该考虑在字体请求 URL 中指定 text= 值。这允许 Google 字体返回针对您的请求进行了优化的字体文件。

    @import url('https://fonts.googleapis.com/css2?family=Noto+Serif&display=swap');
    @import url('https://fonts.googleapis.com/css2?family=Noto%20Serif&text=‡');
    
    
    body {
      font-family: "Noto Serif", sans-serif;
      font-size: 50px;
    }
    &lt;p&gt;test † ‡&lt;/p&gt;

    TL;DR

    字体它只是与 Unicode 符号匹配的字形集合。谷歌字体试图为每个特定情况提供优化的字形包。例如,Noto Serif 的默认 URL 将返回所有主要子集的 CSS 代码,例如:latinlatin-ext西里尔文等。点击下面的链接查看子集的完整列表

    Google Fonts API 支持subset query parameter,因此您可以灵活地为您配置所需的subset,并且不会加载过多。

    ‡ Double Dagger 有 U+2021 Unicode 编号,它是 General Punctuation Unicode subset 的一部分,使用范围在 2000-206F 之间。 Google 字体在 latin 子集中包含此范围:

    @font-face {
      font-family: 'Noto Serif';
      font-style: normal;
      font-weight: 400;
      src: url(https://fonts.gstatic.com/s/notoserif/v9/ga6Iaw1J5X9T9RW6j9bNfFcWaDq8fMU.woff2) format('woff2');
      unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
    }
    

    什么意思?

    这意味着您所做的一切都是正确的,因为正确请求了所有必需的子集,但是以某种方式获取的字体不包含 U+2021 符号的字形。它看起来像谷歌字体方面的一个错误。作为临时解决方案,您可以使用建议的解决方法,但我认为应该向 Google Font 报告。

    相关问题

    【讨论】:

    【解决方案2】:

    我正在尝试了解您的问题,我认为@Riskbreaker 的答案是解决您的问题的好主意。

    如果你需要得到这个字符:

    您需要设置字体系列:

    font-family: 'Noto Serif', serif;

    解释无衬线定义:任何字母没有衬线(= 小线)的字体

    所以你的“问题”只是所有浏览器的默认行为。

    我已经在我的 codepen 上尝试了一些测试,如您所见,您可以使用 Google 字体中推荐的行来修补您的问题:

    font-family: 'Noto Serif', serif;
    

    对你来说不是一个好的解决方案,但这个技巧可以解释你的问题。实际上,字体“Noto Serif”默认不存在字符“‡”,因此,如果您应用第二个属性“serif”,则不会发生任何变化,因为它是默认样式。但是,如果添加“sans-serif”属性,浏览器可以解释该值并将字符设置为“sans-serif”值。

    然而,由于几次,谷歌添加了第二个链接以使用 CDN:

    <link rel="preconnect" href="https://fonts.gstatic.com">
    

    此链接对您没有任何改变,但我建议使用它进行更新。

    我的第二个建议是不要在本地安装字体或禁用它,因为它会更容易调试您的问题,并且安装的本地字体可能会产生一些错误或冲突。

    您还可以在此链接查看 serif 和 sans-serif 之间的区别:https://about.easil.com/support/serif-vs-sans-serif/

    希望我的回答对您有所帮助,您可以在此链接查看我的 codepen 测试: https://codepen.io/ZellRDesign/pen/eYBvxPV

    【讨论】:

    • 如果您检查我的答案,您实际上会看到 Noto Serif 有这个符号的字形,所以您在此声明中是错误的。
    • 我认为你错了,在 google font 上,daggers 的符号是默认样式浏览器,正如您在我的 codepen 中最后一段没有自定义字体的情况下看到的那样。我的回答不需要糟糕的投票。我添加了一些细节。
    • 只需使用开发人员工具检查您的 codepen 中呈现的字体。 Elements -> Computed -> 滚动到底部的“Rendered Fonts”,您会看到一些无衬线字体,具体取决于您的操作系统。 Mac 是“Times”,Ubuntu 是“Liberation Serif”,当然不是“Noto Serif”
    • 然后,以同样的方式检查我的答案,以确保“Noto Serif”具有此符号的字形
    猜你喜欢
    • 2016-11-05
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2011-11-18
    • 2020-05-24
    • 2012-02-16
    • 2011-07-08
    相关资源
    最近更新 更多