9.6 strut元素与IFC完整示意图

strut是IFC模型的核心之一。注:strut与struct非常相似,struct指结构,strut指支柱。

9.6.1 IFC模型完整示意图

img

IFC布局模型内部对象(续)。

(4)第4级对象bounds。每个line box内部包括多个bounds,每个inline元素对应一个bounds。

(5)假想strut bounds。以虚线框标记,属于抽象对象,它用于描述与理解IFC规则,包括对齐规则与line box高度计算规则。

(6)line box高度计算。line box高度不一定等于父div的line-height值,可能因为内部bounds大小或对齐使line box高度超过line-height。


9.6.2 strut定义与line box规则

strut定义:每个line box内部有一个假想的宽度为0但具有高度的空元素,称为strut支柱。“假想”的实质:通过这个假想概念方便表达与理解行盒line box内的排版规则,所以学习的重点是行盒内的排版规则,strut是理解它们的工具。

strut特点包括如下:

特点1。每个line box的开头有一个strut。

特点2。strut继承父div的字体三属性(font-family、font-size、line-height)。

特点3。宽度为0但具有高度,strut高度值即父div设置的line-height。

特点4。strut作为bounds具有基线,不只是参与垂直对齐,更是其它元素进行基线对齐的基准。

特点5。参与line box的高度计算。


strut存在证明(本质是规则说明)。

(1)line box的初始高度是strut高度。当一个行盒的所有span元素都设置成字体比父div小的多的字体大小时,行盒高度仍然等于line-height。因为“存在”strut元素。

(2)line box的基线是strut的基线。其它元素的基线对齐是与strut元素的基线对齐。

示例代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>小步教程</title>

    <style>
        .div1{
            font-family: Arial;
            font-size: 30px;
            line-height: 50px;
        }

        .span1{
            font-size: 12px;
            line-height: 20px;
        }
    </style>
</head>
<body>
    <div class="div1">
        <!-- <span>x</span> -->
        <span class="span1">xiaobuteach.com</span>
    </div>
    <div>第2行 小步教程</div> 
</body>
</html>

div1内部添加span(取消注释代码),运行效果对比如下。

img

line box的高度不随内部inline元素的字体变小而变小,所以line-height属性也叫做line box的最小高度,line box高度不小于父div的line-height值。而且垂直对齐也是以strut bounds的基线为基准进行对齐。