高分求助,很长时间没有解决的div难题: 本帖最后由 sonaXH 于 2011-05-12 00:22:46 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <!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"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>三栏等高(wwww.hemin.cn)</title><style type="text/css">*{ margin:0; padding:0; font-size:18px; font-family:"新宋体";}body {min-width: 850px;width:expression((documentElement.clientWidth < 850) ? "850px" : "auto" ); }.Top{background:#999; height:100px;}.Middle,.Left,.Right{ float:left;padding-bottom: 32767px;margin-bottom:-32767px;}.Content{ overflow:hidden;padding:0 250px 0 300px; zoom:1;position:relative;}.Middle{background:#090;width:100%;}.Left{background:#333;width:300px;margin-left:-100%; position:relative; right:300px;_left:250px;}.Right{background:#666;width:250px;margin-right:-100%;}</style></head><body><div class="Top">顶部</div><div class="Content"> <div class="Middle">中间</div> <div class="Left">左边</div> <div class="Right">右边<br /><br /><br /></div></div></body></html> // 用jquery, 很好的实现了// 引用JS就不说了 <script type="text/javascript"> if($("#div1").height()-$("#div2").height()<0){ $("#div1").css({height:$("#div2").height()}); } else{ $("#div2").css({height:$("#div1").height()}); } </script> 没看清, 还有要求,以后哪个DIV增加了高度, 就这样再执行一遍刚刚发的JS就可以咯 1楼、2楼很精彩~赞一个。凑个热闹:<body><input type=button value='测试' onclick="$('div1').style.height=50+'px';$('div2').style.height=100+'px';"> <div id='c' style="width:300px; background:gray;" > <div id="div1" style="width:100px ;float:left;background: red;"> <p>简单的两列div并排:我的要求:在页面加载结束后 执行js 使得div1和idv2 的高度相同 (div1和div2都有背景颜色 那么执行js以后两列长度将相等)。如果以后div1或者div2的内容有扩充 那么以div高度高的那个为标准。整个大的div也需要扩充。一直搞不清楚ie跟ff在元素高度之间的换算差。所以请知道的大侠不吝赐教。</p> <ul> <li>a</li> <li>a</li> <li>a</li> <li>a</li> </ul> </div> <div id="div2" style="width:100px ;float:right;background: red;"> <p>nasjcbkadsjbcdshvbdshvbakshdvbahfvba,shdbvkshbvhfbv asdc bkafffffdskjbavsmndv dfhnvamdsv fmnv amndfv manf ad lcjkannnfvamdsvnfm v,am v,maf v,, afv,am dsv,mf va </p> <p>ncjkbavjkdsbvkjfadvbkadjfvbkaehfvbkaehfrvberkhvbek</p> </div> <div style='clear:both'></div> </div> </body><script>function $(id){return document.getElementById(id)}function setHeight(){ var hMax=Math.max($("div1").offsetHeight,$("div2").offsetHeight); if($("div1").offsetHeight<hMax)$("div1").style.height=hMax+'px'; if($("div2").offsetHeight<hMax)$("div2").style.height=hMax+'px';}setInterval('setHeight()',100)</script> 这个方法很好。但是我想知道.Middle,.Left,.Right{ float:left;padding-bottom: 32767px;margin-bottom:-32767px;}为什么加了padding-bottom 和 margin-bottom 就可以实现效果了呢。 1楼的布局要慎用,确保这个布局不会影响到你对内部元素的操作。原理方面,对于内容最高的那个元素,padding-bottom把这个元素高度撑为了 32768px+内容本身的高度,然后用margin-bottom将多出的部分(32768px)隐藏起来(因为父元素有overflow:hidden)。相对于其他的元素,内容达不到高度,但是由于padding-bottom的存在,使背景可以继续渲染,只要内容落差没有超过32768px,就不会显出没有渲染到的地方。也就是说,你看到的空白部分实际上是padding部分的内容。下面这个例子更清晰展示了它的原理与效果。<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>三栏等高(wwww.hemin.cn)</title><style type="text/css">*{ margin:0; padding:0; font-size:18px; font-family:"新宋体";}body {min-width: 850px;width:expression((documentElement.clientWidth < 850) ? "850px" : "auto" ); color:#fff;}.Top{background:#999; height:100px;}.Middle,.Left,.Right{ float:left;padding-bottom: 100px;margin-bottom:-100px;}.Content{ overflow:hidden;padding:0 250px 0 300px; zoom:1;position:relative;}.Middle{background:#090;width:100%;}.Left{background:#333;width:300px;margin-left:-100%; position:relative; right:300px;_left:250px;}.Right{background:#666;width:250px;margin-right:-100%;}</style></head><body><input id="add" value="添加内容" type="button"/><input id="show" value="显示高度" type="button"/><div class="Top">顶部</div><div class="Content"> <div class="Middle" id="middle">中间</div> <div class="Left" id="left">左边</div> <div class="Right" id="right">右边<br /></div></div><script type="text/javascript">var $ = function(str){return document.getElementById(str);};var left = $('left');var middle = $('middle');var right = $('right');var add = $('add');var show = $('show');add.onclick = function(){ right.innerHTML += '右边<br />';}show.onclick = function(){ alert('高度:\nleft:'+left.offsetHeight+'\nmiddle:'+middle.offsetHeight+'\nright:'+right.offsetHeight);}</script></body></html> 看了那么多。都写的不错。建议LZ在包含两个列的DIV上加个ID然后获取这个dIV的高度然后再将左边跟右边的高度都设置成你这个总DIV的高度就可以了! 下面按钮实现楼主想要的效果,自己把它改成在内容发生变化时进行调用就可以了:<script type="text/javascript">function div内容变化时可以调用本函数() { document.getElementById("div1").style.height=document.getElementById("div2").style.height=Math.max(document.getElementById("div1").offsetHeight,document.getElementById("div2").offsetHeight);}</script><body><div style="width:300px; background:gray;border:1 solid blue;"> <div id="div1" style="width:100px ;float:left;background: red;overflow:hidden;"> <p>nasjcbkadsjbcdshvbdshvbakshdvbahfvba,shdbvkshbvhfbv asdc bkafffffdskjbavsmndv dfhnvamdsv fmnv amndfv manf ad lcjkannnfvamdsvnfm v,am v,maf v,, afv,am dsv,mf va</p> <ul> <li>a</li> <li>a</li> <li>a</li> <li>a</li> </ul> </div> <div id="div2" style="width:100px ;float:right;background: green;overflow:hidden;"> <p>nasjcbkadsjbcdshvbdshvbakshdvbahfvba,shdbvkshbvhfbv asdc bkafffffdskjbavsmndv dfhnvamdsv fmnv amndfv manf ad lcjkannnfvamdsvnfm v,am v,maf v,, afv,am dsv,mf va</p> <p> ncjkbavjkdsbvkjfadvbkadjfvbkaehfvbkaehfrvberkhvbek </p> </div></div><input type="button" onclick="div内容变化时可以调用本函数();" value="div内容变化时可以调用本函数"> style="height:auto"设置一下,不是会自动撑大吗 基于Web Flash 3D 物品展示软件的设计与实现 C#windows窗体 javascript经典代码 location.search接收不到参数值? 如何新建一个表啊 请教一个textarea的问题 js执行应用程序的小问题???? 初学正则,100分求一正则。 哥们,如何把onclick打开windows.open的窗口放在目标框架里面去? 如何通过样式表来改变<select>的外观,使其平面化,包括下拉尖头 JS 增加编号问题 JS修改float属性问题
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>三栏等高(wwww.hemin.cn)</title>
<style type="text/css">
*{ margin:0; padding:0; font-size:18px; font-family:"新宋体";}
body {min-width: 850px;width:expression((documentElement.clientWidth < 850) ? "850px" : "auto" ); }
.Top{background:#999; height:100px;}
.Middle,.Left,.Right{ float:left;padding-bottom: 32767px;margin-bottom:-32767px;}
.Content{ overflow:hidden;padding:0 250px 0 300px; zoom:1;position:relative;}
.Middle{background:#090;width:100%;}
.Left{background:#333;width:300px;margin-left:-100%; position:relative; right:300px;_left:250px;}
.Right{background:#666;width:250px;margin-right:-100%;}
</style>
</head>
<body>
<div class="Top">顶部</div>
<div class="Content">
<div class="Middle">中间</div>
<div class="Left">左边</div>
<div class="Right">右边<br /><br /><br /></div>
</div>
</body>
</html>
// 引用JS就不说了
<script type="text/javascript">
if($("#div1").height()-$("#div2").height()<0){
$("#div1").css({height:$("#div2").height()});
}
else{
$("#div2").css({height:$("#div1").height()});
}
</script>
凑个热闹:
<body>
<input type=button value='测试' onclick="$('div1').style.height=50+'px';$('div2').style.height=100+'px';">
<div id='c' style="width:300px; background:gray;" >
<div id="div1" style="width:100px ;float:left;background: red;">
<p>简单的两列div并排:我的要求:在页面加载结束后 执行js 使得div1和idv2 的高度相同 (div1和div2都有背景颜色 那么执行js以后两列长度将相等)。如果以后div1或者div2的内容有扩充 那么以div高度高的那个为标准。整个大的div也需要扩充。
一直搞不清楚ie跟ff在元素高度之间的换算差。所以请知道的大侠不吝赐教。</p>
<ul>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
</ul>
</div>
<div id="div2" style="width:100px ;float:right;background: red;">
<p>nasjcbkadsjbcdshvbdshvbakshdvbahfvba,shdbvkshbvhfbv
asdc bkafffffdskjbavsmndv dfhnvamdsv fmnv amndfv manf
ad lcjkannnfvamdsvnfm v,am v,maf v,, afv,am dsv,mf va
</p>
<p>ncjkbavjkdsbvkjfadvbkadjfvbkaehfvbkaehfrvberkhvbek</p>
</div>
<div style='clear:both'></div>
</div>
</body>
<script>
function $(id){return document.getElementById(id)}
function setHeight(){
var hMax=Math.max($("div1").offsetHeight,$("div2").offsetHeight);
if($("div1").offsetHeight<hMax)$("div1").style.height=hMax+'px';
if($("div2").offsetHeight<hMax)$("div2").style.height=hMax+'px';
}
setInterval('setHeight()',100)
</script>
原理方面,对于内容最高的那个元素,padding-bottom把这个元素高度撑为了 32768px+内容本身的高度,然后用margin-bottom将多出的部分(32768px)隐藏起来(因为父元素有overflow:hidden)。
相对于其他的元素,内容达不到高度,但是由于padding-bottom的存在,使背景可以继续渲染,只要内容落差没有超过32768px,就不会显出没有渲染到的地方。也就是说,你看到的空白部分实际上是padding部分的内容。下面这个例子更清晰展示了它的原理与效果。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>三栏等高(wwww.hemin.cn)</title>
<style type="text/css">
*{ margin:0; padding:0; font-size:18px; font-family:"新宋体";}
body {min-width: 850px;width:expression((documentElement.clientWidth < 850) ? "850px" : "auto" ); color:#fff;}
.Top{background:#999; height:100px;}
.Middle,.Left,.Right{ float:left;padding-bottom: 100px;margin-bottom:-100px;}
.Content{ overflow:hidden;padding:0 250px 0 300px; zoom:1;position:relative;}
.Middle{background:#090;width:100%;}
.Left{background:#333;width:300px;margin-left:-100%; position:relative; right:300px;_left:250px;}
.Right{background:#666;width:250px;margin-right:-100%;}
</style>
</head>
<body>
<input id="add" value="添加内容" type="button"/>
<input id="show" value="显示高度" type="button"/>
<div class="Top">顶部</div>
<div class="Content">
<div class="Middle" id="middle">中间</div>
<div class="Left" id="left">左边</div>
<div class="Right" id="right">右边<br /></div>
</div>
<script type="text/javascript">
var $ = function(str){return document.getElementById(str);};
var left = $('left');
var middle = $('middle');
var right = $('right');
var add = $('add');
var show = $('show');
add.onclick = function(){
right.innerHTML += '右边<br />';
}
show.onclick = function(){
alert('高度:\nleft:'+left.offsetHeight+'\nmiddle:'+middle.offsetHeight+'\nright:'+right.offsetHeight);
}</script>
</body>
</html>
function div内容变化时可以调用本函数() {
document.getElementById("div1").style.height=document.getElementById("div2").style.height=Math.max(document.getElementById("div1").offsetHeight,document.getElementById("div2").offsetHeight);
}
</script>
<body>
<div style="width:300px; background:gray;border:1 solid blue;">
<div id="div1" style="width:100px ;float:left;background: red;overflow:hidden;">
<p>nasjcbkadsjbcdshvbdshvbakshdvbahfvba,shdbvkshbvhfbv
asdc bkafffffdskjbavsmndv dfhnvamdsv fmnv amndfv manf
ad lcjkannnfvamdsvnfm v,am v,maf v,, afv,am dsv,mf va</p>
<ul>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
</ul>
</div>
<div id="div2" style="width:100px ;float:right;background: green;overflow:hidden;">
<p>nasjcbkadsjbcdshvbdshvbakshdvbahfvba,shdbvkshbvhfbv
asdc bkafffffdskjbavsmndv dfhnvamdsv fmnv amndfv manf
ad lcjkannnfvamdsvnfm v,am v,maf v,, afv,am dsv,mf va</p>
<p>
ncjkbavjkdsbvkjfadvbkadjfvbkaehfvbkaehfrvberkhvbek
</p>
</div>
</div>
<input type="button" onclick="div内容变化时可以调用本函数();" value="div内容变化时可以调用本函数">