栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > Html/CSS > CSS教程

内联元素的两大基石之 line-height

CSS教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

内联元素的两大基石之 line-height

行高的作用

如果想让单行文字在垂直方向上居中,相信我们都曾像下面这样使用line-height 属性:


    h1 {
 background-color: darkcyan;
 color: #fff;
 font-size: 20px;
 text-align: center;
 line-height: 60px;
    }


love

例子中,我们可以看到,h1 的高度为 60px,并且,其内部的文字,在距离上方和下方的高度也是基本一致的。那么,line-height 在其中到底发挥了怎样的作用呢?

行高与行距

内联元素的行高

line-height,译为"行高",专指行盒子的高度。在标准文档流中,内联元素并列显示,每一行内联元素就会形成一个行盒子。
更多内容可以参考:深入理解盒子模型

例子:


    span {
 background-color: burlywood;
    }



    大连是副省级市,是中央确定的计划单列市,别称滨城,位于辽东半岛南端。

通常情况下,当我们设定行高的时候,就一定是为,由标准内联元素和匿名内联元素( 文字 )组成的行盒子设置高度。此时,行高的计算值是最为标准的。

例子:


    span {
 background-color: burlywood;
 line-height: 60px;
    }



    大连是副省级市,是中央确定的计划单列市,别称滨城,位于辽东半岛南端。

例子中,我们可以看到,h3 的高度为 180px,正是由于3个行盒子的高度累加而成的。
块级元素不存在行盒子的概念,对其设置行高只会改变块级元素里面内联元素的高度( 继承给子孙元素 )。

例子:


    h3 {
 background-color: burlywood;
 line-height: 60px;
    }



    大连是副省级市,是中央确定的计划单列市,别称滨城,位于辽东半岛南端。

例子中,我们可以看到,为 h3 的设置的行高最终作用在了 span 上。
替换元素虽然也属于内联元素,但是设定行高对其没有效果,这也导致虽然设置了行高,但行盒子的最终高度却大于设定的数值。

例子:


    h3 {
 line-height: 60px;
    }
    
    span {
 background-color: burlywood;
    }
    
    canvas {
 background-color: chartreuse;
 width: 200px;
    }



    大连是副省级市,是中央确定的计划单列市,别称滨城,位于辽东半岛南端。

例子中,我们可以看到,虽然 span 与替换元素 canvas 都继承了行高,但 canvas 很明显没有受到行高的控制,这也导致第二个行盒子的最终高度明显高于第一个。
对于这种混合替换元素的场景,只有在行高足够大的时候,才能看到效果,但这个并不是说明行高的设定对替换元素有影响,而是下面我们会讲到的" 透明文本节点 "在起作用。

行距与半行距

继续观察下面的例子,我们通过鼠标选中部分文本,可以清楚地观察到行盒子的高度( 蓝色背景区域 ):

例子:


    span {
 background-color: burlywood;
 line-height: 60px;
    }



    大连是副省级市,是中央确定的计划单列市,别称滨城,位于辽东半岛南端。

通过截图可以发现,由于设置了行高,内容区域( 黄色背景的区域 )的上边和下边同时添加了间距,称之为行距;上边距与下边距各占行距的一半,称之为半行距。而行高,正是由内容高度( 通常受 font-family 和 font-size 的影响 )和行距组成。
line-height 实现单行文字垂直居中的原因,也正是由于行高的这种上下等分行距的机制实现的。

透明文本节点与行高

如果想让多行文字垂直居中,可以结合 line-height + vertical-align 共同完成。

例子:


    h1 {
 background-color: darkcyan;
 line-height: 130px;
    }
    
    p {
 color: #fff;
 font-size: 16px;
 font-weight: 400;
 display: inline-block;
 margin: 0 20px;
 line-height: 25px;
 vertical-align: middle;
    }



    

大连是副省级市,是中央确定的计划单列市,别称滨城,位于辽东半岛南端。

例子中,实现多行文字垂直居中的第一个关键点是 display: inline-block,由此设置, p 转变为内联级盒子,从而让多个行盒子变为一个行盒子:

第二个关键点就是"透明文本节点"的概念。在内联盒模型中,还有一个盒子我们没有讲过,就是透明文本节点。透明文本节点存在于每个行盒子的前端,是一个具有其所在父元素字体和行高属性的 0 宽度的内联盒子。内联元素的计算大多都与透明文本节点有关,比如咱们现在讨论的行高。
例子中,p 的行高已经覆盖了 h1 的行高,p 的最终高度也是由 3 个行盒子的高度相加而成,为 75px:

但我们惊奇的发现,h1 的高度 130px 依然存在:

正常情况下,如果没有为块级元素设定高度,那么其高度为 0 或者子元素高度的相加值。h1 唯一可见的子元素 p 高度为 75px,基本就排除了 p 元素撑起 h1 高度的可能性。那只有一种可能性,就是在行盒子的前端,h1 的行高 130px 作用在了透明文本节点上,从而撑起了 h1 的高度( 行盒子的高度由最高的内联盒子高度决定 )。不仅如此,vertical-align: middle 的居中对齐,也是基于透明文本节点,这个后续手记再详细讲解。

理解了透明文本节点,下面例子中的问题就迎刃而解了:

例子:


    h3 {
 line-height: 50px;
    }
    
    label {
 background-color: darkcyan;
 line-height: 25px;
    }



    

例子中,我们分别为 h3 和 label 设置了行高,但通过 h3 最终的高度值可以确定,行盒子的高度为 50px,这也是由于透明文本节点的存在导致的。解决办法依然是为 label 设置 display: inline-block,创建单个行盒子。

行高的取值

行高支持数字值、百分比值和长度值,下面依次介绍:

数字值

例如 line-height:1.5:

例子:


    h1 {
 background-color: darkcyan;
 color: #fff;
 font-size: 20px;
 text-align: center;
 margin: 0;
 line-height: 1.5;
    }


hello

行高的计算值是和当前 font-size 相乘后的值 :1.5*20px=30px。

百分比值

例如 line-height:150%:

例子:


    h1 {
 background-color: darkcyan;
 color: #fff;
 font-size: 20px;
 text-align: center;
 margin: 0;
 line-height: 150%;
    }


hello

行高的计算值是和当前 font-size 相乘后的值 :150%*20px=30px。

长度值

长度值分为绝对长度与相对长度,例如 line-height:30px 或者 line-height:1.5em。

例子:


    h1 {
 background-color: darkcyan;
 color: #fff;
 font-size: 20px;
 text-align: center;
 margin: 0;
 line-height: 1.5em;
    }


hello

行高的计算值是和当前 font-size 相乘后的值 :1.5*20px=30px。 如果为绝对长度,则直接使用。

三种取值的区别

行高具有继承性,但三种取值不同,继承性的表现略有不同:如果为数字值,则子孙元素都将继承父级元素的这个值。

例子:


    h1,
    p {
 margin: 0;
    }
    
    h1 {
 line-height: 1.5;
 font-size: 40px;
    }
    
    p {
 background-color: darkcyan;
 color: #fff;
 font-weight: 400;
 font-size: 20px;
    }



    

沈阳,简称“沈”,别称盛京、奉天,是辽宁省省会、副省级市、沈阳都市圈核心城市。

例子中,p 继承了父元素 h1 的行高值 1.5,因此 p 的行高为 1.5*20px=30px。
如果为百分比值或相对长度值,则子孙元素都将继承父级元素行高的计算值。

例子:


    h1,
    p {
 margin: 0;
    }
    
    h1 {
 
 line-height: 150%;
 font-size: 40px;
    }
    
    p {
 background-color: darkcyan;
 color: #fff;
 font-weight: 400;
 font-size: 20px;
    }



    

沈阳,简称“沈”,别称盛京、奉天,是辽宁省省会、副省级市、沈阳都市圈核心城市。

例子中,p 继承了父元素 h1 的计算值 60px,因此 p 的行高也是 60px。

默认值 normal

行高的默认值 normal 与字体有着密切的关系,例如微软雅黑的行高默认为 1.3 左右,宋体的行高默认为 1.1 左右;因此,在实际工作中会对行高进行初始化,以保证行高的一致性。


如有错误,欢迎指正,本人不胜感激。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/241966.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号