字体大小差异的原因
Mac-OS 和 Windows-OS 之间的字体大小差异不一定是不同字体的结果,因为当您使用相同的字体和大小时也会发生这种情况。相反,原因是历史上的(参见background article):Windows 以 96 DPI 呈现文本,而 MacOS 使用 72 DPI。有时,您可能会看到甚至不同的 DPI 值,例如当您在 Windows 显示属性中选择大字体时(这会增加 DPI)。
困惑与物理
对此有很多困惑。当然,一个像素就是一个像素,那么一个屏幕如何在 MacOS 上每英寸有 72 个点,而在同一屏幕上每英寸有 96 个点呢?好吧,它不能。这里的英寸不是真正的英寸。它们是合乎逻辑的英寸。 72 DPI 意味着:当前屏幕上的 72 像素(每个屏幕都不同!)我们认为它是一英寸。这绝不等于纸上的一英寸,即物理世界中的 2.54 厘米。
返回网页和您的问题
这一切与您的问题有何关系?因为我假设您使用点数(好!)作为您的尺寸。一点定义为 1/72 英寸(一英寸有 72 个点)。既然您知道屏幕上的英寸实际上并不是英寸,并且每个操作系统在每个逻辑英寸中放置了不同的默认点,您也知道点(或 mm、in 或 pc)是不同的系统。
迈向(不完美的)解决方案
但是,您可能会问,如果所有内容都按比例调整大小,那么相对而言,一切都应该很好而且花花公子吗?不,不完全是。如果您使用图像或在其他元素中使用像素作为大小,这将不起作用。像素是唯一可用的绝对逻辑大小(即使这绝不是一个精确的大小也不足为奇:每个显示器的像素大小不同)。如果您指定像素,则会超过操作系统叠加的 DPI 或 PPI 限制(另一个 historical note)。即:
/*
different font-size per OS / DPI display
setting compared to input box
*/
input.text {
width: 120px;
font-size: 10pt;
}
/*
equal font-size per OS / DPI display
setting compared to input box
*/
input.text {
width: 120px;
font-size: 12px; /* typically, pixels are slightly smaller than points */
}
但是,即使在上述情况下,渲染问题也可能会反过来影响您。本地样式表、可用字体、视口大小调整和抗锯齿可能仍会增加细微差别。但这是最接近于违反操作系统相关规则的方法。
一个微妙之处:一旦您开始使用像素,与图像相比,测量字体可能会变得更容易,但您将失去缩放整个设计的可能性,并且您将无法在任何地方指定精确的尺寸。因此,这在您的情况下是否是一个好主意取决于您(通常的做法是坚持要点并将渲染留给浏览器和操作系统,以让用户体验他们在系统上习惯的内容)。
Helvetica 与 Arial 解决方案
在此线程上已建议 Helvetica 是 MacOS 上的渲染字体以及差异的原因。可以肯定的是,在呈现的页面中查看 spotting Helvetical vs Arial 这个页面。如果您使用以下 CSS,您的页面在 Windows (Arial) 上的呈现方式与在 MacOS (Helvetica) 上的呈现方式不同:
input.text {
font-family: Helvetica, Arial, sans-serif;
}
但是如果你使用下面的代码,它在 Windows (Arial) 和 MacOS (also Arial) 上看起来是一样的。除非Windows fonts have been installed,否则只有 Linux 的外观会有所不同。
input.text {
font-family: Arial, Helvetica, sans-serif;
}
等宽的奇怪小错误可能会增加混乱
如果您使用等宽字体,并且即使您指定了字体本身,您最终可能在渲染上仍然存在差异。在 Firefox 中存在一个隐藏得很好的 bug,但在其他一些浏览器上也有,I reported a while ago(博客文章解释了解决方案),但并没有引起太多关注。
简单的解决方案是始终指定 Courier New,即使您不关心字体。正如您提到的 Arial 和 Helvetica,我认为这不是您的问题。
最后的想法
为什么这么麻烦,为什么不是一个标准?阅读此excellent background article,了解为什么 Windows 认为将 DPI 提高 30% 会更好。
延伸阅读:有一个whole site dedicated to DPI issues。