美文网首页工作生活css
2019-06-29 如何确定行框盒子的baseline?

2019-06-29 如何确定行框盒子的baseline?

作者: 李华峰0722 | 来源:发表于2019-06-29 17:48 被阅读0次

    如何确定行框盒子的baseline?

    先解释一下相关概念(概念来自于张鑫旭偶像的《CSS世界》)

    内联盒子(inline box)

        “内联盒子”不会让内容成块显示,而是排成一行,这里的“内联盒子”实际指的就是元素的“外在盒子”,用来决定元素是内联还是块级。该盒子又可以细分为“内联盒子”“匿名内联盒子”两类:

    内联盒子

    行框盒子(line box)

    行框盒子

        每一行就是一个“行框盒子”(实线框标注),每个“行框盒子”又是由一个一个“内联盒子”组成的。

    包含盒子(containing box)

    包含盒子

    <p>标签就是一个“包含盒子”(实线框标注),此盒子由一行一行的“行框盒子”组成。

        需要补充说明一点,在CSS 规范中,并没有“包含盒子”的说法,更准确的称呼应该是“包含块”(containing block)。这里之所以把它称为盒子,一是为了与其他盒子名称统一,二是称为盒子更形象、更容易理解。

    小结:包含盒子 》 行框盒子 》 内联盒子

    vertical-align

        vertical-align 起作用是有前提条件的,这个前提条件就是:只能应用于内联元素以及display 值为table-cell 的元素

    换句话说,vertical-align 属性只能作用在display 计算值为inline、inlineblock,inline-table 或table-cell 的元素上。因此,默认情况下,<span>、<strong>、<em>等内联元素,<img>、<button>、<input>等替换元素,非HTML 规范的自定义标签元素,以及<td>单元格,都是支持vertical-align 属性的,其他块级元素则不支持。

        inline-block 与baseline(参看《CSS世界》P136)

        vertical-align 属性的默认值baseline

            在文本之类的内联元素那里就是字符x 的下边缘

            对于替换元素则是替换元素的下边缘

        但是,如果是inline-block 元素,则规则要复杂了:

            一个inline-block 元素,如果里面没有内联元素,或者overflow 不是visible,则该元素的基线就是其margin 底边缘

            否则其基线就是元素里面最后一行内联元素的基线

    概念解释完了,下面谈谈主题吧

    如何确定行框盒子的baseline?

        “行框盒子”的baseline以各个元素中最下面的baseline为基准,就是说谁的baseline在最下面,就以谁的baseline为基准进行对齐

        vertical-align为baseline时候的规则

        独立看所有vertical-align:baseline的内联盒子的基线位置,将baseline最靠下的做为当前行框的基线。如果某个内联盒子的vertical-align不是baseline,则将其忽略,不作为比较对象。

    例如:

    <div>

    AB

    </div>

    其中,A和B为inline、inline-block???(还有别的吗?)等其中之一

    1. 如果A和B都是vertical-align:baseline,则 假想

    <div>

    A

    </div>

    基线位置

    <div>

    B

    </div>

    基线位置

    哪个基线更低,就把哪个作为当前行框的基线(baseline)

    2. 如果A不是vertical-align:baseline,B是          则 假想

    <div>

    B

    </div>

    B的基线位置 就是当前行框的基线(baseline)

    确定下当前行框的基线之后,就能确定各内联盒子在垂直方向的位置

    例如

    当前元素vertical-align:baseline  则  当前元素将会把自己的基线去找当前行框的基线重合

    vertical-align为middle时候的规则

    当前元素vertical-align:middle 则  当前元素将会把自己的基线偏上(x-height)/2的线去找当前行框的基线重合

        vertical-align为top或者bottom时候的规则

        vertical-align:top 就是垂直上边缘对齐,具体定义如下:

         1. 内联元素:元素的顶部当前行框盒子的顶部对齐。

         2. table-cell 元素:元素的顶padding边缘表格行的顶部对齐。

    具体可以参考 这篇文章 深入理解css之vertical-align

    相关文章

      网友评论

        本文标题:2019-06-29 如何确定行框盒子的baseline?

        本文链接:https://www.haomeiwen.com/subject/pigpcctx.html