【问题标题】:When setting a font-size in CSS, what is the real height of the letters?在 CSS 中设置字体大小时,字母的实际高度是多少?
【发布时间】:2014-10-20 15:21:39
【问题描述】:

有一个类似的问题here,其回答实质上是:

高度 - 特别是从上升部分的顶部(例如,'h' 或 'l' (el))到下降部分的底部(例如,'g' 或 'y')

这也是我的经历。 IE。在 14 像素 Arial 中,字母 K 的高度(基线高度)约为 10 像素。

The specs 对计算出的字体大小只字未提,所以我猜这是特定于浏览器的,但我找不到任何参考。

(其他问题 herehere 提出的问题大致相同,但遗憾的是没有答案给出令人满意的解释..)

是否有任何文档说明为什么字体大小似乎是“从上升到下降”的大小?

【问题讨论】:

    标签: css browser fonts


    【解决方案1】:

    一些背景知识

    当在金属上创建字母时,em 指的是要在上面雕刻字母的每个块的大小,并且该大小由大写 M 决定,因为它通常占用最多的空间。

    如今,字体开发人员在计算机上创建字体而不受物理金属片的限制,因此当 em 仍然存在时,它只不过是软件中的一个想象边界;因此很容易被完全操纵或忽视。

    标准

    OpenType 字体中,em 大小应该设置为 1000 个单位。而在TrueType 字体中,em 大小通常为 1024 或 2048。

    定义字体样式最准确的方法是使用EM,当您定义使用的font-size时,尺寸不是指字体的像素高度,而是指确定的字体x高度通过基线和字体中线之间的距离。

    据记录,1 PT 约为 0.35136mm。 PX 是屏幕上的 1 个“点”,由每平方英寸的点数或屏幕分辨率定义,因此因屏幕而异,是定义字体大小的最差方法。

    单位换算

    如果你喜欢像我一样流血的文学作品,这是一本非常好的读物。International unification of typopgrahic measurements

    1 point (Truchet)                    |  0.188 mm
    1 point (Didot)                      |  0.376 mm or 1/72 of a French royal inch
    1 point (ATA)                        |  0.3514598 mm or 0.013837 inch
    1 point (TeX)                        |  0.3514598035 mm or 1/72.27 inch
    1 point (Postscript)                 |  0.3527777778 mm or 1/72 inch
    1 point (l’Imprimerie nationale, IN) |  0.4 mm
    1 pica (ATA)                         |  4.2175176 mm = 12 points (ATA)
    1 pica (TeX)                         |  4.217517642 mm = 12 points (TeX)
    1 pica (Postscript)                  |  4.233333333 mm = 12 points (Postscript)
    1 cicero                             |  4.531 mm = 12 points (Didot)
    
    决议
    µm  :  10.0    20.0    21.2    40.0    42.3    80.0    84.7    100.0    250.0    254.0
    dpi :  2540    1270    1200    635     600     317     300     254      102      100
    

    标准只值这么多..

    一种字体字形与另一种字体的实际大小总是会有所不同,具体取决于:

    1. 开发人员在创建字体时如何设计字体字形,
    2. 以及浏览器如何呈现这些字符。没有两个浏览器会完全相同。
    3. 查看字体的屏幕的分辨率和ppi

    示例

    作为字体开发人员操纵几何图形的普遍性的一个例子。当 Apple 创建 Zapfino 脚本字体时,他们按照预期相对于字体中最大的大写字母来调整它的大小,但后来他们决定小写字母看起来太小了,所以几年后他们对其进行了修改,使任何给定的磅值都比其他字体大 4 倍左右。

    如果您不头痛,请阅读更多内容..

    维基百科上有一些关于现代排版和起源的好信息;和其他相关主题。

    还有一些第一手经验

    如果你想获得更多第一手的了解,你可以下载免费的字体开发工具FontForge,它与非免费的FontLab Studio相当(根据我的经验,这两个都是字体开发人员的流行选择)。两者都有活跃的社区,因此您可以在学习如何使用它们时获得大量支持。

    【讨论】:

    • 感谢您的解释。我更喜欢 why 字体系列“arial”,字体大小为 14px,“M”为 10px。但你也回答了这个问题:the actual size of one fonts glyphs vs another font are [...] dependent on [...] how the developer designed the font glyphs when creating the font。谢谢!
    • @davidcondrey 我很欣赏这篇文章的彻底性,拥有知识是一回事,实际上以这种详细程度分享它是下一个层次!
    • @davidcondrey 非常好的解释!请问您提供的图像的许可证是什么?我想用它来记录代码。
    【解决方案2】:

    关于排版的答案非常好,但请注意 css 在许多情况下与传统排版不同。

    在 css 中,字体大小决定了“em-box”的高度。 em-box 是一个边界框,可以包含字体的所有字母,包括升序和降序。非正式地,您可以将 font-size 视为“j”-height,因为小写 j 同时具有升序和降序,因此(在大多数字体中)使用完整的 em-box 高度。

    这意味着大多数字母(如大写字母 M)在 em 框中的上下都有空格。大写字母上方和下方的相对空间量因字体而异,因为某些字体具有相对较大或较小的升序和降序。这是在风格上将字体彼此区分开来的一部分。

    你问为什么字体大小包括上升和下降,即。为什么它对应于 em-box 的高度,即使大多数字母的高度都会小于这个。好吧,由于大多数文本确实包含带有升序和降序的字母,因此 em-box 高度表示文本需要多少垂直空间(至少),这非常有用!

    警告:某些字形甚至可能超出某些字体的 em 框。例如,字母“Å”通常在 em-box 上方延伸。这是字体设计者的风格选择。

    【讨论】:

      【解决方案3】:

      我已经尝试在字体度量方面准确确定字体大小对应的内容(如 davidcondrey 的回答中的图表所示)。

      在 macOS 上的 Safari、Chrome 和 Firefox 上进行测试,将 font-size 设置为 100px 似乎会将上升线和下降线之间差异的表观大小设置为 100px。

      不幸的是,在谈论不同的字体格式时,升序和降序有多种含义,因此为了消除 OpenType 的歧义,我们谈论的是“Typo Ascender”和“Typo Descender' 来自 OS/2 表。

      OpenType CSS font-height diagram

      opentype.js 字形检查器https://opentype.js.org/glyph-inspector.html 上提供了交互式插图

      在定位字符时(再次根据 OpenType 指标),浏览器似乎认为 y = 0 是 Ascender,(这与davidcondrey 图表中的“上升线”,但它是 OpenType 中 hhea 表中的上升线)。但是,如果 CSS line-height 未设置为 normal,则位置会偏移一些,但我认为这里的规则可能会更复杂一些。

      我预计还有更多因素,操作系统和浏览器之间可能会有所不同,但这至少是一个很好的近似值。

      【讨论】:

        【解决方案4】:

        在搜索了一个类似问题的满意答案后,我发现这张图很有帮助......

        http://static.splashnology.com/articles/Choosing-the-Best-Units/font-units-large.png

        【讨论】:

        • 谢谢,我已编辑并将其包含在您的答案中;),您可能需要改进一下编辑
        • 那些投反对票的人可能会很好地考虑到我在接受的答案整合之前找到了图形并做出了这个答案。
        猜你喜欢
        • 2014-08-11
        • 2017-05-11
        • 2012-05-08
        • 1970-01-01
        • 2015-06-11
        • 1970-01-01
        • 2017-07-30
        • 2018-11-04
        • 2021-02-13
        相关资源
        最近更新 更多