外边距合并与BFC

外边距合并##

块级元素的 上外边距(margin-top
) 与 下外边距(margin-bottom
) 有时会合并(塌陷)为单个外边距,这样的现象称之为 外边距合并(塌陷)。

下面三种基本情形会出现外边距塌陷:

毗邻兄弟元素######

毗邻的两个兄弟元素之间的外边距会塌陷(当后者被 清除浮动 时除外)。

<p style="margin-bottom: 30px;">这个段落的下外边距被合并...</p>
<p style="margin-top: 20px;">...这个段落的上外边距被合并。</p>
块级父元素与其第一个/最后一个子元素######

如果块级父元素中,不存在上边框上内补inline content清除浮动这四条属性(对于上边框和上内补,也可以说,当上边距及上内补宽度为0时),那么这个块级元素和其第一个子元素的上边距就可以说”挨到了一起“。此时这个块级父元素和其第一个子元素就会发生上外边距合并 现象,换句话说,此时这个父元素对外展现出来的外边距将直接变成这个父元素和其第一个子元素的margin-top的较大者。
类似的,若块级父元素的 margin-bottom 与它的最后一个子元素的margin-bottom 之间没有父元素的 border
padding
inline contentheight 分隔时,就会发生 下外边距合并 现象。
空块元素
如果存在一个空的块级元素,其 borderpadding
)、inline content
heightmin-height 都不存在。那么此时它的上下边距中间将没有任何阻隔,此时它的上下外边距将会合并。例如:

<div style="margin-top: 20px; margin-bottom: 20px;"></div>s

简单的说:垂直方向上两个相邻的(在同一个 块级格式化上下文 中) 外边距 会发生合并,合并后的外边距是两者中的较大者。在负外边距的情况下,合并后的外边距为最大正外边距与最小负外边距之和。


BFC##

块格式化上下文(block formatting context) 是页面 CSS 视觉渲染(visual CSS rendering)这个过程中的一个概念。它是决定块盒子的布局及浮动元素相互影响的一个因素。

下列情况将创建一个块格式化上下文:######
  • 根元素或其它包含它的元素
  • 浮动 (元素的 float 不为 none)
  • 绝对定位元素 (元素的 position 为 absolute 或 fixed)
  • 行内块 inline-blocks (元素的 display: inline-block)
  • 表格单元格 (元素的 display: table-cell,HTML表格单元格默认属性)
  • 表格标题 (元素的 display: table-caption, HTML表格标题默认属性)
  • overflow 的值不为 visible的元素
  • 弹性盒子 flex boxes (元素的 display: flex 或 inline-flex)

块格式化上下文包括了创建该上下文的元素的所有子元素,但不包括创建了新的块格式化上下文的子元素。

块格式化上下文定位清除浮动 很重要。定位和清除浮动的样式规则只适用于处于同一块格式化上下文内的元素。浮动不会影响其它块格式化上下文中元素的布局,并且清除浮动只能清除 同一块格式化上下文中 在它前面的元素的浮动。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,696评论 1 92
  • 1.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例 概念:在CSS当...
    饥人谷_任磊阅读 4,082评论 0 3
  • 1. 在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例 外边距合并:外...
    进击的阿群阅读 4,583评论 1 2
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 4,574评论 0 2
  • 一、在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例 在CSS当中,相...
    dengpan阅读 3,772评论 0 0

友情链接更多精彩内容