css行高line-height的一些深入理解及应用

一、line-heightline boxes高度

line-height撑开了div的高度,而不是文字

inline box模型中,有个line boxes,这玩意是看不见的,这个玩意的工作就是包裹每行文字。一行文字一个line boxesline boxes什么特性也没有,就高度。所以一个没有设置height属性的div的高度就是由一个一个line boxes的高度堆积而成的。

line boxes是由它的手下– inline boxes干的,这些手下就是文字啦,图片啊,span之类的inline属性的标签啦。line boxes只是个考察汇报人员,考察它的手下谁的实际line-height值最高,谁最高,它就要谁的值,然后向上汇报,形成高度。

例如<span style="line-height:20px;"></span><span style="line-height:40px;"></span>取手下line-height最高的值line boxes的高度就是40像素了。

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

1、单行文字的垂直居中对齐
网上都是这么说的,把line-height值设置为height一样大小的值可以实现单行文字的垂直居中。这句话确实是正确的,但其实也是有问题的。问题在于height,看我的表述:line-height设置为您需要的box的大小可以实现单行文字的垂直居中,差别在于我把height去掉了,这个height是多余的,您不信您可以自己试试。

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

 

正如上面所说,line boxes的高度取决于它的下属职员的最高高度。而这个高度由一个不占据任何空间的空格完成,方法即使设置font-size0line-height为所需要的高度。同时,我们为了分隔line boxes,同时要保持在一行上,需要设置display属性为inline-block

css代码

<span style="font-weight: normal;"><span style="font-size:14px;">.mulit_line{line-height:150px;border:1px dashed #cccccc; padding-left:5px;}
.mulit_line span{display:-moz-inline-stack; display:inline-block; line-height:1.4em; vertical-align:middle;}
.mulit_line i{width:0; display:-moz-inline-stack; display:inline-block; vertical-align:middle; font-size:0;}</span></span>

html代码

<span style="font-size:14px;font-weight: normal;"><p class="mulit_line">
    <span style="font-size:12px;">这里是高度为150像素的标签内的多行文字,文字大小为12像素。<br />这里是第二行,用来测试多行的显示效果。</span><i> </i>
</p></span>

效果如上批注图。已通过IE8以外的主流浏览器的兼容性检测。

3、图片的垂直居中

此方法在大小不固定的图片、多行文字的水平垂直居中一文中的最后补充内容里已经详细讲解了。这里不多说了。

css代码:

.zxx_ul_image{overflow:hidden; zoom:1;}
.zxx_ul_image li{float:left; width:150px; height:150px; text-align:center; line-height:150px; *font-size:125px;}
.zxx_ul_image li:after{content:' '; vertical-align:middle;}
.zxx_ul_image li img{vertical-align:middle;}

HTML代码:

<span style="font-weight: normal;"><span style="font-size:14px;"><ul class="zxx_ul_image">
    <li><img src="http://image.zhangxinxu.com/image/study/s/s128/mm1.jpg" /></li>
    <li><img src="http://image.zhangxinxu.com/image/study/s/s128/mm2.jpg" /></li>
    <li><img src="http://image.zhangxinxu.com/image/study/s/s128/mm3.jpg" /></li>
    <li><img src="http://image.zhangxinxu.com/image/study/s/s128/mm4.jpg" /></li>
    <li><img src="http://image.zhangxinxu.com/image/study/s/s128/mm5.jpg" /></li>
    <li><img src="http://image.zhangxinxu.com/image/study/s/s128/mm6.jpg" /></li>  
</ul></span></span>

三、行高在文章显示中的应用

一般社交型的网站都会有发博文或写日志的功能,其中发表后的文章显示也是有学问的,其中之一就是line-height行高。

首先要知道行高的几种表示方法:px/em,或normal,或百分值,或数值,或inherit继承。

在显示文章的box里,px的表示方法首先是要被淘汰的。因为文章里面的文字是有大有小的,使用px定值,由于继承性,无法实现。

根据文字大小自动调整间距,会出现大号文字重叠的现象。normal也是不行的,一般文章显示最好是650像素的宽度,1.5倍的行距较好。一般浏览器的normal值在1~1.2之间,使用normal必然文字间距过小,阅读吃力。百分值也有继承性,但是有个很搓的办法可以实现文字间距自动适应于文字的大小,那就是使用“*”通配符,例如:.article_box *{line-height:150%;}就不会出现文字重叠的情况了。网易博客就是使用的这个方法,下图为证:

 

为什么说这个方法挫呢,使用“*”通配符大大增加了css的渲染,效率低,而且有更好的方法,就是使用数值。150%虽然和1.5在值上是一样的,但是它们也是有差别的,差别在于继承性,使用百分比会计算line-height的值,然后以px像素为单位继承下去,而1.5则是先继承1.5这个值,遍历到了该标签再计算去line-height的像素值。所以同样的效果只需要.article_box{line-height:1.5;}就可以实现了。

四、使用行高代替高度

避免haslayout
在某些情形下,line-height可以和height互换,因为实现的效果一样。都能撑开一个高度,然而这两个css属性有一个较隐蔽的差异,就是使用height会使标签haslayout,而使用line-height则不会。以前只有IE6的时候曾流行使用height清除浮动,就是利用了IEheight使haslayout的属性。但有时候,haslayout并不需要,反而要避免。

读过我前面有关自适应按钮文章的人可能会发现我使用了line-height代替了height,其原因在于:IE6IE7下,类似inline-block属性的元素里如果有block属性的元素,如果该block haslayout,则该标签会冲破外部inline-block的显示而宽度100%显示,从使按钮自适应文字大小的效果失效,解决方法就是使用line-height代替height

 

上图中第一个标签使用height定高,结果宽度直接100%显示;第二个标签使用line-height定高,结果很规矩,自适应与内部文字大小。其代码如下:

css部分:

<span style="font-weight: normal;"><span style="font-size:14px;">.out{display:inline-block; background:#a0b3d6; margin-top:20px;}
.in1{display:block; height:20px;}
.in2{display:block; line-height:20px;}</span></span>

html部分:

<span style="font-weight: normal;"><span style="font-size:14px;"><span class="out">
	<span class="in1">height:20px;</span>
</span>
<span class="out">
	<span class="in2">line-height:20px;</span>
</span></span></span>

参考:http://www.cnblogs.com/rainman/archive/2011/08/05/2128068.html 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值