@参考文档:http://www.divcss5.com/rumen/r674.shtml
可能您遇到过上下结构的布局,下面DIV内容重叠上面DIV内容上,也可能下面内容覆盖掉上面DIV布局,形成DIV与DIV覆盖重叠现象;您也可能遇到过相邻的两个DIV盒子发生重叠覆盖现象,这些是什么问题如何解决?
一、上下结构DIV盒子覆盖
1、首先网站DIV CSS实例HTML代码
<!DOCTYPE html>
<html>
<head>
<title>DIVCSS5实例 DIV与DIV覆盖</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
.boxa,.boxb{ margin:0 auto; width:400px;}
.boxa-l{ float:left; width:280px; height:80px; border:1px solid #F00}
.boxa-r{ float:right; width:100px; height:80px; border:1px solid #F00}
.boxb{ border:1px solid #000; height:40px; background:#999}
</style>
</head>
<body>
<div class="boxa">
<div class="boxa-l">内容左</div>
<div class="boxa-r">内容右</div>
</div>
<div class="boxb">boxb盒子里的内容</div>
</body>
</html>
2、实例效果截图
3、问题分析
一般想需要将“.boxa”和“.boxb”布局是上下结构,从上图发现在浏览器中看到效果是两个盒子里内容是实现上下结构效果,但“.boxb”这个DIV跑到“.boxa”下面去了,但内容没有发生覆盖,只有DIV发生覆盖现象。
这个原因是因为第一个大盒子里的子级使用了浮动float属性而产生了浮动,所以导致“.boxa”没有被撑开,而同级的“.boxb”盒子与“.boxa”紧贴,而“.boxa”高度没有,“.boxa”的子级浮动的与“.boxb”不是同级,“.boxb”盒子依然认为“.boxa”没有高度(没有被撑开),所以boxb就跑上去了,所以导致“.boxb”DIV盒子就跑到“.boxa”子级DIV盒子下面形成了覆盖重叠现象。
4,问题解决方法
要么清除浮动,要么设置“.boxa”高度,一般情况下文字内容不确定多少就不能设置固定的高度,所以一般不能设置“.boxa”高度(当然能确定内容多高,这种情况下“.boxa”是可以设置一个高度即可解决覆盖问题。
这里就使用CSS清除浮动方法解决上下结构DIV重叠覆盖问题,清除浮动有两种方法,方法如下。
4-1:css clear清除浮动
在“.boxa”盒子</div>闭合前加clear样式清除浮动。
<!DOCTYPE html>
<html>
<head>
<title>DIVCSS5实例 DIV与DIV覆盖</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
.boxa,.boxb{ margin:0 auto; width:400px;}
.boxa-l{ float:left; width:280px; height:80px; border:1px solid #F00}
.boxa-r{ float:right; width:100px; height:80px; border:1px solid #F00}
.boxb{ border:1px solid #000; height:40px; background:#999}
.clear{ clear:both}
</style>
</head>
<body>
<div class="boxa">
<div class="boxa-l">内容左</div>
<div class="boxa-r">内容右</div>
<div class="clear"></div>
</div>
<div class="boxb">boxb盒子里的内容</div>
</body>
</html>
使用clear样式清除浮动
4-2:css overflow清除浮动
此方法与上一方法更为简便简单,只需对“.boxa”(子级有浮动的父级盒子加overflow:hidden)
二、相邻两个DIV重叠覆盖
这种新手出现这种问题比较多,一般是由于相邻两个DIV一个使用浮动一个没有使用浮动,这样照成两个DIV覆盖重叠现象。
1、出问题完整CSS+DIV代码
<!DOCTYPE html>
<html>
<head>
<title>DIVCSS5实例 DIV与DIV覆盖</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
.aa{ float:left; border:1px solid #333; background:#FFF;height:50px;}
.bb{ border:1px solid #F00;background:#CCC; height:80px}
</style>
</head>
<body>
<div class="aa">我是aa里内容</div>
<div class="bb">我是BB里内容</div>
</body>
</html>
介绍代码:设置两个盒子使用class命名分别为“.aa”和“.bb”,一个设置float:left一个设置没有设置,一个设置背景为白色,一个设置背景颜色为灰色,一个高度设置50px,一个设置高度为80px,一个边框为黑色,一个边框为红色。
3、问题分析
从上图或浏览器测试案例可以看出,“.aa”对应DIV盒子浮动覆盖在“.bb”对应DIV盒子之上,但内容没有覆盖,这是因为“.aa”对应DIV盒子使用了浮动,而同级“.bb”对应DIV盒子没有使用浮动,一个使用浮动一个没有导致DIV不是在同个“平面”上,但内容不会照成覆盖现象,只有DIV形成覆盖现象。
4、解决方法
要么都不使用浮动;要么都使用float浮动;要么对没有使用float浮动的DIV设置margin样式。比如这里“.aa”对应盒子会固定宽度为300px;这个使用对“.bb”对应盒子设置margin-left:302px(大于300即可,自己测试设置需要的值)实现不重叠覆盖现象。
@总结注意事项:
1,overflow:hidden;可以解决div相互重叠问题。因为它能清除浮动。因为浮动才引起的div重叠问题。
2,相对定位也会导致div相互重叠!!!
布局中注意的一个问题,就是一个div如果使用了相对定位relative,并且相对自己原位置发生了偏移,就会偏移到其他div的位置(不会把其他标签撑开,而是产生重叠),例如一个div向下偏移了20px,那么下边的div就会和上边的div发生重叠。解决方法?对下边的div也设置相对定位relative属性,并发生20px的位移,就可以了。