css - 嵌套的垂直边距折叠如何工作?

标签 css

我很难理解嵌套元素中垂直边距折叠的概念。我在 http://www.howtocreate.co.uk/tutorials/css/margincollapsing 发表了一篇文章解释它是如何工作的,但对其解释感到困惑。所以在它的例子中它引用了如下2个元素

<div style="margin-top:10px">
<div style="margin-top:20px">
A
</div>
</div>  

看到内部 div 有 20px 的边距,这就是将应用于整个代码块的边距。令我感到困惑的是在那之后的一切,还没有考虑 Internet Explorer 7 的问题。有人能够以简化的方式为 CSS 的新手解释它吗?

最佳答案

要记住两条规则:

  1. 如果边距接触,它们就会折叠。
  2. 嵌套元素“依偎”如果只有边距将它们分开。
  3. “流”之外的元素表现不同。也就是说,此行为不适用于 float 、position:fixed 或 position:absolute 元素。

所以对于这个 HTML(嵌套的 div):

<div id="outer"> 
    <div id="inner">
        A
    </div>
</div> 

和这个初始的 CSS:

#outer {
    margin-top:10px;
    background:blue;
    height: 100px;
}
#inner {
    margin-top:20px;
    background:red;
    height: 33%;   
    width: 33%;
}

边距折叠到接触边距的最大值,并且嵌套的 div“依偎”到容器的开头,如下所示:( See it at jsFiddle. )
Nested margin collapse

但是,当两个边距分开时——例如,通过边框或容器中的前面内容——边距不再接触,因此它们不再折叠。

EG,一点点不间断的空格,像这样:

<div id="outer">&nbsp;
    <div id="inner">
        A
    </div>
</div>

杀死崩溃:(See that at jsFiddle.)
Nested margin doesn't collapse

使用边框,而不是前导文本:( Fiddle )
no-collapse, border

关于css - 嵌套的垂直边距折叠如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25805369/

相关文章:

html - 使用基础和 HAML/SASS,你将如何完成这个?

javascript - object.onclick 不工作

javascript - CRM、Javascript 和动态 CSS

CSS :target::before 伪元素导致其容器的背景颜色出现问题

python - 为什么在我的 CSS 中提供网络字体文件时会出现 500 错误?

css - 是否有 "previous sibling"选择器?

html - 无法让 Google 字体显示在 Gmail 中的 HTML 电子邮件中

css - 数据表在标题过滤器上添加自定义选择

javascript - jquery中两个给定对象中的公共(public)对象

css - Angular Material 选择样式行为不正确