【问题标题】:css line-height rendering differently in IE, Safari and Chromecss line-height 在 IE、Safari 和 Chrome 中的渲染方式不同
【发布时间】:2012-11-19 05:31:22
【问题描述】:

前言:最初我只记住 Windows,但在 Mac Air 上测试了一段时间后,我意识到那里的情况更糟。虽然在真实的代码中它不是那么麻烦,虽然有一些不一致。

这是测试 http://jsbin.com/ehegaj/6/edit

简而言之,发生了什么。我有应用 line-height 属性的标题,这始终是一行标题,所以我锁定了高度以适合字体。在不同的浏览器(和操作系统)中,您可以看到不同的文本布局。有什么想法可以解决吗?

UPD:这里http://jsbin.com/uzucuf/1/edit 是我所做的真实工作的非常接近的例子,同样它并不像上面的示例测试那么糟糕,但仍然有移动像素。

UPD2:

进行了更多的测试,主要集中在 Windows 7 上,并且包含带有不同行高的不同浏览器的测试屏幕截图的图像。您可以看到它们之间的视觉不一致。

大约是 1px,所以实际上我可以通过使用 line heeight 29px 并为 IE 提供不同的 line height 30px 来修复它。虽然我只是将其保留为 30px 行高并忽略 safari,但在这一点上我很好。

所以只是好奇为什么会这样?这种渴望迫使他们花费几个小时浏览不同的资源:

This guy,看起来有同样的问题,但只是摆脱了寻找问题的原因。

Other person 建议仅对 line-height 使用偶数值,这在我看来有点奇怪:) 如果我在这里做错了,请纠正我。

Some other 但有点无关的话题只是很感兴趣继续阅读。

And finaly,看起来我找到了答案,有点模糊,但实际上有点道理。

1.三组行距值
出于 TrueType 和 OpenType 字体格式历史的模糊原因,每个 webfont 都带有三组行距值。

在 System 7 中引入的“旧 Mac”集。在旧 Mac OS 中,如果字形到达“旧 Mac”行距线的上方或下方,则字形将被垂直挤压以适应。

在 Windows 3.1 中引入的“旧 Windows”集,其中任何超出或低于“旧 Windows”上升线和下降线的轮廓部分都不会出现在屏幕上(因此字形会被裁剪)。 一套“印刷版”,据说没有其他两组的限制。

然而,问题在于许多 Windows 应用程序仍然使用“旧 Windows”值。通常这样做是为了防止从旧应用程序创建的文档中回流。在 Mac OS X 上,不会发生挤压,但大多数应用程序仍使用“旧 Mac”值。

这个包袱被带到了浏览器中。 Mac OS X 上的 Chrome 使用与 Windows 上的 Chrome 不同的一组值; Windows 7 上的 Firefox 使用的值集与 Windows XP 上的 Firefox 不同,Windows 7 上的 Firefox 使用的值集与 Windows 7 上的 Chrome 不同。同一浏览器的 Mac 和 Windows 版本将使用不同的值集,而不同同一操作系统上的浏览器也可能使用不同的值!在理想的世界中,简单的解决方案是字体代工厂确保所有三组值导致相同的结果。但是许多现有字体是在构思 webfonts 之前创建的,字体创建工具并不能让字体设计师轻松地使这些值“正确”。

简而言之:有许多字体的行距值会导致操作系统和浏览器之间的不一致。

但我仍然不能 100% 确定是这样。可能有人做出更好的猜测并给出更明确的答案,就像给孩子的解释一样:)?

【问题讨论】:

  • 奇怪,但我也注意到了这一点。也许您尝试做的事情对于跨浏览器兼容性来说太精确了?您能告诉我们您正在尝试做什么,以便我们可以帮助您为您提供替代解决方案吗?
  • 谢谢西蒙,我正在尝试制作一种全局标题,测试代码与实际代码相差甚远,我只是为我需要的东西添加了更多的高度和行高。再一次,它看起来并没有那么糟糕,尤其是在 Mac 中。稍后我会准备更接近的样本
  • 我认为您的h1 上的height 对您来说是破坏一切的原因。同样,您的问题还不清楚,但看看这里发生了什么:jsbin.com/ehegaj/12/edit
  • 我这里需要身高,会尽快更新问题的详细信息
  • 出于好奇,您是否已将所有全局重置应用到您的样式表?

标签: fonts css cross-browser


【解决方案1】:

您使用相同字体时遇到不同结果的原因似乎是因为您实际上并没有使用相同的字体。 sans-serif 确实是一个变量,不同的浏览器对 sans-serif 使用不同的字体。如果您将其更改为 Arial,则它在所有浏览器中都应该是相同的。

看到这个帖子:CSS: Is Helvetica the default 'sans-serif' font on Mac and Arial the default sans-serif font on Windows?

【讨论】:

  • 谢谢你的回复,不要以为是家人的原因,在项目中我使用完全不同的字体,结果相同,这里是arial测试,至少对于windows来说是一样的
  • 请记住,并非所有字体都在不同系统之间共享。例如,Helvetica 在 Windows 上不可用。我的示例在比较 Mac 上的 Chrome Windows 和 Safari 时有效。然后我注意到 IE 与 Arial 仍然不一样。
  • 从 Typekit 加载的实际项目中的字体
【解决方案2】:

简而言之:有很多字体的行距值会导致操作系统和浏览器之间的不一致。

这是真的。许多字体的vertical metrics 存在问题。这种字体永远不会在浏览器之间正确对齐。使字体在浏览器中一致呈现的唯一方法是修复其垂直指标。

大多数字体提供程序都允许您在下载字体之前更新和修复字体的垂直指标。不过,他们可能会以不同的方式调用该选项。例如:Fontsquirrel 称之为Auto-Adjust Vertical Metrics,myFonts.com 称之为Line Height Adjustments

更多信息:Font: poor vertical metrics cause inconsistent line-height rendering across browsers. Solution?

【讨论】:

    猜你喜欢
    • 2013-09-11
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    相关资源
    最近更新 更多