深⼊理解line-height
什么是⾏间距?
古时候我们使⽤印刷机来出来⽂字。印刷出来的每个字,都位于独⽴的⼀个块中。
⾏间距,即传说中控制两⾏⽂字垂直距离的东东。在CSS中,line-height被⽤来控制⾏与⾏之间垂直距离。
不过,⾏间距与半⾏间距,还是取决于CSS中的line-height。那么,如何来使⽤line-height呢?
css设置文字垂直居中默认状态,浏览器使⽤1.0-1.2 line-height, 这是⼀个初始值。你可以定义line-height属性来覆盖初始值:p{line-height:140%}
你可以有5种⽅式来定义line-height。
1.line-height可以被定义为:body{line-height:normal;}
2.line-height可以被定义为:body{line-height:inherit;}
3.line-height可以使⽤⼀个百分⽐的值body{line-height:120%;}
4.line-height可以被定义为⼀个长度值(px,em等) body{line-height:25px;}
5.line-height也可以被定义为纯数字, body{line-height:1.2}
缩写line-height
那5种line-height写法,可以在font属性中缩写。line-height的值紧跟着font-size值使⽤斜杠分开,如:<font-size>/<line-height>
实例:body{font:100%/normal arial;} , body{font:100%/120% arial;} ,body{font:100%/1.2 arial;} ,body{font:100%/25px arial;}
计算line-height
有些CSS属性是可继承的(inherited),从层叠的元素⾥传递下来。这样做是为了⽅便开发者,不再为后代元素重新设值。
对于line-height继承有点复杂。
1、百分⽐
2,长度
3,normal
4,纯数字
所谓⾏⾼是指⽂本⾏基线间的垂直距离。要想理解这句话⾸先得了解⼏个基本知识:
顶线、中线、基线、底线
从上到下四条线分别是顶线、中线、基线、底线,很像才学英语字母时的四线三格,我们知道vertical-align属性中有top、middle、baseline、bottom,就是和这四条线相关。尤其记得基线不是最下⾯的线,最下⾯的是底线。
⾏⾼是指上下⽂本⾏的基线间的垂直距离,即图中两条红线间垂直距离。
⾏距是指⼀⾏底线到下⼀⾏顶线的垂直距离,即第⼀⾏粉线和第⼆⾏绿线间的垂直距离。
半⾏距是⾏距的⼀半,即区域3垂直距离/2,区域1,2,3,4的距离之和为⾏⾼,⽽区域1,2,4距离之和为字体size,所以半⾏距也可以这么算:(⾏⾼-字体size)/2
内容区、⾏内框、⾏框
内容区:底线和顶线包裹的区域,即图深灰⾊背景区域。
⾏内框,每个⾏内元素会⽣成⼀个⾏内框,⾏内框是⼀个浏览器渲染模型中的⼀个概念,⽆法显⽰出来,在没有其他因素影响的时候(padding等),⾏内框等于内容区域,⽽设定⾏⾼时⾏内框⾼度不变,半⾏距【(⾏⾼-字体size)/2】分别增加/减少到内容区域的上下两边(深蓝⾊区域)
⾏框(line box),⾏框是指本⾏的⼀个虚拟的矩形框,是浏览器渲染模式中的⼀个概念,并没有实际显⽰。⾏框⾼度等于本⾏内所有元素中⾏内框最⼤的值(以⾏⾼值最⼤的⾏内框为基准,其他⾏内框采⽤⾃⼰的对齐⽅式向基准对齐,最终计算⾏框的⾼度),当有多⾏内容时,每⾏都会有⾃⼰的⾏框。
line-height
基本概念搞明⽩了我们就可以说说本⽂的主⾓line-height属性了。
定义:line-height 属性设置⾏间的距离(⾏⾼),不能使⽤负值。该属性会影响⾏框的布局。在应⽤到⼀个块级元素时,它定义了该元素中基线之间的最⼩距离⽽不是最⼤距离。line-height 与 font-size 的计算值之差(⾏距)分为两半,分别加到⼀个⽂本⾏内容的顶部和底部。可以包含这些内容的最⼩框就
是⾏框。
div居中对齐⼀直是个难题,⽔平还好解决些,margin:0 auto; 可以解决现代浏览器,IE下text-align:center。但垂直居中就没那么简单了,默认是这样⼦的。
<div >
<span>This is a test.<br/>
This is a test.
</span>
</div>
我们可以利⽤line-block这样做
<div >
<span >This is a test.<br/>
This is a test.
</span>
</div>
单⾏就⽐较简单了,把line-height设置为box的⼤⼩可以实现单⾏⽂字的垂直居中
⾏⾼是可继承的,但并不是简单的copy⽗元素⾏⾼,继承的是计算得来的值。
<div >
<p >
1232<br/>
123
</p>
</div>
按⼀般理解既然line-height可以继承,那么p元素的⾏⾼也是150%了,可是事实是这样的
⾮但没有变成150%,反⽽连100%都没有,重叠了!这就是继承计算的结果,如果⽗元素的line-height有单位(px、%),那么继承的值则是换算后的⼀个具体的px级别的值(在10px后有换算到30px ,但10px*150%已经继承到下⼀个30px的值上);上例p得到的是
10px*150%=15px的⾏⾼,⽽P的字体⼤⼩为30px,所以发⽣了重叠。
⽽如果属性值没有单位,则浏览器会直接继承这个“因⼦(数值)”,⽽⾮计算后的具体值,此时它的line-height会根据本⾝的font-size值重新计算得到新的line-height 值。
<div >
<p >
1232<br/>
123
</p>
</div>
本⽂转载⾃:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论