Noto Serif 字体的网络版本似乎缺少匕首字符,尽管 Google 说这个字符确实存在
The web version of the Noto Serif font seems to be missing the dagger character in spite Google says that this character does exist
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>
如果我删除导入行,浏览器将使用本地版本的字体并且两把匕首看起来都是正确的。 (右图。)
但是,如果我不删除导入行,因此浏览器将使用网页版字体,字体中似乎缺少第二把匕首并且由于这个原因,它会自动被 sans-serif 字体中的字体替换。 (左图。)
Google 本身“说”这两种匕首都包含在网页版字体中:
为什么会这样?
解决方案
要解决此符号的问题,您可以使用 Google Font API text
query parameter,它将 return 字形仅用于提供的 symbols/characters:
In these cases, you should consider specifying a text= value in your font request URL. This allows Google Fonts to return a font file that's optimized for your request.
@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;
}
<p>test † ‡</p>
TL;DR
Font 它只是与 Unicode 符号相匹配的字形集合。 Google 尝试为每种特定情况提供优化的字形包的字体。例如,Noto Serif 的默认 URL 将 return 所有主要子集的 CSS 代码,例如:latin、latin-ext、cyrillic 等。单击下面的 link 查看子集的完整列表
Google 字体 API 支持 subset
query parameter,因此您可以灵活地为您配置所需的 subset
,并且不会加载超过需要的内容。
‡ Double Dagger has U+2021 Unicode number, and it's a part of the 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 字体端的错误。作为临时解决方案,您可以使用建议的解决方法,但我认为应该将其报告给 Google 字体。
相关问题
我正在尝试了解您的问题,我认为@Riskbreaker 的回答是解决您的问题的好主意。
如果您需要获取此字符:
您需要设置字体系列:
字体系列:'Noto Serif',衬线;
解释 Sans-Serif 定义:字母没有衬线(=细线)的任何字体
所以你的“问题”只是所有浏览器的默认行为。
我已经在我的 codepen 上尝试了一些测试,正如您将看到的,您可以使用 Google 字体中推荐的行来修补您的问题:
font-family: 'Noto Serif', serif;
这对您来说不是一个好的解决方案,但这个技巧可以解释您的问题。实际上,字体“Noto Serif”默认不存在字符“‡”,因此,如果您应用第二个属性“serif”,则不会发生任何变化,因为它是默认样式。但是,如果您添加“sans-serif”属性,浏览器可以解释该值并将字符设置为“sans-serif”值。
但是,由于几次,google 添加第二个 link 来使用 CDN :
<link rel="preconnect" href="https://fonts.gstatic.com">
这个link对你来说没有任何改变,但我建议使用它来更新。
我的第二个建议是不要在本地安装字体或禁用它,因为调试问题会更容易,而且安装的本地字体会产生一些错误或冲突。
您还可以在此处 link 查看衬线体和无衬线体之间的差异:https://about.easil.com/support/serif-vs-sans-serif/
希望我的回答对您有所帮助,您可以在link查看我的codepen测试:
https://codepen.io/ZellRDesign/pen/eYBvxPV
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>
如果我删除导入行,浏览器将使用本地版本的字体并且两把匕首看起来都是正确的。 (右图。)
但是,如果我不删除导入行,因此浏览器将使用网页版字体,字体中似乎缺少第二把匕首并且由于这个原因,它会自动被 sans-serif 字体中的字体替换。 (左图。)
Google 本身“说”这两种匕首都包含在网页版字体中:
为什么会这样?
解决方案
要解决此符号的问题,您可以使用 Google Font API text
query parameter,它将 return 字形仅用于提供的 symbols/characters:
In these cases, you should consider specifying a text= value in your font request URL. This allows Google Fonts to return a font file that's optimized for your request.
@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;
}
<p>test † ‡</p>
TL;DR
Font 它只是与 Unicode 符号相匹配的字形集合。 Google 尝试为每种特定情况提供优化的字形包的字体。例如,Noto Serif 的默认 URL 将 return 所有主要子集的 CSS 代码,例如:latin、latin-ext、cyrillic 等。单击下面的 link 查看子集的完整列表
Google 字体 API 支持 subset
query parameter,因此您可以灵活地为您配置所需的 subset
,并且不会加载超过需要的内容。
‡ Double Dagger has U+2021 Unicode number, and it's a part of the 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 字体端的错误。作为临时解决方案,您可以使用建议的解决方法,但我认为应该将其报告给 Google 字体。
相关问题
我正在尝试了解您的问题,我认为@Riskbreaker 的回答是解决您的问题的好主意。
如果您需要获取此字符:
您需要设置字体系列:
字体系列:'Noto Serif',衬线;
解释 Sans-Serif 定义:字母没有衬线(=细线)的任何字体
所以你的“问题”只是所有浏览器的默认行为。
我已经在我的 codepen 上尝试了一些测试,正如您将看到的,您可以使用 Google 字体中推荐的行来修补您的问题:
font-family: 'Noto Serif', serif;
这对您来说不是一个好的解决方案,但这个技巧可以解释您的问题。实际上,字体“Noto Serif”默认不存在字符“‡”,因此,如果您应用第二个属性“serif”,则不会发生任何变化,因为它是默认样式。但是,如果您添加“sans-serif”属性,浏览器可以解释该值并将字符设置为“sans-serif”值。
但是,由于几次,google 添加第二个 link 来使用 CDN :
<link rel="preconnect" href="https://fonts.gstatic.com">
这个link对你来说没有任何改变,但我建议使用它来更新。
我的第二个建议是不要在本地安装字体或禁用它,因为调试问题会更容易,而且安装的本地字体会产生一些错误或冲突。
您还可以在此处 link 查看衬线体和无衬线体之间的差异:https://about.easil.com/support/serif-vs-sans-serif/
希望我的回答对您有所帮助,您可以在link查看我的codepen测试: https://codepen.io/ZellRDesign/pen/eYBvxPV