问答详情
源自:2-5 练习题

子元素设置的margin属性居然不能把父元素撑大?只有父元素设置了border才可以,为什么?

<!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>

http://img.mukewang.com/580e000900017eab13030580.jpg

提问者:慕工程2957023 2016-10-24 20:35

个回答

  • 慕少7532173
    2016-11-05 10:45:31
    已采纳

    这是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.


  • 泠泉Kelvin
    2019-04-26 09:15:01

    必须赞!

  • sizen
    2016-10-25 19:35:55

    你没设置父元素border时,子元素的margin是子元素与外部边缘的距离,设置时子元素的margin就是与父元素边框的距离,看这样能不能理解。

  • sizen
    2016-10-25 17:42:34

    margin的值分别是父元素与外部边缘的距离,子元素与父元素边框的距离,领会就好。

  • sizen
    2016-10-25 09:01:35

    margin是外边距的属性,而border是边框的属性,border可以改变盒子的宽度和高度,margin不可。