2020年8月更新
您不再需要通过媒体查询来定位Safari以启用亚像素字体平滑。默认值很好。
但是,尽管默认情况下它使用亚像素字体平滑,但是对于希望寻找一致的文本呈现的人来说,Chrome字体平滑的美中不足之处。
- 这是Chrome在深色背景上呈现的浅色文字
- 这是Chrome在浅色背景上呈现深色文字的效果
在上面的字母e中查看整体的大小。与浅色背景上的深色文本(具有相同的css字体样式)相比,深色背景上的浅色文本具有明显可观的重量。
对于尊重用户的暗/亮主题设置的网站,一种解决方案是使用仅限于暗模式的媒体查询来定位Chrome,然后将其切换为非亚像素平滑处理,如下所示:
@media screen
and (-webkit-min-device-pixel-ratio: 0)
and (min-resolution: 0.001dpcm)
and (prefers-color-scheme: dark) {
body {
-webkit-font-smoothing: antialiased;
}
}
结果 :
无论是在暗处还是在暗处,都具有更一致的文本粗细。
查看之前和之后的并排比较:
-
2018年5月更新
-webkit-font-smoothing: subpixel-antialiased
现在在Chrome中没有效果,但在Safari中,它仍然只能在RETINA上进行很多改进。在视网膜屏幕上的Safari中,如果没有它,文本将变得很薄且平淡,而有了它,文本将具有适当的重量。但是,如果您在Safari的非视网膜显示器上使用此功能(尤其是在轻量级时),文本将是一场灾难。强烈建议使用媒体查询:
@media screen and (-webkit-min-device-pixel-ratio: 2) {
body {
-webkit-font-smoothing: subpixel-antialiased;
}
}
-webkit-font-smoothing: subpixel-antialiased
如果希望至少部分地避免使用较薄的抗锯齿文字,则显式设置是当前的最佳解决方案。
--tl;博士-
在Safari和Chrome中,默认字体渲染均使用亚像素抗锯齿功能,任何强制基于GPU渲染的CSS(例如上述建议使用通过translateZ进行的转换甚至只是比例转换)都会导致Safari和Chrome自动“放弃” ”使用亚像素抗锯齿字体平滑,而是切换为仅抗锯齿文本,它看起来要轻薄得多,尤其是在Safari上。
其他响应集中在通过简单地设置或强制对较薄的抗锯齿文本进行字体平滑来保持恒定的呈现。在我看来,使用translateZ或隐藏的背面会大大降低文本渲染的质量,如果您只希望使文本保持一致并且可以使用较薄的文本,则最好的解决方案是使用-webkit-font-smoothing: antialiased
。但是,显式设置-webkit-font-smoothing: subpixel-antialiased
实际上确实会产生一些效果-文本仍然会略有变化,并且在GPU上渲染的过渡过程中,文本明显变薄,但没有设置时变薄。因此,这看起来至少部分阻止了改用平直的抗锯齿文字。