CSS 边距折叠

Posted

技术标签:

【中文标题】CSS 边距折叠【英文标题】:CSS Margin Collapsing 【发布时间】:2010-09-11 06:51:12 【问题描述】:

所以本质上,当您没有为给定的 div 元素设置任何边距、填充或边框时,边距折叠会发生吗?

【问题讨论】:

【参考方案1】:

“折叠边距表示两个或多个框(可能彼此相邻或嵌套)的相邻边距(没有非空内容、填充或边界区域或间隙将它们分开)组合成一个单一的边距。”

来源:Box Model - 8.3.1 Collapsing margins

【讨论】:

【参考方案2】:

没有。当您有两个相邻的垂直边距时,使用两者中较大的一个,而忽略另一个。

因此,例如,如果您有两个块显示元素 A,然后是 B,并且 A 的下边距为 3em,而 B 的上边距为 2em,那么它们之间的距离将是 3em。

如果您设置边框或填充,这可以防止发生折叠。在上面的例子中,两个元素之间的距离将是 5em。

如果您不设置任何边距,则不会有任何边距可折叠。它与使用的元素类型没有任何关系 - 它适用于所有元素类型,而不仅仅是 <div> 元素。

阅读the CSS 2.1 specification了解更多详情。

【讨论】:

将支持答案,给出一些更改: 1. 在“3em/2em”示例中,您可能希望使用绝对单位;在这种情况下,2em /可能/大于 3em 2。“如果你设置边框或填充......” - 这仅在某些情况下是正确的,而不是在标准 'A 后接 B' 一个跨度> 3. “如果你不设置任何...”通常适用于 DIV,但默认情况下,边距折叠会影响大多数元素 +1 - 好答案。此外,当元素浮动、绝对定位或内联块时,不会发生边距折叠。更多信息:reference.sitepoint.com/css/collapsingmargins @steve.hanson ...或者有overflow: hidden 这仅在它们彼此跟随时才成立,但不是真的,如果您在一个没有边距(0em)的元素中有一个边距为2em的块元素,那么边距为内部块元素仍然是 0em。因此,它并不总是两者中的较大者。示例:jsfiddle.net/56maenuL

以上是关于CSS 边距折叠的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让 CSS 边距通过字段集边界折叠?

CSS边距不折叠

CSS 中引入边距折叠规则的原因是啥?

需要:CSS 网格系统和折叠边距

CSS CSS可折叠边距修复(margin-top)

折叠宽度高度和边距对于块级元素意味着啥?