(转)Div左右两侧等高
一. 利用背景图,做出左右等高的模拟效果
这种方法不是真正的左右等高,而是在外框元素中添加一张背景图片,当内容增多时,背景会纵向重复,就会形成左右等高的效果。
这种方法不是真正的div自动等高,而是在左右两个div的外面添加一个外框元素,给这个外框元素添加一个背景,当内容增多时,背景就会向下纵向重复,看起来就向左右两个div都自动向下延伸了一样。下面写一下详细代码。
Html代码:
<div id="wrap">
<div id="left_a">
<p>http://Dreamweaver.abang.com</p><p>http://Dreamweaver.abang.com</p>
<p>http://Dreamweaver.abang.com</p><p>http://Dreamweaver.abang.com</p>
<p>http://Dreamweaver.abang.com</p><p>http://Dreamweaver.abang.com</p>
<p>http://Dreamweaver.abang.com</p><p>http://Dreamweaver.abang.com</p>
<p>http://Dreamweaver.abang.com</p>
</div>
<div id="right_a">
<br /> <br />
<br /> <br />
<br /> <br />
</div>
<div class="clear"></div>
</div>
CSS代码:
*{margin:0; padding:0;}
#wrap{
width:950px;
height:100%;
clear:both;
margin:0 auto;
background:#FFF url(background.gif) repeat;
}
#left_a { float:left; width:190px; }
#right_a { float:right; width:750px; }
.clear { clear:both; }
对以上代码的解释:
1、在Html代码中,<div id="wrap">这行是外面容器的开始,在CSS中用background给它定义一个背景;
2、给wrap定义背景的时候要注意,这里定义的总宽度是950像素,左侧边栏是190像素,右侧是750像素,两者中间有10像素的空白,制作背景图时应按照此尺寸制作,左侧190像素是一个颜色,右侧750像素是一个颜色,中间10像素白色。
3、由于这个布局采用的是float浮动布局的方式,两个div分别向左向右分布,很容易让浏览器解析时出现问题而检测不到高度,所以在CSS代码中,wrap的高度应定义为100%,并且使用clear方法清除浮动,让其在Firefox中也正常显示。
二. 利用表格嵌套
这种方法就是在div中嵌套一个表格,因为表格是可以左右自动等高的,所以当一侧的内容增多时,两侧都会自动等高。
其实只要用表格布局做过页面,这个方法基本上大家都会,就是在div中嵌套表格。
原则上,使用div布局应尽量减少表格出现,但为了达到某些效果,稍稍的使用一些也是可以的,况且国外有些较有名的网站也使用了这种方法。下面讲解具体方法。
Html代码:
<div id="wrap">
<table border="0" cellpadding="0" cellspacing="0" id="table_layout">
<tr>
<td id="left_b">
<div class="box">
<p>http://Dreamweaver.abang.com</p><p> </p>
<p>http://Dreamweaver.abang.com</p><p> </p>
</div>
<div class="box">
<p>http://Dreamweaver.abang.com</p><p> </p>
<p>http://Dreamweaver.abang.com</p>
</div>
</td>
<td id="mid_b"> </td>
<td id="right_b">
<div class="box">阿邦Dreamweaver专栏</div>
</td>
</tr>
</table>
</div>
CSS代码:
* { margin:0; padding:0; }
#wrap { width:950px; height:100%; clear:both; margin:0 auto; background:#FFF; color:#FFF; }
#table_layout { width:950px; }
#left_b { width:190px; background:#09C; }
#right_b { width:750px; background:#09C; }
#mid_b { width:10px; }
.box { clear:both; height:100%; }
上面的代码是将表格嵌套在wrap这个div中,在这个table中又插入其它div,这样就可以让左右两列达到自动等高的效果。上面的代码大家应该都能看懂,如果有问题可以向我提问。
三. 利用内、外补丁padding和margin自动等高
这种方法是利用正内补丁和负外补丁相结合,再隐藏掉溢出的内容,最终达到左右等高的效果。
具体理论不再多说了,只要把代码给大家列出来就能一目了然了。
Html代码:
<div id="wrap">
<div id="left">
<br /><br />
</div>
<div id="right">
http://Dreamweaver.abang.com <br />
<br /> <br /> <br />
阿邦Dreamweaver专栏 <br /> <br />
<br /> <br />
</div>
</div>
CSS代码:
* { margin:0; padding:0; }
#wrap{ overflow:hidden; padding:0; padding-left:180px; }
#left,#right{ height:auto; margin-bottom:-10000px; padding-bottom:10000px; }
#left{ display:inline; float:left; width:180px; margin-left:-180px; background: #0CF; }
#right{ float:right; width:100%; background: #FC6; }
个人优化,div自适应宽度css代码:
* { margin:0; padding:0; }
#wrap{ overflow:hidden; padding:0; }
#left,#right{ height:auto; margin-bottom:-10000px; padding-bottom:10000px; }
#left{ display:inline; float:left; width:180px; background: #0CF; }
#right{ background: #FC6; overflow: hidden; }
对以上代码的部分解释:
1、最外面的wrap必须使用overflow:hidden来隐藏溢出的内容。
2、wrap的左内补丁设置为180像素是为了让left这个div有空间显示。
3、left和right两个div底部外补丁为-10000px,底部内补丁为10000px,这是必须设置的,如果内容可能会较多,可以将数值再增大。
4、left这个div居左,right居右,display:inline属性是为了修正left在IE6中会跑出外框的bug。
四. 利用Javascript脚本
Javascript是最好的Html辅助程序,尤其是前端界面的开发,在自动等高方面,也有专业的脚本。
网上使div等高的Javascript脚本很多,但有些仅仅针对IE浏览器可用,对Firefox、Opera等浏览器无效,所以在选择脚本的时候应该特别注意脚本的跨浏览器兼容性。
下面给大家介绍一个从网上找来的Javascript脚本,并列出使用方法。
Html代码:
<div class="div_top">
这是顶部的div
</div>
<div id="Div1" class="div_left">
左部div <br />
http://Dreamweaver.abang.com <br /><br />
<br /><br />
<br /><br />
</div>
<div id="Div2" class="div_right">
右部div <br/> http://Dreamweaver.abang.com <br/>
</div>
<div class="div_bottom">
这是底部的DIV
</div>
CSS代码:
* { margin:0px; padding:0px; }
.div_top{ width:100%; background:#FCC; }
.div_bottom{ width:100%; background:#FFC; }
.div_left{ position:absolute; width:200px; background:#FE2; }
.div_right{ margin-left:200px; background:#0CF; }
Javascript代码:
<script>
function P7_colH(){
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(){
if(document.p7eqth!=document.body.offsetHeight||document.p7eqtw!=document.body.offsetWidth){
P7_colH();
}
}
function P7_equalCols(){
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){
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>
以上Html、CSS、Javascript三部分代码齐备后,还需要在网页的body标签处加入一行代码onload="P7_equalCols('Div1','Div2')",
变成<body onload="P7_equalCols('Div1','Div2')">, 其中Div1对应的是左侧div的id,Div2对应的是右侧的id
如果是三列布局,可以再自己增加内容,变成 <body onload="P7_equalCols('Div1','Div2','Div3')">
将以上代码复制到网页文件中,即可实现div自动等高的效果了。
(转)Div左右两侧等高的更多相关文章
- div两栏等高布局
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- div的最小宽高和最大宽高
div的最小宽高和最大宽高很少使用但是很实用,今天敲代码,就遇到了,要在div里设置滚动条,众所周知,一般是设overflow-y:auto,但需要一个高度,只有div里的内容超过这个高度时,才会有滚 ...
- 多种方法实现div两列等高(收集整理)
HTML骨架 <div id="header">头部</div> <div id ="container"> <div ...
- 响应式、手机端、自适应 百分比实现div等宽等高的方法
在百分比布局中, 有时候会遇见一个头疼的问题,就是如果某个布局是正方形的话,我们在这种情况下考虑到适应各种媒体尺寸,又不能给它定固定的宽高. 之前遇见过纯色布局的结果我就用纯色图片代替实现的,现在有了 ...
- body和普通div背景图宽高百分比的区别
body和普通div背景图的区别 background: url(//m.360buyimg.com/mobilecms/s220x220_jfs/t2746/167/831241799/29915 ...
- 纯css实现div三列等高布局的最简单方法简化版/也可以多列
使用正padding和负margin对冲实现多列布局方法 这种方法很简单,就是在所有列中使用正的上.下padding和负的上.下margin,并在所有列外面加上一个容器,并设置overflow:hid ...
- css如何让div和页面等高?
我们都知道,只要是block状态的标签,宽度和父级等宽,或者设置宽度100%也可以等宽,但设置高度100%是不管用的,那么如何让标签和页面等高呢,除了用js去动态计算设置高度值,用css也可以 只要将 ...
- 使用rem编写自适应屏幕网页造成div被span撑高的解决办法
原始代码: <html> <head> <meta charset="utf-8"> <meta content="ie=edg ...
- img图片自适应div盒子,前提是不要把盒子的高给写死了,就是不要写高,如下
div{width:100%;}//写高就自适应盒子不起来了 img{width: 100%; height: 100%;}
随机推荐
- C# 当double数值较大且小数位过多时转化成字符串并保留小数位
今天在C#中碰到了一个问题,需要将double转换成字符串显示,要求保留小数位. 在网上查询了一下相关的文章 具体如下: double temp=3.1415926; (F)Fixed point:s ...
- iOS:KVO/KVC 的概述与使用
iOS:KVO/KVC 的概述与使用 KVO APP开发技术QQ群:347072638 一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性 ...
- 转:PHP的线程安全ZTS与非线程(NTS)安全版本的区别
原文来自于:http://blog.sina.com.cn/s/blog_94c21e8f0101s2ic.html Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和 ...
- GNU PGM
Linux程序设计入门 - gpm gpm是Linux console下的滑鼠驱动程序,它主要提供文字模式下的滑鼠事件处 理.Linux下文字界面的滑鼠几乎都是用gpm来处理. gpm的文件在gpm原 ...
- cf B George and Round
题意:输入n,m,下一行为n个数a1<a2<a3......<an:然后再输入m个数b1<=b2<=b3<.....<=bm: 每个ai都必须在b中找到相等的 ...
- TWinControl.SetBounds与TWinControl.UpdateBounds赏析(定义和调用)
先看它们的函数内容: procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); begin // 虚函数,TWinCon ...
- COJ 2110 Day7-例3
Day7-例3 难度级别:C: 运行时间限制:5000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 输入 输入的第一行包含整数n和k,其中n(2 ≤ n ≤100 ...
- 「Poetize6」Candle
描述 蜡烛商店中有10种蜡烛,形状分别是0~9这10个数字,不过对于每种蜡烛,商店的存货量仅有一根.另外,忘川沧月已经有了一个"+"形状的蜡烛.忘川沧月想购买一些蜡烛,使得他的家族 ...
- 数据结构之顺序栈SqStack
顺序栈SqStack 基本操作 Status InitStack()//构造一个空栈S Status DestroyStack()//销毁栈S,S不再存在 Status ClearStack()//把 ...
- VS插件 热
1. AnkhSVN - Subversion SCC Providerhttp://ankhsvn.open.collab.net/ AnkhSVN是一个VS的Subversion 源代码管理提供者 ...