我正在尝试查找font-size
CSS 属性中设置的值对应的内容。
为了给出上下文,我想在 CSS 中获取em
我从 OS/2 指标中知道的部分字体的大小(在大写高度之上和基线之下)。em
单位是相对于给定的font-size
,而 OS/2 指标是相对于 em-square 的。
我的期望
我的期望基于以下参考资料。我没有发现任何更清晰或更精确的东西。
根据CSS2.1中的W3C 参考
font-size
,以及我在该主题上找到的所有 Stack Overflow 问题中的引用(此处、此处和此处):字体大小对应于 em 方格,这是排版中使用的一个概念。请注意,某些字形可能会在它们的 em 方格之外流血。
根据我在排版方面的一些知识,这
em square
是字体度量的整个正方形,其中定义了升序、降序、间隙(等等)线。在 OS/2 度量中,em square
是字体本身的大小(通常为 1000 或 2048 UPM)。
(来源:microsoft.com)我从 W3C 中找到的唯一解释是1997 年对 CSS1 的旧参考,它与我使用的现代数字定义一致
em square
:某些值(例如宽度度量)以相对于抽象正方形的单位表示,抽象正方形的高度是相同字体大小的字体行之间的预期距离。这个正方形被称为EM正方形。(...) 常用值为 250 (Intellifont)、1000 (Type 1) 和 2048 (TrueType)。
因此,如果我正确理解了这些引用,则应该使用中指定的值来生成font-size
整个em square
字体,并且我们应该能够根据字体的大小和度量来计算部分字体的大小。
例如,与...
.my-letter {
font-family: 'Helvetica Neue';
font-size: 100px;
text-transform: uppercase;
}
...我们应该有一个em square
of 100px
,并且因为Helvetica Neue
有一个大写高度714 / 1000
(sCapHeight
在 OS/2 表中),一个大写高度是71.4px
。
实际发生了什么。
生成em square
的大于(在font-size
最新版本的 Chrome、Firefox 和 Safari for Mac 上测试)。起初,我认为浏览器有另一个定义,em square
并且正在使字母的一部分等于font-size
,但我没有找到任何与它。
您还可以看到这个 CodePen。请注意,我使用line-height: 1;
突出显示预期大小,但我的问题是font-size
(“渲染墨水”)而不是line-height
(“碰撞框”)。这是我必须精确的事情,因为我已经被误解了好几次了。line-height
不是问题。
所以我有三个问题:
- 我是否正确理解了 W3C 参考资料,或者我假设这些参考资料没有说明?
- 如果不是,为什么生成的字体的 em-square 大于
font-size
? - 最重要的是:我怎么知道渲染的 em-square 的大小(相对于
font-size
)?
谢谢您的帮助。