认识浏览器第四步-排版

2020-11-24  本文已影响0人  Lee弟弟

    根据对前三步的认识,在构建 render 树的过程,浏览器都是以单个节点为单位产出元素的。在排版的过程很难达到这么独立,很多排版都会有千丝万缕的联系,尤其是 Flex 和 Grid 排版,子元素之间互相关联互相影响。

排版方式

    横向版本:

横向

    纵向版本:

纵向

    其中\color{#39b54a}{advance}是字体中最重要的属性,它代表每一个排布后的文字在主轴上的前进距离,跟普通的宽、高不相等。

    字体的排版还会收到\color{#db5a6b}{css属性} 的影响:letter-spacing、line-height、word-spacing 等等。

    在正常流的文字排版里,绝大部分元素都被当作盒子来排版,只有少数 display 为 inline 的元素被当作文本来排版,它们会被直接排入文字流中,这类元素的主轴方向的 margin 和 border 属性会被计算进上面提到的 advance 里。

    有一种特殊情况是当没有指定文字书写方向的时候,往左到右的文字里插入右到左的文字会形成双向文字盒,简单来说就是不指定文字书写方向,往文字里插入与之相反方向的文字会形成双向文字盒。这种盒子的排版方式会先排盒内再排盒外。

    盒子模型主轴方向占据的空间由 width/height 、padding、border、margin 等属性决定,盒子在交叉轴的位置由 vertical-align 属性决定,也会影响盒子的行高。

    所以,浏览器在排版行的时候,一般会先进行内布局,再确定行的位置,根据行的位置计算出行内盒和文字的排版位置。

    块元素排版比较简单,单个元素占一行,对它进行排版只要计算出交叉轴方向的高度。

其他排版:

END......我是个有底线的家伙......END

上一篇 下一篇

猜你喜欢

热点阅读