为何我的 Firefox 显示不了「知乎」网页的中文粗体?

很久很久以前,用火狐浏览知乎一切正常。然后大概是从 2019 年前后的某一天,应该是知乎升级了系统,知乎上的中文就没有粗体效果,粗体显示得跟普通的非粗体一样。只是中文没有粗体效果,英文数字依然有,可能是由于我的 fontconfig 为中英文配置了不同的字体导致。但偶尔又能看到知乎上的某些中文显示了粗体,这时查看其 HTML 源代码发现用的是 <strong></strong> 标签,而非常见的 <b></b>.

目前我只发现用火狐浏览知乎有这个问题,其他网站上的粗体似乎没问题。当然可能有些网站的粗体没显示出来,但我没意识到。后来在我摆弄 fontconfig 的配置时发现,通过修改 fontconfig 的配置文件,可以让火狐显示出知乎中文粗体来。在配置 sans 和 serif 等常用的字体别名时,将原先的 <alias> 改成 <alias binding="same">, 提高其绑定优先级,然后在到火狐里的 about:config 下将 gfx.font_rendering.fontconfig.max_generic_substitutions 的值调大一些,这时就能显示知乎上的中文粗体。如果将 <alias binding="same"> 中的 binding=“same” 去掉,退回普通的 “弱绑定”,就没有知乎粗体效果。或者 fontconfig 里的 binding 不去掉,但将火狐里的 about:config 下的 gfx.font_rendering.fontconfig.max_generic_substitutions 的值调小一些,也显示不了知乎粗体。并且这种知乎上的中文粗体突然显示出来了的情况只出现在老版的 Firefox 52 上,因为我保留了一些旧版火狐来测试。对于之后的新版火狐,无论怎样修改 fontconfig 配置,以及调整 gfx.font_rendering.fontconfig.max_generic_substitutions, 都无法将知乎上的中文粗体显示出来。

感觉这个问题似乎是火狐的一个 Bug, 并且跟 fontonfig 的配置、具体的字体以及具体的网页相关。有其他人遇到相似的问题吗?什么解决方法才彻底,因为我上面的方法只是偶尔测试碰巧遇上的,并且只适应于 Firefox 52, 没有根治这个 Bug.

我记得知乎上没粗体是因为使用的字体不支持那个粗细,火狐选择了最接近的粗细,然而它跟普通字一样粗细。

PS: Grafana 不使用它指定的字体的话,也可能会有类似的问题。

1赞

这是 Bug, 还是 Feature ?

是只有我选用的 “文泉驿” 字体显示不了知乎的中文粗体,还是其他字体也会如此?

我搜索 Firefox 知乎 粗体, 好像没有其他人反映过类似的情况。

嗯,文泉驿不行。思源我记得是可以的。

1赞

文泉驿没有粗体,它只有一个字号 Medium 也就是 Regular。

哪怕没有原生粗体,也完全可以用软件模拟出粗体来。现在只是显示不了知乎网页的粗体,大多数其他网站的粗体正常显示。

软件模拟粗体就是 fontconfig 90-synthetic.conf 模拟的呀,但是浏览器不完全尊重 fontconfig 配置的,绝大多数只是用到了 pattern match 功能。我对 chromium 和 fontconfig 的代码挖掘显示它完全不尊重 这种规则,简单说不使用 FcFontRenderPrepare 函数的程序都不支持 font match,除非浏览器引擎自己有粗体代码。

1赞

因为知乎 CSS 中写了:

font-synthesis: style;

也就是只 允许浏览器合成 样式,没允许粗细。

你可以学我,用扩展加载个规则:

.ztext b {
  font-synthesis: weight style ! important;
}

PS: 这论坛怎么非要给我在奇怪的地方加上空格呢……那个感叹号后边应该是没有空格的。

1赞

加了这个规则后,知乎上的粗体回来了!

非常感谢您的帮助,此帖完结。

为何有些帖子提供 “解决方案” 的按钮,可以让楼主在获得解决方案后 “结帖”,但另外一些帖子不行?

比如本帖子已经在上面获得了 lilydjwg 的完美解决,我却没有 “解决方案” 的按钮可用。

@Offline 这个是分类别启用的,这个类别之前没有启用,现在再试试。

可能是 Ruby 的自动加空格插件不完美导致的,我一直想重写,但没有时间

刚刚看到了 “解决方案” 的按钮,但我点一下就出错了。再刷新,又看不到 “解决方案” 了。

现在好了,刚设置的需要疏通一下 :joy:

依然无效……

现在可以了,结帖。

本主题在最后一个回复创建后60分钟后自动锁定。不再允许添加新回复。