小编典典

子元素的边距移动父元素

all

我有一个div )包含另一个div )。Parent 是第一个body没有特定 CSS 样式的元素。当我设置

.child
{
    margin-top: 10px;
}

最终结果是我孩子的顶部仍然与父母对齐。我的父母没有将孩子向下移动 10 像素,而是向下移动了 10 像素。

DOCTYPE的设置为XHTML Transitional.

我在这里想念什么?

编辑 1
我的父母需要有严格定义的尺寸,因为它有一个必须从上到下显示的背景(像素完美)。所以在它上面设置垂直边距是 不行 的。

编辑 2
这种行为在 FF、IE 和 CR 上是相同的。


阅读 92

收藏
2022-03-14

共1个答案

小编典典

在具有 DIV 内边距的子元素中找到了替代方法您还可以添加:

.parent { overflow: auto; }

要么:

.parent { overflow: hidden; }

这可以防止边距塌陷。边框和填充做同样的事情。因此,您还可以使用以下方法来防止上边距崩溃:

.parent {
    padding-top: 1px;
    margin-top: -1px;
}

2021 年更新:如果您愿意放弃对 IE11 的支持,您也可以使用新的 CSS
构造display: flow-root。有关块格式化上下文的全部详细信息,请参阅MDN Web
文档


应大众要求更新: 折叠边距的全部意义在于处理文本内容。例如:

h1, h2, p, ul {
  margin-top: 1em;
  margin-bottom: 1em;
  outline: 1px dashed blue;
}

div { outline: 1px solid red; }


<h1>Title!</h1>
<div class="text">
  <h2>Title!</h2>
  <p>Paragraph</p>
</div>
<div class="text">
  <h2>Title!</h2>
  <p>Paragraph</p>
  <ul>
    <li>list item</li>
  </ul>
</div>

因为浏览器会折叠边距,所以文本会按照您的预期显示,并且<div>包装标签不会影响边距。每个元素确保它周围有间距,但间距不会加倍。<h2>和的边距<p>不会相加,而是相互滑入(它们折叠)。and元素<p>也是如此。<ul>

可悲的是,对于现代设计,当您明确想要一个容器时,这个想法可能会咬住您。这在 CSS
speak中称为新的块格式化上下文。overflowor 保证金技巧会给你。

2022-03-14