BoltClock的答案非常扎实。在此,我想为这个问题添加几个解决方案。
请查看w3c_collapsing margin。绿色部分是可能解决此问题的思路。
解决方案1
浮动框与任何其他框之间的边距不会折叠(甚至不会在浮动框和其流内子元素之间折叠)。
这意味着我可以将float:left
添加到#outer
或#inner
demo1。
还要注意,float
会使margin
中的auto
无效。
解决方案2
建立新块格式化上下文的元素的边距(例如浮动元素和具有“overflow”而不是“visible”的元素)不会与其流内子元素折叠。
除了visible
之外,让我们把overflow: hidden
放到#outer
中。这种方式似乎相当简单和不错。我喜欢它。
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
overflow: hidden;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
}
解决方案3
绝对定位的盒子的边距不会折叠(即使是它们的内部流动子元素也不会折叠)。
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
position: absolute;
}
#inner{
background: #FFCC33;
height: 50px;
margin: 50px;
}
或者
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
position: relative;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
position: absolute;
}
这两种方法将打破
的正常流程
解决方案4
行内块框的外边距不会塌陷(即使是其内部流对象也不会)。
与Enderskill相同
解决方案5
一个内部流块级元素的底部外边距总是与下一个内部流块级兄弟元素的顶部外边距合并,除非该兄弟元素具有clearance属性。
这与问题没有太多关系,因为它是兄弟元素之间塌陷的外边距。通常意味着如果顶部框具有margin-bottom: 30px
,而其兄弟框具有margin-top: 10px
。它们之间的总外边距为30px
,而不是40px
。
解决方案6
如果一个内部流块元素没有顶部边框、没有顶部填充且子元素没有clearance属性,则其顶部外边距将与其第一个内部流块级子元素的顶部外边距合并。
这非常有趣,我只能添加一行顶部边框线
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
border-top: 1px solid red;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
}
此外,
<div>
默认是块级元素,因此您不必特意声明它。很抱歉由于我的新手声望,我无法发布超过2个链接和图像。至少下次您看到类似的问题时,知道问题出在哪里了。