为了账号安全,请及时绑定邮箱和手机立即绑定

子元素设置的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://img1.sycdn.imooc.com//580e000900017eab13030580.jpg

正在回答

5 回答

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


5 回复 有任何疑惑可以回复我~
#1

慕工程2957023 提问者

非常感谢!
2016-11-05 回复 有任何疑惑可以回复我~

必须赞!

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

慕工程2957023 提问者

不能理解,我是给父元素设置的border不是子元素
2016-10-25 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信