深入理解CSS行高line-height

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解CSS行高line-height相关的知识,希望对你有一定的参考价值。

参考技术A 基线并不是汉字的下端沿,而是英文字母"x"的下端沿

对于行内元素如em、strong、span和等,其padding、margin、border-top、border-bottom 不会增加行高。padding会覆盖;margin将重置为0;border-top和border-bottom同样会覆盖。padding-left、padding-right、border-left和border-right可用。

img元素会影响行高

证明撑开div高度的是line-height而不是font-size

内联盒子/匿名内联盒子inline-boxes

行框盒子line-boxes  每一行就是一个“行框盒子”,每“行框盒子”由一个个“内联盒子组成”

包含盒子containing-box,由一行行的“行框盒子”组成

内容区域content-area,一种围绕文字看不见的盒子,大小与font-size大小有关

1.行高的垂直居中性

、、在单行或多行或图片垂直居中实现上的应用

单行文字的垂直居中对齐: line-height值设置为height一样大小的值可以实现单行文字的垂直居中;height值可以省略

多行文字的垂直居中对齐 : 要实现高度不固定的文字垂直居中使用padding就好了。对于高度固定的div,里面文字单行或多行显示,字体大小有大有小的情况怎么办呢?方法之一就是借助于line-height。

、 、图片的垂直居中

类似上面处理的方法,借助 i标签或伪元素

、 、使用缩放因子

line-height深入理解

“行高”顾名思意指一行文字的高度。具体来说是指两行文字间基线之间的距离。基线实在英文字母中用到的一个概念,我们刚学英语的时使用的那个英语本子每行有四条线,其中底部第二条线就是基线,是a,c,z,x等字母的底边线。下图的红色线即为基线。
技术分享图片

line-height与line boxes高度
css中起高度作用的应该就是height以及line-height了吧!如果一个标签没有定义height属性(包括百分比高度),那么其最终表现的高度一定是由line-height起作用,即使是IE6下11像素左右默认高度bug也是如此。<div></div>,如果没有设置至少大于1像素高度height值时,该div的高度就是个0。如果该div里面打入了一个空格或是文字,则此div就会有一个高度。那么您思考过没有,为什么div里面有文字后就会有高度呢?
可能有人会跟认为是:文字撑开的!文字占据空间,自然将div撑开。我一开始也是这样理解的,但是事实上,深入理解inline模型后,我发现,根本不是文字撑开了div的高度,而是line-height!要证明很简单(如下测试代码):
技术分享图片
 结果是如此的显而易见,test1 div有文字大小,但行高为0,结果div的高度就是个0;test2 div文字大小为0,但是有行高,为20像素,结果div高度就是20像素。这就说明撑开div高度的是line-height不是文字内容。

line-height行高怎么就产生了高度呢?

在inline box模型中,有个line boxes,这玩意是看不见的,这个玩意的工作就是包裹每行文字。一行文字一个line boxes。例如“艾佛森退役”这5个字,如果它们在一行显示,你艾佛森再牛逼,对不起,只有一个line boxes罩着你;但“春哥纯爷们”这5个字,要是竖着写,一行一个,那真是够爷们,一个字罩着一个line boxes,于是总计五个line boxes。line boxes什么特性也没有,就高度。所以一个没有设置height属性的div的高度就是由一个一个line boxes的高度堆积而成的。
其实line boxes不是直接的生产者,属于中层干部,真正的活儿都是它的手下 – inline boxes干的,这些手下就是文字啦,图片啊,span之类的inline属性的标签啦。line boxes只是个考察汇报人员,考察它的手下谁的实际line-height值最高,谁最高,它就要谁的值,然后向上汇报,形成高度。例如,<span style="line-height:20px;">取手下line-height<span style="line-height:40px;">最高</span>的值</span>。则line boxes的高度就是40像素了。

line-height的垂直居中性

行高还有一个特性,叫做垂直居中性。line-height的最终表现是通过line boxes实现的,而无论line boxes所占据的高度是多少(无论比文字大还是比文字小),其占据的空间都是与文字内容用水平中垂线的。还拿上面这张图来说吧。  绿色背景的高度实际是由line-height 撑开的,如果绿色背景中有文字,那么文字的水平中垂线同时也会平分绿色背景的高度;
 

应用

  • 单行文本垂直居中
网上都是这么说的,把line-height值设置为height一样大小的值可以实现单行文字的垂直居中。
其实只需要把line-height设置为您需要的box的大小就可以实现单行文字的垂直居中,height是多余的。
  • 多行文字的垂直居中
 










以上是关于深入理解CSS行高line-height的主要内容,如果未能解决你的问题,请参考以下文章

line-height深入理解

深入理解line-height与vertical-align

深入理解 CSS 中的行高与基线

深入理解 CSS 中的行高与基线

《转载》深入理解 CSS 中的行高与基线

深入理解line