line-height 的个人理解

看下面一段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.

将<span>标签里的内容 改为<span>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的解释如下:

inline-boxes

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

line-boxes

行高取决于每个内联盒子的最高的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则显示相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值