css 负边距底部不应用于子div以取消父div的边距

8ehkhllq  于 2023-10-21  发布在  其他
关注(0)|答案(2)|浏览(128)
#parent {
  background-color: blue;
  margin-bottom: 40px;
  margin-top: 40px;
}

#child1 {
  background-color: red;
}

#child2 {
  height: 200px;
  background-color: yellow;
  margin-top: -40px;
  margin-bottom: -40px;
}
<div>
  <div id="parent">
    <div id="child1">
      <div id="child2"></div>
    </div>
  </div>
</div>

在child 2上的margin-bottom不起作用,即使该属性正在div上应用。谁来帮帮我。
我需要以某种方式取消的保证金增加了父母通过增加负margin-bottom到child 2
请使用https://jsfiddle.net/nishantmudgal/wy2b7eg9/1/来尝试它,因为不知何故,这个问题没有在上面的片段中重现。

vq8itlhq

vq8itlhq1#

伙计,它工作。如果你给#parent添加一个兄弟节点,你会看到:

#parent {
  background-color: blue;
  margin-bottom: 40px;
  margin-top: 40px;
}

#child1 {
  background-color: red;
}

#child2 {
  height: 200px;
  background-color: yellow;
  margin-top: -40px;
  margin-bottom: -40px;
}

#sibling {
  background-color: blue;
  height: 40px;
}
<div id="parent">
  <div id="child1">
    <div id="child2"></div>
  </div>
</div>
<div id="sibling"></div>

P.S.使用类而不是id

e7arh2l6

e7arh2l62#

您的#child2保证金将随parent保证金一起折叠。由于您的parent保证金是2个中最大的,因此忽略了#child2的保证金。
保证金崩溃有点棘手,你可以在这里找到详细的解释:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_box_model/Mastering_margin_collapsing
我的猜测是,崩溃的发生是因为你的父母和你的后代之间没有内容,即。你可以通过添加填充,边框等来阻止它。例如child1child2
也就是说,用anothe rmargin“取消”一个保证金听起来像是一个黑客,它肯定会使你的代码可读性降低。我不知道你的具体使用情况,但我会考虑替代品。

相关问题