BFC详解

1.定义:

FC的全称为Formatting Conttext,元素在标准流里面

块级元素的布局属于Block Formatting Context(BFC )------即block level box都是BFC中布局

行内级元素的布局属于Inline Formatting Context (IFC)

2.那么在哪些情况下会创建BFC?

  • 根元素(<html>)
  • 浮动元素(元素的float不是none)
  • 绝对定位元素(元素的position为absolute或fixed)
  • 行内块元素(元素的display为inline-block)
  • overflow计算值(Computed)不为visible的块元素
  • 弹性元素(display为flex或inline-flex元素的直接子元素)

3.BFC特点:

  • 在BFC中,box会在垂直方向上一个挨着一个的排布
  • 垂直方向的间距由margin属性决定
  • 在同一个BFC,相邻两个box之间的margin会折叠
  • 在BFC中,每个元素的左边缘是紧挨着包含块的左边缘的

4.BFC作用:

  • 解决边距重叠问题
  • 解决高度塌陷问题

5.BFC如何解决边距重叠问题?

给box1的父盒子设置一个overflow: auto;box1在container的BFC里面,box2还在html的BFC里面→两两互不影响

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .container {
      overflow: auto;
    }
    .box1 {
      width: 500px;
      height: 200px;
      background-color: #582a2a;
      margin-bottom: 20px;
    }
    .box2{
      width: 500px;
      height: 200px;
      background-color: #582a2a;
      margin-top: 10px;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="box1"></div>
  </div>
  <div class="box2"></div>
</body>
</html>

6.BFC如何解决高度塌陷问题?

(1)BFC解决高度塌陷需要满足两个条件:

  • 浮动元素的父元素触发BFC,形成独立的块级格式化上下文
  • 浮动元素的父元素的高度是auto

(2)BFC高度是auto的情况下,如何计算高度?

  • 如果是inline-level,是行高的顶部和底部的距离
  • 如果有block-level,是由最顶层的块上边缘和最底层块盒子的下边缘之间的距离
  • 如果有绝对定位元素,将被忽略
  • 如果有浮动元素,那么增加高度以包括这些浮动元素的下边缘
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .container {
      background-color:pink;
      /* 触发BFC */
      overflow: auto;
    }
    .item{
      width: 500px;
      height: 200px;
      border: 1px solid #000;
      float: left;
      background-color: #ff0;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
  </div>
</body>
</html>
相关推荐
子兮曰17 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰17 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万17 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝17 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋18 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁18 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王952720 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大20 小时前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师20 小时前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学21 小时前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端