LinuxABC采用了传统的布局:
由于目前content和sidebar未设背景色,沿用了body的#,显得很呆板,而且读者不容易将视线聚焦在左边的内容上,所以alfie决定将content的背景色改成白色,sidebar的颜色改成灰色系,改完之后发现两边不等高,如下图的左边所示,其实alfie的的初衷是实现右边的效果。
于是上网搜了一下,原来这个问题早已有之,众人也是八仙过海各显神通,总结了一下有以下四种解决方法。
一、分层交错法
英文原文是:Equal Height Columns with Cross-Browser CSS & No Hacks
原文的例子是三栏的,定义三个不同背景色的div:
通过控制width的百分比,将各个层错落显示,达到每个col显示不同的颜色,而且是等高的。
详细的实现方式请参阅原文。
二、border-right
alfie无意中进入http://www.alistapart.com/,看到了border-right这种解决方式,下面以LinuxABC为例简要说明。
首先将wrapper的背景色设为白色,content也设为白色,并且border-right的宽度为sidebar的宽度,sidebar的背景色设为#EDEDED
- 当content高于sidebar时,由于content的border-right的颜色即为sidebar的背景色,因此sidebar短缺的部分由content的border-right背景色不足;
- 当sidebar高于content时,由于wrapper是content和sidebar的父容器,content短缺的背景由wrapper补足;
这样就实现了两栏等高的问题,如果读者想知道三栏的实现方式,可以参考原文:Multi-Column Layouts Climb Out of the Box
index.php:
<div id="wrapper"> <div id="content">This is the content</div> <div id="sidebar">This is the sidebar</div> </div>
style.css:
#wrapper{
background-color: #FFFFFF;
overflow: hidden;
width: 100%;
}
#content{
background-color: #FFFFFF;
width: 600px;
border-right: 400px solid #EDEDED;
/* The width and color of the sidebar */
margin-right: -400px;
float: left;
}
#sidebar{
background-color: #EDEDED;
width: 400px;
float: right;
}
说明:知道http://www.alistapart.com/是谁创建的吗?是《网站重构》的作者Jeffrey Zeldman,alfie也是今天到书店无意中在《网站重构》这本书中发现的,这个世界好奇妙。
三、JavaScript
通过JavaScript或jquery的插件也可以实现多栏之间的等高,不过这种方式应用面不广,所以这里就不详谈了。
四、table
这是下下策,在没有css之前table的确是网页设计师的挚爱,但现已经是昔日黄花了,不提也罢。
alfie最终决定采用第二种方法,因为它够简单,效果也不错,方法一虽然很强大,但似乎过于小题大做了。