@BoltClock提到的内容非常可靠。在这里,我只想为这个问题添加更多解决方案。检查这个w3c_collapsing margin。绿色部分是如何解决此问题的潜在思路。
解决方案1
浮动框与任何其他框之间的边距不会折叠(即使在浮动框及其流入子框之间也不会折叠)。
这意味着我可以添加float:left
到任何#outer
或#inner
demo1的。
还请注意,float
这会使auto
保证金无效。
解决方案2
建立新块格式上下文的元素(例如浮点数和具有“可见”以外的“溢出”的元素)的边距不会随其流入子元素而崩溃。
比其他的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;
}
这两种方法将打破正常的流程 div
解决方案4
内联阻止框的边距不会折叠(即使带有其流入子框也不会折叠)。
与@enderskill相同
解决方案5
除非块中有间隙,否则流入的块级元素的下边距总是与其下一个流入的块级同级的上边距一起折叠。
这与问题无关,因为这是兄弟姐妹之间的崩溃边缘。它通常表示顶盒是否具有,margin-bottom: 30px
而同级盒是否具有margin-top: 10px
。它们之间的总边距30px
为40px
。
解决方案6
如果元素没有顶部边框,没有顶部填充且子元素没有间隙,则流入元素块元素的顶部边缘会以其第一个元素流入子块的顶部边缘折叠。
这非常有趣,我只可以添加一条顶部边框线
#outer{
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto;
border-top: 1px solid red;
}
#inner {
background: #FFCC33;
height: 50px;
margin: 50px;
}
而且<div>
默认情况下,Also 是块级的,因此您不必故意声明它。很抱歉,由于我的新手声誉而无法发布2个以上的链接和图片。至少您知道问题的根源是下次您看到类似的内容。