一、左右三栏布局
前面所述的左右双栏布局的实现方法,嵌套地使用可以得到各种左右三栏布局,但是这样看起来有些啰嗦。因此,最好还是用直接的方式实现三栏布局。对于三栏布局,依照左中右是固定还是流动来划分,同样有各种情形:(1)固定-固定-固定;(2)固定-固定-流动;(3)固定-流动-固定;(4)固定-流动-流动;(5)流动-固定-流动;(6)流动-流动-流动。
这些布局方式的一个流动指占用剩余的宽度,二个或三个流动指按指定比例分配剩余的宽度。
和双栏的情况类似,布局(1)和(6)各部分都使用同样的长度单位,是最简单的,我们只需要用元素的 float 属性就可以实现了。
类似地,布局(2)和(3)中只有一个流动部分,也可以用绝对定位来实现。
稍微复杂地是布局(4)和(5),它们既有固定项又有两个流动项,比较不好处理。不过方法还是有的:使用负的margin值,详情参考[1][2]。
二、上下三栏布局
参考资料[3],我们可以得到一个兼容各个浏览器的上下三栏布局。最简单的代码如下:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
<style type="text/css">
html, body {
overflow: hidden;
height:100%;
margin:0;
padding:0;
}
html {
_padding: 110px 0 60px 0;
}
#header {
position:absolute;
top:0;
left:0;
100%;
height: 110px;
background:#999;
}
#content {
position:absolute;
top:110px;
right:0;
bottom: 60px;
left:0;
overflow:auto;
100%;
_height:100%;
background: #666;
}
#footer {
position:absolute;
bottom:0;
left:0;
100%;
height: 60px;
background:#999;
}
p {
font-size: 5em;
}
</style>
</head>
<body>
<div id="header">header</div>
<div id="content">
<p>text</p><p>text</p><p>text</p><p>text</p><p>text</p>
</div>
<div id="footer">footer</div>
</body>
</html>
其中顶栏和底栏分别为 110px 和 60px 高度,中栏填满其它宽度。当内容过多时,滚动条只出现在中栏。CSS 代码中带下划线的部分是针对 IE6 的兼容处理。因为在 IE6 中,对于 position: absolute 的元素,同时指定 top,bottom,left,right 不能当它自动填满空间。其它的标准浏览器没有这个问题。另外注意这时候 body 元素不能再指定 position: relative,否则在 IE6 中定位是错误的。
三、CSS3 中的简单方式
在支持 CSS3 的浏览器中,这些基本的多栏布局已经是非常简单了,详情见参考资料[4]。
参考资料:
[1] Dynamic Drive: CSS Liquid Layout #3.5- (Fluid-Fluid-Fixed)
[2] Dynamic Drive: CSS Liquid Layout #3.8- (Fluid-Fixed-Fluid)
[3] 姗姗来迟的div仿框架布局 - css探索之旅
[4] CSS3 弹性盒模型与流式布局 - leecan_zeng - 博客园
[YAML] Date: 2011-05-24 09:18:43, Updated: 2013-01-01 12:30:00