DIV+CSS:网页一行两列背景自适应

 http://www2.flash8.net/teach/7047.htm

 网页布局中常有的一种情况就是网页主体部分分成一行两列;而在很多种情况下,设计师们常把左右两列的背景色设计成不同色彩,以实现内容块的明显区分;但这样的设计给布局提出了一个看似简单,而实现非常难的问题;那就是左右两列怎么样实现背景高度自适应,及左边内容高于右边时,右边背景色也要和左边一样;右边内容高于左边时,左边背景色也要和右边一样;

当年为了实现这个,我在网上查过无数的文章,都没有很好的解决方案;多数人用很大的负数实现,也有人用javascript实现;后来因为感觉这样实现不合理,所以我一直用表格来实现;因为这样最简单;但今天同事问起我这个问题,我中午仔细想了想;想出了一个解决办法,写出来和大家分享;

基本原则:
1、布局要合理,不能为了实现这样的效果而使html的代码变得臃肿。
2、CSS部分也要简单巧妙实现,不能为了这样的效果而写大量的代码;而主要的还是浏览器兼容方面要没有问题。

以下是我实现的代码,说明一下,这样的布局还不是很理想,但这已是我暂时能想到的最好解决办法了。

实现方法一:左边用边框,右边用背景色。
这个方法是左边用200PX的边框来实现一列的背景,再用这个标签的实际背景色来实现另一列的背景,这样左右永远都是一样高的。
程序代码:

<divid="box">
<divid="right">right<br/>right</div>
<divid="left">left</div>
<divstyle="clear:both"></div>
</div>
程序代码:
<style>
/*这一行可能不用看,是废话,为了好看一点*/
*{padding:0;margin:0;font-size:12px;line-height:1.8;font-family:Verdana;}
/*最外边的一个盒子,左边框200PX,有背景色*/
#box{background:#FFCC00;width:700px;border-left:200pxsolid#FF9900;}
/*让左边的一列向左移动200PX*/
#left{margin-left:-200px;width:200px;position:static;}
/*由于IE和FIREFOX有区别,所以对IE加了一行作处理*/
*html#left{position:fixed;}
/*右边的宽度,这里我为什么没有写700PX;说实话,我实在没有想明白;这里最多只能写900-200-2=698PX;但这在使用过程中,并不会有影响;*/
#right{float:right;width:695px;}
</style>
HTML代码:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>http://www.zishu.cn</title>
<style>
*{padding:0;margin:0;font-size:12px;line-height:1.8;font-family:Verdana;}
#box{background:#FFCC00;width:700px;border-left:200pxsolid#FF9900;}
#left{margin-left:-200px;width:200px;position:static;}
*html#left{position:fixed;}
#right{float:right;width:695px;}
</style>
</head>
<body>
<divid="box">
<divid="right">right<br/>
right</div>
<divid="left">left</div>
<divstyle="clear:both"></div>
</div>
转载请注明出处:<ahref="http://www.zishu.cn/blogview.asp?logID=759"target="_blank">子鼠</a>
</body>
</html>
方法一存在一个问题:就是如果左边的背景是一张图怎么办?对,如果是纯色,那么没有问题;如果是一张图,就没有办法了;所以我写了第二种解决办法。

实现方法二:用嵌套实现两列背景,
这个方法我个人推荐使用。
程序代码:
<divid="box">
<divid="content">
<divid="right">right<br/>right</div>
<divid="left">left</div>
</div>
</div>
CSS部分我不用解释了吧!
程序代码:
<style>
*{padding:0;margin:0;font-size:12px;line-height:1.8;font-family:Verdana;}
#box{background:#FFFF66;width:700px;padding-left:200px;float:left;}
#content{background:#FF6600;float:left;}
#right{width:695px;float:right;}
#left{width:200px;margin-left:-200px;position:static;float:left;}
*html#left{position:fixed;}
</style>
HTML代码:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>http://www.zishu.cn</title>
<style>
*{padding:0;margin:0;font-size:12px;line-height:1.8;font-family:Verdana;}
#box{background:#FFFF66;width:700px;padding-left:200px;float:left;}
#content{background:#FF6600;float:left;}
#right{width:695px;float:right;}
#left{width:200px;margin-left:-200px;position:static;float:left;}
*html#left{position:fixed;}
</style>
</head>
<body>
<divid="box">
<divid="content">
<divid="right">right<br/>right</div>
<divid="left">left</div>
</div>
</div>
转载请注明出处:<ahref="http://www.zishu.cn/blogview.asp?logID=759"target="_blank">子鼠</a>
</body>
</html>

我的一贯原则是用简单的代码去解决复杂的问题,如果在解决的过程中,代码写了很多,那一定不是一个很好的解决方案。代码简单不代表不能解决问题,不用新的技术不代表不好,关键是我们的目地是什么,只是用最简单的方法去解决问题而已。完,希望能给大家带来一些这方面的思路!在实际中解决一些问题!

自由伸展的三栏式版面

三栏复合布局演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值