CSS⾏⾼——line-height
初⼊前端的时候觉得CSS知道display、position、float就可以在布局上游刃有余了,随着以后⼯作问题层出不穷,才逐渐了解到CSS并不是⼏个style属性那么简单,最近看了⼀些关于⾏⾼的知识,就此总结⼀下。
所谓⾏⾼是指⽂本⾏基线间的垂直距离。要想理解这句话⾸先得了解⼏个基本知识:
顶线、中线、基线、底线
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<style type="text/css">
span
{
padding:0px;
line-height:1.5;
}
</style>
</head>
<body>
<div class="test">
<div >
<span >中⽂English</span>
<span >English中⽂</span>
</div>
</div>
</body>
<html>
从上到下四条线分别是顶线、中线、基线、底线,很像才学英语字母时的四线三格,我们知道vertical-align属性中有top、middle、baseline、bottom,就是和这四条线相关。
尤其记得基线不是最下⾯的线,最下⾯的是底线。
⾏⾼、⾏距与半⾏距
⾏⾼是指上下⽂本⾏的基线间的垂直距离,即图中两条红线间垂直距离。
⾏距是指⼀⾏底线到下⼀⾏顶线的垂直距离,即第⼀⾏粉线和第⼆⾏绿线间的垂直距离。
半⾏距是⾏距的⼀半,即区域3垂直距离/2,区域1,2,3,4的距离之和为⾏⾼,⽽区域1,2,4距离之和为字体size,所以半⾏距也可以这么算:(⾏⾼-字体size)/2
内容区、⾏内框、⾏框
内容区:底线和顶线包裹的区域,即下图深灰⾊背景区域。
⾏内框,每个⾏内元素会⽣成⼀个⾏内框,⾏内框是⼀个浏览器渲染模型中的⼀个概念,⽆法显⽰出来,在没有其他因素影响的时候(padding等),⾏内框等于内容区域,⽽设定⾏⾼时⾏内框⾼度不变,半⾏距【(⾏⾼-字体size)/2】分别增加/减少到内容区域的上下两边(深蓝⾊区域)
⾏框(line box),⾏框是指本⾏的⼀个虚拟的矩形框,是浏览器渲染模式中的⼀个概念,并没有实际显⽰。⾏框⾼度等于本⾏内所有元素中⾏内框最⼤的值(以⾏⾼值最⼤的⾏内框为基准,其他⾏内框采⽤⾃⼰的对齐⽅式向基准对齐,最终计算⾏框的⾼度),当有多⾏内容时,每⾏都会有⾃⼰的⾏框。
<div >
<span >中⽂English</span>
<span >中⽂English</span>
<span >English中⽂</span>
<span >English中⽂</span>
</div>
line-height
基本概念搞明⽩了我们就可以说说本⽂的主⾓line-height属性了。
定义:line-height 属性设置⾏间的距离(⾏⾼),不能使⽤负值。该属性会影响⾏框的布局。在应⽤到⼀个块级元素时,它定义了该元素中基线之间的最⼩距离⽽不是最⼤距离。line-height 与 font-size 的计算值之差(⾏距)分为两半,分别加到⼀个⽂本⾏内容的顶部和底部。可以包含这些内容的最⼩框就是⾏框。
可能的值
值说明
normal默认,设置合理的⾏间距。
number设置数字,此数字会与当前的字体尺⼨相乘来设置⾏间距。相当于倍数
length设置固定的⾏间距。
%基于当前字体尺⼨的百分⽐⾏间距。
inherit规定应该从⽗元素继承 line-height 属性的值。
貌似很简单,但感觉没什么⽤出的样⼦,那就让我们看看line-height的⼏个应⽤
div⽂字垂直居中
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的⼤⼩可以实现单⾏⽂字的垂直居中
<div >
This is a test.
</div>
元素对⾏⾼影响
⾏框⾼度是⾏内最⾼的⾏内框⾼度,通过line-height调整,内容区⾏⾼与字体尺⼨有关,padding不对⾏⾼造成影响。
css实现垂直水平居中<div >
<span >This is a test</span>
</div>
<div >
<span >This is a test</span>
</div>
第⼆个span虽然因为padding原因内容区变⼤,当⾏⾼并未改变
⾏⾼的继承
⾏⾼是可继承的,但并不是简单的copy⽗元素⾏⾼,继承的是计算得来的值。
<div >
<p >
1232<br/>
123
</p>
</div>
按⼀般理解既然line-height可以继承,那么p元素的⾏⾼也是150%了,可是事实是这样的
⾮但没有变成150%,反⽽连100%都没有,重叠了!这就是继承计算的结果,如果⽗元素的line-height有单位(px、%),那么继承的值则是换算后的⼀个具体的px级别的值;上例p得到的是10px*150%=15px的⾏⾼,⽽P的字体⼤⼩为30px,所以发⽣了重叠。
⽽如果属性值没有单位,则浏览器会直接继承这个“因⼦(数值)”,⽽⾮计算后的具体值,此时它的line-height会根据本⾝的font-size值重新计算得到新的line-height 值。
<div >
<p >
1232<br/>
123
</p>
</div>
所以在使⽤line-height时,除⾮你刻意否则尽量使⽤倍数设值
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论