行框就是包含该行所有内联级内容的矩形区域,每一行会生成一个行框。在这些行框的外边又存在一个行框,这个行框由块元素生成用于包含所有的行框,称之为根行框。
基线是沿着文本的单个字形对齐的行框的内联轴的线。基线指导字体中字形的设计(例如,大多数字母字形的底部通常与字母基线对齐),它们指导排版时不同字体或字体大小的字形对齐。
构造良好的字体包含基线表,该表指示字体设计坐标空间中一个或多个基线的位置。
基于文本的度量有以下这些值,这些值被用于指定基线:
假设每个字体、字形和内联级别框都具有每个基线类型的基线坐标,指示该基线在其块轴上的位置。这组基线称为其基线集。
此集合中用于在其对齐上下文中对齐方框或字形的基线称为其对齐基线;用于调整其内容的基线称为其主导基线。
对于单个字形,基线集来自字体的基线表。对于内联框,它从其第一个可用字体派生,而不管该框是否实际包含该字体的任何字形。
对于其他框,其基线集名义上是根据基线源和其参与的格式化上下文的规则从其内容派生的。
任何直接包含内联级元素或文本的块容器都会创建内联格式化上下文,创建方式是将文本和内联级别的文本框分割成一堆行框,这样就可以在块容器中形成一个内联格式上下文。
在内联格式上下文中使用内容布局模式布局内联内容,独立地调整和定位每个内联级盒子和行框,
内联内容的包含块是块容器的内容块,由于块容器会创建一个根内联框,包含其所有内联级内容,也可以说内联内容的包容快是这个根内联框。根内联框继承自其父块容器,但在其他方面不可设置样式。
在内联格式上下文中,内容沿内联轴排列。内联轴边距、边框和填充在内联级别框之间边距不会折叠。生成的矩形区域包含形成单行内联级别内容的框,称为行框(inline-box)。在每个行框中,内联级别框沿块轴彼此对齐,通常按其文本的基线对齐。
当一个内联框超过了一个行框的逻辑宽度,或者包含一个强制换行符时,它将被分割成多个片段,这些片段被分割成多行框。
行框在其块流方向上堆叠为块容器盒的直接内容物,并按照对齐方式在该容器内对齐。因此,内联格式上下文由一堆行框组成。行框堆叠时没有分离(除非另有规定,例如浮动间隙),并且它们从不重叠。
布局步骤:
计算行框中每个内联级别框的布局边界。
内联级别框根据主基线和垂直对齐在块轴上对齐。假设基线偏移的线相对值对齐,以最小化线框高度。
计算线框的逻辑高度,以精确包括其所有内联级别框的对齐布局边界。
根内联框的对齐子树和具有行框的框–相对垂直对齐值相对于行框对齐。
CSS假设每个字体都有字体度量,这些度量指定基线之上的特征高度(称为上升度量)和基线之下的特征深度(称为下降度量),CSS使用这些度量在内联格式上下文中布置文本和框。
更具体地说,通过定位其对齐基线以匹配其父对象的相应基线(即其对齐上下文),在块轴中对齐每个图示符或内联级别框,然后根据其对齐后偏移可能从该位置偏移。
对齐长方体时,将根据其对齐基线和基线源值选择对齐基线,并默认匹配父对象的主导基线。对于图示符,对齐基线始终由父对象的主导基线确定。
对于内联框,主导基线用于通过将每个字形/框的对应基线与框自身的主导基线对齐来对齐框的文本。对于其他框,主导基线指示在框的对齐上下文中参与基线对齐的任何框的默认对齐基线;
总的来说行框对齐的规则就是把内联级内容自身的指定基线与行框中与此对应名称的基线对齐从而实现定位文本的功能。不同内联内容的基线的选择不同。
为了能够统一主导基线的选择,可以使用dominant-baseline属性指定主导基线,该属性的取值如下:
设置了主导基线,然后再使用vertical-align属性设置其他的选项,vertical-align是baseline-source、alignment-baseline、baseline-shift的简写形式。这三个属性分别设置基线源、对齐基线、对齐后基线偏移
base-line的取值如下:
alignment-baseline取值如下:
baseline-shift取值如下:
行框的块轴大小取决于其内联级别内容的大小和对齐方式。此大小由line-height、text-edge、leading-trim和inline-sizing属性控制。
line-height属性指定框的首选线条高度,其取值为:
内联框根据字体度量调整大小,text-edge用来控制其使用的文本度量:
leading-trimg属性用于控制字形上方和下方的距离的大小保证行高一致或间距一致实现不同字形布局在相同位置的目的,其值如下:
在内联框上,指定是否修剪内容框以匹配其对应的text-edge的值。
在块容器上,指定是否根据相应的text-edge的值修剪其内容开始/结束处的半前导,以更好地将框的内容边缘与其文本内容匹配。
inline-sizing用于执行测量内联框的高度的方式,其值如下:
行框的行左边缘接触其包含块的行左边,行右边缘接触其含有块的行右边缘,因此行框的逻辑宽度等于其包含块(即块容器的内容框)的内部逻辑宽度。浮动框或初始字母框可能位于包含块边缘和行框边缘之间,从而减少任何此类受影响的行框的可用空间,从而减少其逻辑宽度。
不包含文本、不保留空格、不包含具有非零边距、填充或边框的内联框以及不包含其他流内内容(如原子内联或ruby注释)且不以强制换行符结尾的行框必须被视为零高度行框。
initial-letter属性指定所跨行数时的首字母的大小和下沉。其值如下:
initial-letter-align属性指定用于调整首字母大小和位置的对齐点。需要两组对齐点:首字母的上对齐点和下对齐点与根内联框的对应上对齐点匹配。其值如下:
当initial-letter的值不为normal,会使受影响的框变成一个首字母框,这是一个具有特殊布局行为的内联级别框。首字母框分为非替换的内联框和原子内联框。
对于非原子的内联首字母,方框及其内容与它所在的行处于相同的内联格式上下文中,并且应用了许多特殊规则来给出预期的大小和对齐方式。
对于原子首字母,它要么是被替换的元素,要么为其内容建立独立的格式上下文,则框的大小(除了其在块轴上的自动大小之外)和框内内容的布局遵循通常的规则:它主要是框的特殊定位。
样式名 | 描述 |
---|---|
dominant-baseline | 此属性指定主导基线,这是用于对齐框内内容的默认基线类型。 |
vertical-align | 此速记属性通过在单个声明中指定其对齐基线类型(对齐基线)、基线对齐首选项(基线源)和对齐后偏移(基线偏移),指定内联级别框在行中的对齐方式。 |
line-height | 此属性指定框的首选线条高度 |
text-edge | 内联框(其主要目的是包含文本)根据其字体度量在块轴上调整大小。文本边缘属性控制使用的度量。 |
leading-trim | leading-trim属性允许在块的第一行和最后一行的上方和下方修剪此附加空间,从而可以更精确地控制字形周围的间距。 |
inline-sizing | 此属性指定如何相对于内联框的内容测量其内容区域的逻辑高度。 |
initial-letter | 此属性指定所跨行数时的首字母的大小和下沉。 |
initial-letter-align | 此属性指定用于调整首字母大小和位置的对齐点。 |