CSS 边距不根据父级

Gio*_*nso 3 css margin

我有两个 div,一个“容器”和一个“内容”。如果内容在容器内,则适合容器。

#container {
    display:block;
    width:300px;
    margin:auto;
    background:green;
}
#content {
    display:block;
    margin:20px; /* HERE IS THE ERROR */
    background:yellow;
}
Run Code Online (Sandbox Code Playgroud)

顶部和底部边距不在父级内部,但左侧和右侧位于父级内部。

为什么会出现这种情况?

编辑: JSFIDDLE示例:

adr*_*ift 5

这是由于边距折叠所致- 块级元素的第一个子元素的上边距(假设它也是块级并参与正常流程)将始终与其父级的上边距一起折叠。

解决此问题的一种方法是将子 div 的显示值更改inline-block为。

#content {
    background: yellow;
    display: inline-block;
    margin: 20px;
}
Run Code Online (Sandbox Code Playgroud)

注意:正如AndyG指出的,您还可以通过在容器 div 上使用填充或边框等多种方式来防止边距折叠。请参阅规格以获取完整列表。