css外边距合并和BFC

css外边距合并和BFC

外边距合并是一个CSS现象,当两个或多个垂直外边距相遇时,它们会合并成一个单一边距。这个单一外边距的大小是原来外边距中最大的那个。

  • 块级元素的垂直外边距在普通文档流中会发生合并。
  • 水平外边距不会合并。
  • 清除浮动或创建BFC(Block Formatting Context)可以防止外边距合并。

如何避免外边距合并

改变元素的display属性为inline-blockfloat元素或者positionabsolutefixed,可以防止外边距合并。还可以创建一个新的BFC来避免合并。

BFC

BFC(Block Formatting Context)是Web页面的可视化CSS渲染的一部分,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。在某些情况下,创建BFC可以防止外边距合并。

触发BFC的条件:

  1. 浮动元素(元素的 float 不是 none)。
  2. 绝对定位元素(元素的 positionabsolutefixed)。
  3. 行内块元素(元素的 displayinline-block)。
  4. overflow 值不为 visible 的块元素。
  5. 弹性元素(displayflexinline-flex 元素的直接子元素)。
  6. 网格元素(displaygridinline-grid 元素的直接子元素)。

举例子1

<div class="first-box">第一个盒子</div>
<div class="second-box">第二个盒子</div>
.first-box {
    width: 200px;
    height: 100px;
    background-color: lightblue;
    margin-bottom: 50px; /* 下外边距 */
}

.second-box {
    width: 200px;
    height: 100px;
    background-color: lightcoral;
    margin-top: 30px; /* 上外边距 */
    overflow: hidden; /* 触发BFC */
}

虽然 second-box触发了BFC,但是外边距还是合并了。

这是因为,即使一个元素形成了BFC,它的顶部外边距仍然可能与其前一个兄弟元素的底部外边距发生合并。要防止相邻元素之间的外边距合并,我们需要在两者之间添加一个分隔,使得两个相邻的块级元素不直接相邻,或者确保其中一个元素的外边距不参与合并。

<div class="first-box">第一个盒子</div>
<div class="bfc-wrapper">
  <div class="second-box">第二个盒子</div>
</div>
.first-box {
    width: 200px;
    height: 100px;
    background-color: lightblue;
    margin-bottom: 50px; /* 下外边距 */
}

.bfc-wrapper {
    overflow: hidden; /* 触发BFC */
}

.second-box {
    width: 200px;
    height: 100px;
    background-color: lightcoral;
    margin-top: 30px; /* 上外边距 */
}

举例子2

在CSS中,即使元素形成了BFC,它的顶部外边距仍然可能与其前一个兄弟元素的底部外边距发生合并。为了防止相邻元素之间的外边距合并,我们需要在两者之间添加一个分隔,使得两个相邻的块级元素不直接相邻,或者确保其中一个元素的外边距不参与合并。

<div class="first-box">第一个盒子</div>
<div class="separator"></div>
<div class="second-box">第二个盒子</div>
.first-box {
    width: 200px;
    height: 100px;
    background-color: lightblue;
    margin-bottom: 50px;
}

.separator {
    overflow: hidden; /* 触发BFC */
    width: 100%; /* 占满容器宽度 */
    height: 0; /* 不占空间 */
}

.second-box {
    width: 200px;
    height: 100px;
    background-color: lightcoral;
    margin-top: 30px;
}

相关推荐

  1. css外边合并BFC

    2024-04-09 00:04:02       13 阅读
  2. CSS外边重叠:原理、结果

    2024-04-09 00:04:02       29 阅读
  3. 表格如何让表格内边外边重叠

    2024-04-09 00:04:02       41 阅读
  4. <span style='color:red;'>CSS</span>:<span style='color:red;'>BFC</span>

    CSSBFC

    2024-04-09 00:04:02      25 阅读
  5. css的接触

    2024-04-09 00:04:02       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 00:04:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 00:04:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 00:04:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 00:04:02       18 阅读

热门阅读

  1. Leetcode 8. 字符串转换整数 (atoi)

    2024-04-09 00:04:02       13 阅读
  2. 蓝桥杯嵌入式之模块驱动

    2024-04-09 00:04:02       14 阅读
  3. 线程同步的四项原则

    2024-04-09 00:04:02       11 阅读
  4. 解决Redission的RList查询list数据过慢的问题

    2024-04-09 00:04:02       14 阅读
  5. 自动导入和注册在当前目录下的所有自定义指令

    2024-04-09 00:04:02       11 阅读
  6. meshgrid如何生成网格

    2024-04-09 00:04:02       10 阅读
  7. Python 描述符

    2024-04-09 00:04:02       13 阅读
  8. 常用启发式算法简介:从迷宫到机器学习

    2024-04-09 00:04:02       14 阅读
  9. SPMI 协议简介

    2024-04-09 00:04:02       13 阅读
  10. C++递推算法

    2024-04-09 00:04:02       15 阅读
  11. 网络通信的隐形护卫

    2024-04-09 00:04:02       14 阅读