三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之

未知尺寸元素(包括块元素)的垂直居中方法探究
作者:Neoxone    发表时间: 2008年10月6号,星期一     阅读:8,779 次

之前也有搜集过网络上一些纯CSS的几种方法

下文与以上并无关系。
先说一些(未知尺寸元素)垂直居中的思路:
1. 我们一般会设置height=line-height来使一行内文字(及inline元素)可以垂直居中,那能不能推而广之呢?遗憾,单纯设置外层height=line-height使image等可置换元素垂直居中,在ie6下是行不通的。见小结line-height和vertical-align, image等可置换元素尚且不行,更别提div等块级元素了。
2. 利用display的一个属性:table-cell。其实这个方法用来支持垂直居中,那是舍我其谁啊,可惜的是ie8以下的浏览器并不支持display:table-cell;
我们可以看一下:

我们发现以上代码在ie6,ie7之下并不能完成我们的要求。
这就是为什么本文开头收集的那些方法要极尽怪异之写法,而想要达到全兼容之目的了。

下面,在我们的新方法中,我们得引入一个空标签。

这种方法在http://www.deviantart.com/网站上很早就应用了。不过,人家针对firefox,opera等支持table-cell的浏览器使用display:table-cell;
而只对ie6,7这两个异类使用了空标签来达到效果。

上面代码的注释里我提到了span嵌套div的不规范问题,可以这样修改:

对于上面的display:inline-block稍微解释一下:
ie6,7对display:inline-block其实支持并不完善的。(这也不稀奇,firefox2是完全不支持)
在ie6,7下的inline元素设置display:inline-block能够达到效果,但对于block元素却无能为力。
所以使用了*display:inline;zoom:1来达到display:inline-block的效果。这也是haslayout的“功劳”。

–补充:2011-3-4–
如果文字超过块的宽度,我们发现在ie8下则不能垂直居中了。然而我们知道ie8是支持table-cell的。
所以结合两个方法——结合后的方法是一个比较完美的方法:

标签: , , , ,

4 条评论 发表在“未知尺寸元素(包括块元素)的垂直居中方法探究”上

  1. [...] 之前有收集过几个纯CSS的做法:点这里 [...]

  2. [...] 是不是很熟悉啊,我们“未知尺寸元素的垂直居中”的一个方法就是从这里衍生而来的——那是针对block元素的居中:http://www.cssass.com/blog/index.php/2008/36.html 我们的做法是将block元素变成inline-block,或者干脆使用某一inline元素包住block元素(尽管这不符合标准)。 转发到新浪微博 [...]

  3. 龙子 说:

    opera10.6 不需要hack也可以了。 ):14:(

    回复

  4. [...] 回复: 可以看下这个http://www.cssass.com/blog/index.php/2008/36.html [...]

留下回复

):9:( ):8:( ):7:( ):6:( ):5:( ):4:( ):3:( ):2:( ):20:( ):1:( ):19:( ):18:( ):17:( ):16:( ):15:( ):14:( ):13:( ):12:( ):11:( ):10:(