欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

line-height 的个人理解

程序员文章站 2022-05-05 08:57:11
...

看下面一段HTML,.box 的高度为多少呢?

<style>
    .box{
        line-height: 24px;
        background-color: lightblue;
    }
    .box span{
        line-height: 48px;border: 1px solid;
    }
</style>
<div class="box">
    <span>content ...</span>
</div>

如上面最终显示 .box 容器 height = 48px;span 的height = 21px。不要以为line-height在span元素里不起作用。

MDN 文档中对line-height的描述如下:

line-height CSS 属性用于设置多行元素的空间量, 比如文本。对于块级元素, 它指定元素行盒(line boxes)的最小高度。 对于非替代的inline元素, 它用于计算行盒(line box)的高度。
适用元素 all elements. It also applies to ::first-letter and ::first-line.

将\标签里的内容 改为content ... <br> content ... </span> 后,span 的 height = 48+21(21px 是span中内容区域的高度) = 69px; .box 的height = 96px(48px*2)

证明line-height在span元素里起作用了, 此时显示的高度与在HMTL5声明下每个行框盒子前面一定附带一个“空白节点”没有关系。因为span元素所在的inline box 的高度已经是48px,与“空白节点”不在同一个内联盒子(此内联盒子的行高是24px,继承父元素的行高)

如果设置 .box 容器的 line-height: 100px;,则 .box 容器的最终高度就是100px;此高度就是由“空白节点”的行高(100px)撑起的

去掉span标签里的内容,.box 的 height = 0;

当span标签里没有内容时,为什么 .box 的高度为0 呢?? 为什么此时不存在“空白节点”呢??

张鑫旭老师对 inline box的解释如下:

line-height 的个人理解

inline boxes不会让内容成块显示,而是排成一行,如果外部含inline属性的标签(span, a, cite等),则属于inline boxes,如果是个光秃秃的文字,则属于匿名inline boxes。

line-height 的个人理解

行高取决于每个内联盒子的最高的line-height高度

个人理解:span 元素默认的display属性是inline,当里面无内容时,不能形成一个inline block(联想一下属性inline-block。对于本身display属性不是inline-block的元素(如span元素,本身只是一个inline-inline元素),首先需要有内容,才会在span元素外包裹一个inline block。所以此时div里吗没有inline block,也就没有“空白节点的存在”。

ps: content area 的高度可以认为是Firefox/ IE文字选中的背景区域,为什么chrome不是呢?在上面的第二种情况时,chrome下选中第二行的“content …” 的背景区域高度比第一行高,而Firefox和IE则显示相同。

相关标签: line-height