css - 为什么底部边距在按钮的元素框内而不是 p 元素?

标签 css

为什么为 p 元素添加底部边距会增加元素框之外的空间(不受 CSS 中背景颜色设置的影响),但反之亦然(边距保持彩色)为按钮添加底部边距时? (我通过仅使用填充并将 p 元素的边距设置为 0 来解决此问题,所以我只是出于好奇才问。)

这个 CSS:

.about p {
  padding: 0 4em 2em 4em;
  margin: 0 0 2em 0;
  text-align: left;
}

button {
  margin-top: 1em;
  margin-bottom: 2em;
}

结果(注意“PORTFOLIO”部分上方的空白区域,但不在底部按钮下方):

margins

要查看我的其余代码,请查看 CodePen .

最佳答案

我似乎找不到任何合适的问题来将其作为副本来关闭,所以这里有一个答案。

在 p 的情况下,你是 margin 崩溃的受害者。
请参阅此示例。外部元素有黄色背景,你会希望在 p 后面看到它(上方和下方),但它“继承”了 p 的边距,所以你看到的是主体的白色背景。

.outer {
  background: yellow;
}

.inner {
  background: lime;
  margin: 2em 0;
}
<div class="outer">
  <p class="inner">two block elements</p>
</div>

但是,您示例中的按钮不是 block 元素。默认情况下,它具有 display:inline-block,因此不会发生边距折叠并且外部 div 的背景在其周围可见。

.outer {
  background: yellow;
}

.inner {
  background: lime;
  margin: 2em 0;
}
<div class="outer">
  <button class="inner">inline-block in a block</button>
</div>

有关详细信息,请参阅 Mastering margin collapsing在 MDN 上。

关于css - 为什么底部边距在按钮的元素框内而不是 p 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49869749/

相关文章:

html - Foundation CSS 与菜单冲突

html - Bootstrap 中的响应式可滚动框架

css - 使用 Flexbox 的居中、等宽、分栏元素

jquery - 自定义分享按钮,需要将图标字体替换为图片

javascript - jQuery 关闭屏幕导航

background - 如何在CSS中应用渐变色?

html - width : 100% on table-cell work?怎么算

CSS:使用 ID 选择第 n 个元素?

Javascript 根据浏览器大小将 CSS 左值从 px 更改为 %

html - Chrome 不一致渲染元素有偏移