CSS实现分栏高度自动相等

前几天在进行本博客主题“Me”的设计中发现,由于“Me”主题背景不是纯白色,而内容栏和侧边栏由于内容的不一定导致整体页面不美观。我将内容栏的几个关键位置的height属性都改成100%,但是没有效果,之后用JS来实现,结果首页和分类页面正常,但是文章页和单页就不正常了。之后在网上搜索到了张鑫旭博客中的《纯CSS实现侧边栏/分栏高度自动相等》这篇文章,写得非常详细。我看了后修改了CSS,果然是个不错的方法。

首先来看下核心的CSS代码(数值不固定):

1

margin-bottom:-3000pxpadding-bottom:3000px;

再配合父标签的overflow:hidden属性即可实现高度自动相等的效果。

举个简单的实例吧,如下CSS及HTML代码:

1

2

3

4

#content{overflow:hidden;}

.left{width:200pxmargin-bottom:-3000pxpadding-bottom:3000pxbackground:#cad5ebfloat:left;}

.right{width:400pxmargin-bottom:-3000pxpadding-bottom:3000pxbackground:#f0f3f9float:right;}

.center{margin:0 410px 0 210pxbackground:#ffe6b8height:500px;}

1

2

3

4

5

<div id="content">

    <div class="left">左边,无高度属性,自适应于最高一栏的高度</div>

    <div class="right">右边,无高度属性,自适应于最高一栏的高度</div>

    <div class="center">中间,高度500像素,左右两栏的高度与之自适应</div>

</div>

结果如下图:

image

说明:核心CSS代码部分的3000像素是个可变值,如果您的分栏高度不可能高度超过2000像素,您就可以设为2000像素,如果会超过3000像素,那么您要修改值为4000像素或是更高。
父标签的overflow:hidden属性是必须的,否则会显示溢出的内容。


其他一些分栏高度处理的办法

margin负值实现分栏高度显示一致可以说是最好的方法,当然,还有其他一些轻便的替代方法。例如使用min-height属性,IE6不支持min-height但是height会自动撑高,所以min-height + _height的组合也是常用手段之一;另外就是使用背景图片了,利用背景图片的垂直平铺,可以模拟分栏的等高背景效果,但是,此方法对布局宽度有一定的要求,如果布局宽度改变,背景图片可能也要做一番修改。