如何使用 Unicode 范围描述符对基本拉丁语(128 个字形)进行子集化

BBa*_*ger 2 css unicode fonts webfonts woff2

我正在尝试使用 Unicode 范围描述符对基本拉丁语(128 个字形)的字体进行子集化,但我没有看到我尝试过的少数变体的结果。

在有关减小 Web 字体大小的资源中,它给出了将拉丁字形的 unicode 范围设置为 的示例U+000-5FF维基百科说基本拉丁语的 unicode 范围U+0000U+007F

我尝试了以下几种变体(在 SASS 中):

@font-face {
    font-family: "Montserrat";
    font-style: normal;
    font-weight: 600;
    src: local("Montserrat SemiBold"), local("Montserrat-SemiBold"),
    url("#{$montserrat-font-path}/Montserrat-SemiBold-woff2.woff2") format("woff2"),
    url("#{$montserrat-font-path}/Montserrat-SemiBold-woff.woff") format("woff");
    font-display: swap;
    unicode-range: U+0000-007F; /* Basic Latin, 128 glyphs */
}
Run Code Online (Sandbox Code Playgroud)

范围需要是多少?服务器(Sitecore/.Net)上是否需要配置?我是否以正确的方式检查文件大小?如何减小文件大小?

另外... [附带问题] 我还没有遇到此功能的服务器兼容性。看起来服务器必须参与决定要提供哪些字形。我们是否应该假设所有现代服务器都可以做到这一点?

loo*_*ops 5

您无法减少使用 传输的数据量unicode-range。它仅用于决定是否应该加载字体:

“如果页面不使用此范围内的任何字符,则不会下载字体;如果至少使用一个字符,则下载整个字体”

unicode-range因此,除了按原样提供字体文件即可运行之外,不需要特殊的服务器配置。

如果您只想下载某些字符,则需要创建一个仅包含某些字符的全新字体文件。当我需要创建优化的字体子集时,我通过使用FontForge编辑字体来手动删除不需要的字形。您还可以使用pyftsubset等软件自动执行该过程。