一般你们在制做网页的过程当中会遇到不少棘手的问题,好比我在写一个页面的时候,遇到了div嵌套引发的margin-top不起做用,对内部的div设置margin-top时,内部对于外部的div并无产生一个margin值,而是外部的div相对于上面的div产生了一个margin值,为何会出现这种状况???css
这是由于嵌套div中margin-top出现转移,在部分浏览器中,两个嵌套的div,若是外层父元素div的padding值为0,那么内层div的margin-top,margin-bottom值都会转移到父元素也就是外层div身上。html
<head>
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
.div1{
height: 500px;
width: 100%;
background: #ccc;
}
.div2{
height: 100px;
width: 100px;
background: red;
margin-top: 100px;
}
</style>
</head>
<body>
<div class="div1">
<div class="div2"></div>
</div>
</body>浏览器
由代码可看出,div1嵌套div2,对div2设置margin-top是100px;post
可看出,div1 上方留的空白正是咱们对div2设置的margin值ui
解决办法:htm
1.给父元素div1设置一个padding值blog
.div1{
height: 500px;
width: 100%;
background: #ccc;
padding-top: 1px;
}get
2.给父元素div1设置一个overflow:hidden;在不加overflow:Hidden;的时候,margin-top:这个属性是认不到边的,也就是失效。可是ie浏览器解决了这个问题,火狐、谷歌之类的就会出现失效,因此这是个标准问题,也是个兼容问题。it
.div1{
height: 500px;
width: 100%;
background: #ccc;
overflow: hidden;
}io
3.把外边距margin改成padding,因为这样作撑大了盒子的高度,会出现如图效果,因此不建议使用。
4.让父元素生成一个块级格式化范围(BFC)(关于BFC:http://blog.sina.com.cn/s/blog_48422a050100tkig.html)
给子元素div2加:
float: left/right
position: absolute
display: inline-block/table-cell(或其余 table 类型)
overflow: hidden/auto
给父层div1加:position: absolute;
引用于:http://www.cnblogs.com/huixinyudeboke/p/5043500.html