css文字行高是多少,深入了解CSS字体度量,行高和vertical-align(二)

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

CSS 无所不能

我们已经讨论过了line-height和vertical-align在一起是如何工作,但现在的问题是如何使用CSS来控制字度的度量指标?简洁回答:没有。即使真的如此,我也想我们应该可以做些什么?那么有关于字体度量,我们应该能够做些什么?

例如,如果我们想要给文本使用Catamaran字体,可以把其大写字母高度扩展到100px?通过一些数学计算,似乎可行。

首先设置度量字体的五个自定义属性,然后计算font-size,从而得到大写字母高度是100px。

64d6966f654047d7863ac4f5a51cda1c.png

82eaec49a90fd20504ab021986d678d9.png

大写字母高度现在是100px高

很简单,不是吗?但如果我们想要让文本在可视区居中,让剩余的空间均分在"B"字的顶部和底部,应该怎么做呢?为了达到这一目的,我们必须基于ascender和descender比例计算出vertical-align。

首先,计算line-height:normal和内容区域的高度。

813298a9e6cc45eba668212de193b674.png

然后,我们需要:从大写字母的底部到底部边缘的距离

从大写字母的顶部到顶部边缘的距离

像这样:

f2383caabeba4b21aa9b9e3d229c3c3b.png

我们现在可以通过距离乘以font-size计算出vertical-align。

c8d0145555d34448b074c99da4985af5.png

最后,我们设定所需的line-height和计算它,保持一个垂直对齐:

8e147e2b8ba04b6b990a8b7d66bcf9ee.png

914fc304b24f227d0812e9fbd8e744a3.png

大写字母高度现在是100px高

很简单,不是吗?但如果我们想要让文本在可视区居中,让剩余的空间均分在"B"字的顶部和底部,应该怎么做呢?为了达到这一目的,我们必须基于ascender和descender比例计算出vertical-align。

首先,计算line-height:normal和内容区域的高度。

852a3cf0e65d4b4aa59a5ac0baa7541d.png

然后,我们需要从大写字母的底部到底部边缘的距离

从大写字母的顶部到顶部边缘的距离

像这样:

1e91423d1d6a4f579b64b2d797902f30.png

我们现在可以通过距离乘以font-size计算出vertical-align。

42f446782c2647aea40f295135540326.png

最后,我们设置所需的line-height并计算它,同时保持垂直对齐:

45aadb9cafba44698f275743a42fba09.png

914fc304b24f227d0812e9fbd8e744a3.png

具有不同行高文本依然在中间

添加一个图标和字母"B"垂直对齐,现在很容易就能做到:

5f6e5c98623c4c50b2d0b15b2d0ab787.png

7aa7c8d799db9473e13b84dee89dab77.png

图标和B字母等高

源码效果请点击这里。

注意:这个测试只是出于演示目的。你不能依赖于此。如果字体不加载,备用字全有可能具有不同的字体度量参数,它就没法正常工作了。在一部分示例中,大家看到很有以--开头的,这是CSS的原始变量,也称之为CSS自定义属性。如果在此之前你从未接触过这方面的内容,建议你先点击这里进行了解。

总结

这篇文章我们学到了什么:行内格式化上下文真的很难理解

所有行内元素都有两个高度内容区域(content-area)基于字体的度量参数

虚拟区域(virtual-area)就是line-height

这两个高度是无法可视的(如果你通过开发者工具,你可以看到)

line-height:normal是基于字体度量参数

line-height: n有可能创建一个虚拟区域比内容区域更小

vertical-align不是很可靠

一个line-box的高度计算是基于它的子元素的line-height和vertical-align属性

我们没有办法直接通过CSS来获取或设置字体的度量参数

未来可能会有一个垂直对齐的规范来解决这些看似问题的问题:Line Grid Module

资源

如果你喜欢这篇文章,请

英文原文:http://iamvdo.me/en/blog/css-font-metrics-line-height-and-vertical-align

译者:winston

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值