<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.d1{
width: 50px;
height: 50px;
padding: 150px;
background-color: red;
margin:200px;
border: 1px solid #000;
}
.d2{
background:#0f0;
/*border: 1px solid yellow;*/ /* 加上这句之后,d1的margin才能把他的父容器d2撑起来,为什么*/
}
</style>
</head>
<body>
<div>
<div>打阿凡达的非官方</div>
</div>
</body>
</html>
这是margin塌陷的几种情况之一,另外的你可以google其他几种情况。我在这里说一种情况,即楼主所遇到的情况:父子级margin。
首先大概说一下BFC。box的上下间距是有margin决定的,同一个BFC中的box会发生margin坍塌(也叫margin重叠)现象,这里注意,说的是上下margin。所以不同BFC的box不会发生margin坍塌现象。
在父子级嵌套中,若父级没有border/padding-top,也没有空标签清浮动,总而言之就是没有触发BFC的时候,此时只给自己设置margin-top,会传递给父级,也就是楼主所说的现象。为了避免margin坍塌现象,就要通过各种方式触发BFC。
触发BFC的几种方式:
1。overflow:hidden/auto/scroll;
2.position不是static也不是relative;
3.float不是none;
4.display是table-cell或inline.
必须赞!
你没设置父元素border时,子元素的margin是子元素与外部边缘的距离,设置时子元素的margin就是与父元素边框的距离,看这样能不能理解。
margin的值分别是父元素与外部边缘的距离,子元素与父元素边框的距离,领会就好。
margin是外边距的属性,而border是边框的属性,border可以改变盒子的宽度和高度,margin不可。