为啥后备字体会禁用 opentype 功能?

Posted

技术标签:

【中文标题】为啥后备字体会禁用 opentype 功能?【英文标题】:Why does fallback font disable opentype features?为什么后备字体会禁用 opentype 功能? 【发布时间】:2019-09-06 15:22:22 【问题描述】:

当我在我的 CSS 代码中添加备用字体时,我的网站不再显示我已激活的 opentype 功能。为什么是这样?

Opentype 功能适用于:font-family: "Ogg-Roman";

Opentype 功能不起作用:font-family: "Ogg-Roman", Georgia, serif;

这是我的网站:https://cpdesignery.com/

    @font-face 
font-family: "Ogg-Roman", Georgia, serif;
src: url('https://cpdesignery.com/wp-content/uploads/2019/01/Ogg-Roman.eot');
src: url('https://cpdesignery.com/wp-content/uploads/2019/01/Ogg-Roman.eot?#iefix') format('embedded-opentype'), 
url('https://cpdesignery.com/wp-content/uploads/2019/01/Ogg-Roman.woff2') format('woff2'), 
url('https://cpdesignery.com/wp-content/uploads/2019/01/Ogg-Roman.woff') format('woff');


h1, h2, h3, h4 
    -webkit-font-feature-settings: "ss01" on, "ss03" on;
    -moz-font-feature-settings: "ss01" on, "ss03" on;
    -ms-font-feature-settings: "ss01" on, "ss03" on;
    font-feature-settings: "ss01" on, "ss03" on;

【问题讨论】:

你能解释一下到底是什么不工作吗?查看该起始页的 h1 标题,当我使用开发工具在两个变体之间切换时,我没有看到 anything 发生变化。 (在 Chrome 中,不确定它是否支持您首先提到的任何功能。) 明白了。当我像这样从 CSS 中取出后备字体时: (font-family: "Ogg-Roman";) 它可以工作。但是当我像这样将后备字体添加到 CSS 中时:(font-family: "Ogg-Roman", Georgia, serif;) opentype 功能停止工作。 是的,我第一次知道...但是 究竟是什么停止工作是我想知道的(您具体在谈论哪些功能,您的页面上的确切位置可以我们看到它们在行动),因为正如我所说,在开发工具中简单地在两者之间切换时,我无法重现您的问题。 (或者后者不会重现问题,并且它实际上需要在页面加载时从一开始就在样式表中?) 我打开的特定 Opentype 功能是:“ss01”,它改变了这些样式集:g y ÿ ĝ ğ ġ ģ ŷ。 Opentype 已激活:tinypic.com/r/24686kz/9 【参考方案1】:

风格集功能的行为是特定于字体的:字体设计师可以随意使用它们,无论他们选择什么——即,他们想要提供的任何风格差异。因此,如果您继续应用“ss01”功能但更改底层字体,您最终可能会得到截然不同的风格效果。

section 6.9 of CSS Fonts Module Level 4 中描述了一般问题(这不仅适用于样式集功能)。

假设后备字体甚至支持给定的 OpenType 功能。可能不会。在这种情况下,来自CSS4 Fonts, 6.12 的这个是相关的:

字体中不存在的特征标签将被忽略;用户代理不得尝试基于这些功能标签综合回退行为。一个例外是用户代理可以综合支持紧缩特性,其字体包含紧缩表形式的紧缩数据,但在 GPOS 表中缺乏紧缩特性支持。

类似,来自第 7.2 节:

当字体不支持给定的基础字体功能时,文本会简单地呈现,就好像该字体功能未启用一样;不会发生字体回退,并且不会尝试合成该功能,除非为特定属性明确定义。

【讨论】:

以上是关于为啥后备字体会禁用 opentype 功能?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Excel 2010 VBA 用户窗体文本框字体会根据框架的大小而变化?

带有 itext 的 OpenType 字体字距调整

为啥我的 HTML5 mp4 视频的 Flash 后备功能不起作用?

同样用Firefox浏览器为啥在Windows和Ubuntu下显示的字体会很不同?

为啥WORD转换PDF时字体会丢失?

如何从 Opentype 字体的 GPOS 表中使用和提取字距调整对,以在 Java 中将字形正确显示为 Path2D?