line-height机制详解

line-height机制详解基线和行高的定义:如图,x字母底部的线即为基线,两条红线(基线)间的距离即为行高。不同字体的基线不同。line-height:200px,即为两条基线的距离。line-height:0px;两行文字重叠。2.line-height行内框盒子模型这个行内框盒子模型包含四中盒子:  a.内容区域(contentarea):是一种围绕文字看不见的盒子,跟字

  1. 基线和行高的定义:

line-height机制详解

如图,x字母底部的线即为基线,两条红线(基线)间的距离即为行高。不同字体的基线不同。line-height:200px,即为两条基线的距离。line-height:0px;两行文字重叠。


2.line-height行内框盒子模型

line-height机制详解

这个行内框盒子模型包含四中盒子:

   a.内容区域(content area):是一种围绕文字看不见的盒子,跟字体大小有关。

b.内联盒子(inline boxes):不会让内容成块显示,而是排成一行,如果内部还有inline水平标签则是内联盒子,    如果是光秃秃的文字,就是匿名内联盒子。

c.行框盒子(line boxes):每一行就是一个行框盒子,每个行框盒子优势由一个个内联盒子组成。

d.包含盒子(containing boxes):由一个个行框盒子组成

3.行高具体体现

行高 = 内容区域高度 + 行间距

内联元素的高度由行高决定

内容区域高度只与字号和字体有关,与行高无关

在simsun字体下,内容区域高度,就是字体大小值

行高由于继承性,影响无处不在,即使是单行文本

行高只是幕后黑手,真正影响高度的是内容区域和行间剧

多行文本的高度,就是单行文本高度的叠加


line-height机制详解line-height机制详解



由于simsun字体是内容区域高度,就是字体大小值,所以line-height   –    font-size =行间距。而下面的图中,微软雅黑的内容区域不能与字体大小,所以行间距看起来比较小。

line-height机制详解
line-height机制详解line-height机制详解


行间距是墙头草,可以变大可以变小,甚至可以是复制,只要保证行内容区域+行间距等于行高即可。比如行高不变,当字体变小是,行间距就变大。行高决定了内敛盒子的高度。





4.行高的各种属性值:

line-height:normal;         默认属性值,与用户浏览器,且与元素字体有关。
line-height:<number>;:            根据当前元素的font-size大小计算:如设置成1.5,1.5*字体大小。
line-height:<length>; line-height:1.5em,20px;使用具体的长度作为行高值。
line-height:<percent>; 相对于该line-height属性的元素的font-size大小计算。
line-height:inherit; 比如一些控件,如input框,其行高是normal,我们需要重置,使用inherit可以让文本                 样式可控性。


line-height机制详解



line-height:1.5,
line-height:150%,
line-height:1.5em的区别;
计算无差别,应用元素的差别。


具体的我觉得这个好:行高区别详解


5.行高可以让文字垂直居中,但是这并不是真正的垂直居中,上下大小有偏差,只有当字体大小为0才是真正的垂直居中;。具体探讨如下:

line-height机制详解
在一个p标签里放入一个图片,往往图片不是占满整个空间。而是地下留有一点缝隙,这个缝隙是由于基线对齐(内联元素,内联块状元素才有)造成的,也就是由于后面的文字本身有一个高度,有行间距,导致字体的底部要与图片的底部对齐,而其行间距仍然存在底部(隐匿文本节点。好像有一个文本节点在里面。)。行高不会影响图片实际占用的高度,那么如何消除底部间隙:
1.图片块状化:display:block(变成块状元素就没有所谓的基线了),也就不会有基线对齐现象。
2.vertical-align:bottom;底线对齐。
3.行高足够小,line-height:0;

line-height机制详解


6.line-height的实际运用:

实现图片水平居中:

 

.box{
       text-align:center;
       line-height:300px;
}
.box > img{
       veritical-align:middle;
}

多行文本水平垂直居中:

.box{
       line-height:250px;
       text-align:center;
}
.box .text{
      display:inline-block;
      line-height:normal;
      text-align:left;
      vertical-align:center;

      
}


多行文本水平垂直居中的原理跟图片类似。区别在于要把多行文本所在容器的display改成跟图片一样,inline-block;同时要去掉外面继承的行高和文本居中。



(学习张鑫旭老师课程的笔记)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35578.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注