相同的字体,除了它的重量在不同的浏览器上似乎不同

Posted

技术标签:

【中文标题】相同的字体,除了它的重量在不同的浏览器上似乎不同【英文标题】:Same font except its weight seems different on different browsers 【发布时间】:2011-07-02 05:50:31 【问题描述】:

文本在 Chrome 中正确显示。我希望它在所有浏览器中都以这种方式显示。我该怎么做?

我可以在 Safari 中使用 -webkit-font-smoothing: antialiased; 解决此问题

铬:

火狐:

h1 
    font-family: Georgia;
    font-weight: normal;
    font-size: 16pt;
    color: #444444;
    -webkit-font-smoothing: antialiased;
<h1>Hi, my name</h1>

还有一个 JSFiddle:http://jsfiddle.net/jnxQ8/1/

【问题讨论】:

一般来说,不同的浏览器都会处理自己的文本渲染。如果你谷歌这个,你会看到很多关于浏览器渲染的结果。除非你的 CSS 中有一些古怪的东西,否则你很可能会受到每个关联浏览器的不同渲染引擎的摆布。 是截图的人。我在 Safari 中使用 -webkit-font-smoothing: antialiased; 解决了它现在是 Firefox 吗? 这不是 css3 吗?字体平滑? 绝对是 Chrome 中的 Webkit 字体平滑声明。它只影响特定的字体,这个网站在 2010 年发布了它。ilikekillnerds.com/2010/12/… 【参考方案1】:

我有很多网站都存在这个问题,终于找到了解决方法,解决了 firefox 字体比 chrome 更粗的问题。

你需要在你的 -webkit fix 旁边有这行 -moz-osx-font-smoothing: grayscale;

body
    text-rendering: optimizeLegibility;
   -webkit-font-smoothing: subpixel-antialiased;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;

【讨论】:

【参考方案2】:

我收集并测试了讨论的解决方案:

Windows10 教授 x64:

* FireFox v.56.0 x32 
* Opera v.49.0
* Google Chrome v.61.0.3163.100 x64-bit

macOs X Serra v.10.12.6 Mac mini(2010 年中):

* Safari v.10.1.2(12603.3.8)
* FireFox v.57.0 Quantum
* Opera v49.0

Semi(在 Safari 中仍然是微胖)解决了胖字体:

text-transform: none; // mac ff fix
-webkit-font-smoothing: antialiased; // safari mac nicer
-moz-osx-font-smoothing: grayscale; // fix fatty ff on mac

没有视觉效果

line-height: 1;
text-rendering: optimizeLegibility; 
speak: none;
font-style: normal;
font-variant: normal;

错误的视觉效果:

-webkit-font-smoothing: subpixel-antialiased !important; //more fatty in safari
text-rendering: geometricPrecision !important; //more fatty in safari

不要忘记在测试时设置 !important 或确保您的样式没有被覆盖

【讨论】:

文本转换如何修复/破坏任何东西?【参考方案3】:

确保所有浏览器的字体都相同。如果是相同的字体,那么问题有no solution使用cross-browser CSS

因为每个浏览器都有自己的字体渲染引擎,所以它们都是不同的。它们在更高版本或不同操作系统中也可能不同。

更新:对于那些不了解浏览器和操作系统字体渲染差异的人,read this 和this。

但是,大多数人甚至都没有注意到这种差异,并且用户接受了这一点。忘记像素完美的跨浏览器设计,除非你是:

    试图关闭 CSS 的亚像素渲染(并非所有浏览器都允许这样做,而且文本可能很难看...) 使用图像(资源要求高且难以维护) 替换 Flash(需要一些编程,不适用于 ios

更新:我检查了示例页面。通过文本渲染调整字距应该会有所帮助:

text-rendering: optimizeLegibility; 

更多参考:

    字体渲染的一部分由font-smoothing(如前所述)控制,另一部分是text-rendering。调整这些属性可能会有所帮助,因为它们的默认值在不同浏览器中并不相同。 对于 Chrome,如果您仍然无法正常显示,请尝试此text-shadow hack。它应该会改善您的 Chrome 字体渲染,尤其是在 Windows 中。但是,text-shadow 在 Windows XP 下会发疯。小心。

【讨论】:

我不明白为什么 Chrome 和 Safari 的呈现方式不同:它们都是基于 WebKit 的。 是的,但 Chrome 显然会自动应用 `-webkit-font-smoothing: antialiased;' Safari 没有? chrome 和 safari 相似但浏览器不同:它们共享相同的基础 webkit,但许多特定于平台的组件和 css 模块不同 - safari 支持的 css3 属性比 chrome 多。并且字体渲染是非常特定于平台的。 @ChrisW - Safari 拥有自己的字体渲染引擎,可以提供与 OSX 类似的体验。因此,“-webkit-font-smoothing”属性似乎只适用于 Safari(在 Windows 下)。还有一个变量是,您可以在浏览器首选项中修改抗锯齿。 我实际上在同一个站点的两个不同页面上遇到了问题,应用了相同的 CSS,呈现不同的结果。 font-smoothing: antialiased; 为我创造了奇迹。【参考方案4】:

试试-webkit-font-smoothing: subpixel-antialiased;

【讨论】:

【参考方案5】:

试试text-rendering: geometricPrecision;

不同于text-rendering: optimizeLegibility;,它在缩放字体时处理字距问题,而最后一个启用字距和连字。

【讨论】:

【参考方案6】:

这里有一些很好的信息: https://bugzilla.mozilla.org/show_bug.cgi?id=857142

目前仍在试验,但目前仅针对 FF 的微创解决方案是:

body 
-moz-osx-font-smoothing: grayscale;

【讨论】:

【参考方案7】:

为了最好地标准化跨浏览器的 @font-face 嵌入字体,请尝试在 @font-face 声明或正文字体样式中包含以下内容:

speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;

目前似乎没有适用于所有平台和浏览器版本的通用修复。如前所述,所有浏览器/操作系统都有不同的文本渲染引擎。

【讨论】:

【参考方案8】:

我不认为在屏幕上使用“点”作为字体大小是一个好主意。尝试在字体大小上使用 px 或 em。

来自W3C:

不要在pt中指定字体大小, 或其他绝对长度单位。他们 跨平台呈现不一致 并且不能由用户代理调整大小 (例如浏览器)。

【讨论】:

但这与字体的粗细无关? 粗体由字体平滑(以及操作系统和浏览器渲染引擎的亚像素技术)控制。 ON chrome 与 Chrome 20 的开始相同,chrome 17 的 OK

以上是关于相同的字体,除了它的重量在不同的浏览器上似乎不同的主要内容,如果未能解决你的问题,请参考以下文章

Webfonts 在 Windows、Mac 和 Linux 上呈现不同

OSX NSFont 与 Photoshop 中完全相同的字体不同

使用React Native在Android / iOS上使用不同的lineHeight

在具有相同 rem 的元素上,字体大小的计算方式不同

无法在 NLB 上加载视图状态

在 Android 和桌面浏览器上不同的字体大小呈现