IT技术精粹[JiShuBu.Com]-倾力打造一流IT技术平台!
  • 登录
  • 注册
  • 设为首页
  • 加入收藏
  • 网站首页
  • IT风向标
  • 网站优化
  • Html
  • CSS
  • JavaScript
  • ASP
  • Php/Mysql
  • Flash
  • Ajax
  • 源码下载
  • 精美桌面
  • 供求信息
  • 超稳定100M虚拟主机只要100元,还送50M邮箱!
  • 文字广告招商中...
  • 会员注册 | 用户登录 | 我要投稿
  • 信息订阅
div垂直两列自适应相同高度的3种方法 您现在正在浏览:首页 > CSS > 
div垂直两列自适应相同高度的3种方法

作者:noname 发布时间:2008-04-29 11:27:30 来源:互联网
在table布局时代经常用的一种方法就是两列,然后一样的高度,不同的背景色区分不同的区域
预览下列代码:

程序代码 程序代码
 <table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="120" bgcolor="#FF9900">www.d8in.com</td>
<td bgcolor="#E8F3FF">www.d8in.com<br />
www.d8in.com<br />
<br />
www.d8in.com<br />
<br />
www.d8in.com<br />
<br />
www.d8in.com<br />
  </td>
</tr>
</table>

演示:http://www.d8in.com/blog/demo/div_vh/tableDemo.html

但是这样的布局到了div布局时代就变成了一个问题,因为在table里面
程序代码 程序代码
 <tr>
<td></td>
<td></td>
</tr>

每个td都属于tr里面的元素,td和td的高度是相关联的.而div时代
就不同了
程序代码 程序代码
 <div>
<div></div>
<div></div>
</div>
div和div之间是没有关联,所以就不会向table那样好用了.哪就没有办法解决了吗?
下面我就分享一下几种解决方案
第一种:利用css的Hack

程序代码 程序代码
 
<style type="text/css">
   .sideleft, .sideright{
padding-bottom: 32767px;
   margin-bottom: -32767px;
}
   .sideleft{
     width: 120px;
    position: absolute;
    top: 0;
    left: 0px;
    background-color: #FF9900;
   }
   .sideright{  
     background-color: #E8F3FF;
     margin-left:120px;
     position: relative;
   }
   .main{
     width: 100%;
    position: relative;
top: 0px;
left: 0px;
    height: 200px;
    overflow: hidden;
   }
  </style>
<div class="main">
<div class="sideleft">www.d8in.com</div>
   <div class="sideright">www.d8in.com</div>
</div>

实现原理:

块元素必须包含在一个容器里。

应用overflow: hidden 到容器里的元素。

应用 padding-bottom(足够大的值)到列的块元素 。

应用margin-bottom(足够大的值)到列的块元素。

padding-bottom将列拉长变的一样高,而负的margin-bottom又使其回到底部开始的位置,同时,溢出部分隐藏掉了。

演示:
http://www.d8in.com/blog/demo/div_vh/div_hack.html

第二种javascript,利用javascript计算高度最后渲染显示

程序代码 程序代码
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  
<html xmlns="
http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title></title>
<script type="text/javascript">
/*
------------------------------------------------
PVII Equal CSS Columns scripts
Copyright (c) 2005 Project Seven Development
www.projectseven.com
Version: 1.5.0
------------------------------------------------
*/
function P7_colH(){ //v1.5 by PVII-www.projectseven.com
var i,oh,hh,h=0,dA=document.p7eqc,an=document.p7eqa;
if(dA&&dA.length){
for(i=0;i<dA.length;i++){
dA[i].style.height='auto';
}
for(i=0;i<dA.length;i++){
oh=dA[i].offsetHeight;h=(oh>h)?oh:h;
}
for(i=0;i<dA.length;i++){
if(an){
dA[i].style.height=h+'px';
}else{
P7_eqA(dA[i].id,dA[i].offsetHeight,h);
}
}
if(an){
for(i=0;i<dA.length;i++){
hh=dA[i].offsetHeight;
if(hh>h){
dA[i].style.height=(h-(hh-h))+'px';
}
}
}else{
document.p7eqa=1;
}
document.p7eqth=document.body.offsetHeight;
document.p7eqtw=document.body.offsetWidth;
}
}

function P7_eqT(){ //v1.5 by PVII-www.projectseven.com
if(document.p7eqth!=document.body.offsetHeight||document.p7eqtw!=document.body.offsetWidth){
P7_colH();
}
}

function P7_equalCols(){ //v1.5 by PVII-www.projectseven.com
if(document.getElementById){
document.p7eqc=new Array;
for(i=0;i<arguments.length;i++){
document.p7eqc[i]=document.getElementById(arguments[i]);
}
setInterval("P7_eqT()",10);
}
}

function P7_eqA(el,h,ht){ //v1.5 by PVII-www.projectseven.com
var sp=10,inc=10,nh=h,g=document.getElementById(el),oh=g.offsetHeight,ch=parseInt(g.style.height);
ch=(ch)?ch:h;var ad=oh-ch,adT=ht-ad;nh+=inc;nh=(nh>adT)?adT:nh;g.style.height=nh+'px';
oh=g.offsetHeight;if(oh>ht){nh=(ht-(oh-ht));g.style.height=nh+'px';}
if(nh<adT){
setTimeout("P7_eqA('"+el+"',"+nh+","+ht+")",sp);
}
}
</script>
</head>
<body onload="P7_equalCols('left','right')">
  <style type="text/css">
/*   .sideleft, .sideright{
padding-bottom: 32767px;
   margin-bottom: -32767px;
}*/
   .sideleft{
     width: 120px;
    position: absolute;
    top: 0;
    left: 0px;
    background-color: #FF9900;
   }
   .sideright{  
     background-color: #E8F3FF;
     margin-left:120px;
     position: relative;
   }
   .main{
     width: 100%;
    position: relative;
top: 0px;
left: 0px;
   }
  </style>
  
<div class="main">
<div id="left" style="" class="sideleft">www.d8in.com</div>
   <div id="right" style="height:1px;" class="sideright">
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   </div>
</div>

</body>
</html>

实现原理:
在body标签里面增加onload="P7_equalCols('left','right'),left和right是要一样高度的
div,如果你要更多的话,就把相应的div的id放进去就好了.
计算div的高度,让所有的div的高度用所有div最高的那个高度.

演示:
http://www.d8in.com/blog/demo/div_vh/div_js.html

第三种利用背景图片

哈哈这个我就不用多说了吧,就是计算好尺寸然后用背景图片铺下来

程序代码 程序代码
 <style type="text/css">
   .sideleft{
     width: 120px;
    position: absolute;
    top: 0;
    left: 0px;
   }
   .sideright{  
     margin-left:120px;
     position: relative;
   }
   .main{
     width: 100%;
    position: relative;
top: 0px;
left: 0px;
    background-image: url(bg.gif);
    background-repeat: repeat-y;
   }
  </style>
  
<div class="main">
<div class="sideleft">www.d8in.com</div>
   <div class="sideright">
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   www.d8in.com<br />
   </div>
</div>
演示:http://www.d8in.com/blog/demo/div_vh/div_img.html

参考资料:
1.典型的三行二列居中高度自适应布局

http://www.w3cn.org/article/layout/2004/3h2l.html
2.创建各栏同高的多栏布局

http://www.netcto.com/Colligation/WebStandard/2005517112342_1475031.htm
3.DIV+CSS 布局实例:各种2栏,3栏布局实例下载

http://blog.donews.com/dodo/archive/2005/12/13/656455.aspx
4.CSS布局自适应高度解决方法

http://www.blueidea.com/tech/web/2006/3210.asp

  
【评论】【加入收藏夹】【大 中 小】【打印】【关闭】
※ 相关信息
 ·Div CSS实例教程:分享非常不错的页面制作方法  (2008-04-06 00:22:26)
 ·DivCSS实例:让页脚保持在未满屏页面的底部  (2008-04-06 00:16:00)
 ·DIV&CSS打造自动伸展三栏复合布局  (2007-12-04 16:15:29)

发表评论
查看评论 
用户名: 密码:
验证码: 匿名发表
[注册帐号]
[控制面板]
[用户登陆]
[修改资料]
[用户收藏]
[我的状态]
[退出登陆]
 
文章搜索
     
    [添加文章]   [管理文章]
最新技术文档
    ·十天学会PHP之基础知识
    ·十天学会PHP之流程控制
    ·十天学会PHP之构建数据库
    ·十天学会PHP之连接数据库
    ·echo和print 的区别
    ·PHP生成随机字符串
    ·PHP取得文件后缀
    ·正则表达式经验谈
    ·PHP的Cookie技术介绍
    ·PHP数组排序
技术文档排行榜
    ·天气预报小偷,根据IP自动判断地址
    ·超经典计算机使用问题105答
    ·'AjaxPro'未定义错误的原因&javascript顺
    ·[初学者必读]网页制作之HTML基础知识
    ·DIV&CSS打造自动伸展三栏复合布局
    ·CSS网页布局入门教程:下拉及多级弹出式菜单
    ·阿里妈妈广告的投放技巧
    ·谁是网页浏览器引擎速度真正王者
    ·JavaScript:世界上误解最深的语言
    ·几种常用禁止修改输入框的方法
关于站点 - 广告服务 - 联系我们 - 免责声明 - 程序支持 - 网站地图 - 留言中心 - 返回顶部

Copyright © 2007-2008 www.Jishubu.com online services. All rights reserved. Template designed by laogui.
违法不良信息举报中心 津ICP备07002356号