visual formatting model details简译 <四> 之 文本行的高度

文本行高度取决于本行中的inline box。为了计算文本行的高度,需要先计算每一个line box的高度。

按照下面的方法计算line box的高度。

1)如果结点是replaced类型,inline-block类型,inline-table类型,那么linebox的高度是margin区域的高度。(注此高度与结点的高度有些不同)假设网页源码如下,

<html>
<head>
<style>
#container{
    background-color:blue;
}
img{
margin:10px;
}
</style>
</head>
<body>
<div id="container">
<img src="apache_pb.png" />
</div>
</body>
</html>
网页的效果如下图所示,


可以看出图片外围绘制了蓝色。Container的高度完全由孩子决定。如果图片的高度没有考虑margin,那么在图片的上下区域肯定不会出现蓝色。
2)如果结点是non-replaced inline类型,那么结点所在行的高度由line-height属性决定。
获得本行所有inline box的高度后,就要利用这些box的高度来确定文本行的高度。为了使文本行容纳所有inline box的高度,必须将文本行的高度设置的做够大。假如没有对齐规则,那么文本行的高度也将无法确定。因此,为了给文本行一个固定的高度,且尽量减小文本行的高度,需要按照一定的规则来对齐结点。CSS2.1标准使用”vertical-align”属性来设置对齐规则。
按照一定的对齐规则,设置所有line box之后,就可以计算文本行的高度了。文本行的高度就是“顶部line box的上边界与底部line box的下边界的距离”。
CSS假设任何一个字都有一个baseline(基准线),文字在baseline(基准线)之上的高度是确定的,文字在baseline之下的高度也是确定的。在本节中,A用来表示baseline之上的高度,D用来表示baseline之下的高度,A+D表示文字的高度。注意这里的A和D与字体的ascender、descender没有对应关系。
根据文字的baseline,浏览器可以将同一个line box中的文字对齐。注意,同一个line box中的文字可能是不同的字体。因此这些字体的A和D可能不相同。
在文字之上、文字之下会留出一些leading(空白)。用L表示空白的总高度。L的计算公式是’line-height’ - (A+D)。一般情况下,文字之上的空白高度是L/2,文字之下空白高度是L/2。注意,L可能为负值。
虽然在计算inline non-replaced box高度的时候没有考虑box的padding, border, margin区域,但是这些区域不能被省略,在渲染、布局的过程中要考虑这些区域。这意味着:当line-height的值小于内容的真实高度时,padding区域、border区域的颜色可能出现在紧邻本节点的inline box内部。浏览器必须按照节点在文档中的顺序渲染这些节点的padding、border区域。这意味着:弟弟节点的padding、border可能会覆盖哥哥节点的box。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值