【问题标题】:Inner div not respecting margin-top relative to parent div [duplicate]内部 div 不尊重相对于父 div 的 margin-top [重复]
【发布时间】:2015-03-25 22:53:43
【问题描述】:

检查这个极其简单的 html 结构。一个 div 在另一个里面,内部(绿色)div 有margin-top: 100px,外部(红色)div 没有顶部边距。外部 div 是内部 div (100px) 的两倍 (200px)。

那么您希望结果是什么样的?如果你像我一样,你会得到与你自然期望得到的相反的结果。

我的问题不是如何防止这种情况。我的问题是为什么这种情况在所有浏览器中始终以这种方式发生?我的意思是,这显然必须是它的工作方式,但对我来说这非常违反直觉。

.red {
    background-color: #a00;
    height: 200px;
}

.green {
    background-color: #0a0;
    margin-top: 100px;
    height: 100px;
}
<div class="red">
    <div class="green"></div>
</div>

http://jsfiddle.net/connexo/7txnoj7m/

【问题讨论】:

  • 你想要达到什么目的?
  • 你希望发生什么,因为这对我来说似乎是合理的
  • 我想要实现的是理解为什么以浏览器的方式呈现它是有意义的?
  • @你觉得子元素的margin-top不应用在父元素内部,而是冒泡到父元素是合理的吗?
  • @connexo 我认为这很好地解释了它Answer

标签: html css


【解决方案1】:

我认为这是一个父/子依赖问题。两个 Div 的位置都是默认的:'static'。因此,红色 Div 位于顶部边缘的绿色 Div 后面。

【讨论】:

    【解决方案2】:

    它的正常渲染方式称为边缘折叠。更多你可以阅读here

    【讨论】:

    • Eric Meyer 自己写了一篇关于它的文章,甚至他也承认这种行为可能有点出乎意料。 “在大多数情况下,边距折叠提供了我们想要的布局结果类型。只有在我们希望边距被其他元素“包含”的情况下,事情可能会有点出错。感谢 CSS 的编写方式但是,有一些方法可以克服不必要的折叠。通过将填充或边框与元素相关联,它将“包含”后代元素的边距。 complexspiral.com/publications/uncollapsing-margins
    猜你喜欢
    • 2013-08-26
    • 2018-11-18
    • 2014-07-27
    • 1970-01-01
    • 2014-11-15
    • 2013-09-22
    • 2011-02-10
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多