当前位置: 首页 > news >正文

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里面→两两互不影响

<!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,是由最顶层的块上边缘和最底层块盒子的下边缘之间的距离
  • 如果有绝对定位元素,将被忽略
  • 如果有浮动元素,那么增加高度以包括这些浮动元素的下边缘
<!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>

相关文章:

  • uniapp上传图片时(可选微信头像、相册、拍照)
  • 基于Canal+Spring Boot+Kafka的MySQL数据变更实时监听实战指南
  • ETL数据集成平台在电商行业五大应用场景
  • 阅读分析Linux0.11 /boot/head.s
  • kotlin + spirngboot3 + spring security6 配置登录与JWT
  • Java如何在遍历集合时删除特定元素
  • 【Pandas】pandas DataFrame get
  • 2025.04.17【Stacked area】| 生信数据可视化:堆叠区域图深度解析
  • 国内外汽车行业供应链导入EDI方式的差异
  • UE5 UE循环体里怎么写延迟
  • Vue 和 Spring boot 和 Bean 不同生命周期
  • Oracle测试题目及笔记(多选)
  • OpenAI发布GPT-4.1系列模型,主打编程能力提升
  • 泛型算法——只读算法(一)
  • Oracle 处理“不允许长度为0的列”(ORA-01723)问题解析
  • Oracle_00000
  • Spring Boot 学习总结(35)—— 使用 SpringAI 实现 MCP 服务并与 Qwen 集成使用?
  • 图形变换算法
  • 通过gird布局实现div的响应式分布排列
  • 生物信息学技能树(Bioinformatics)与学习路径
  • 马上评|“为偶像正名”的正确做法是什么
  • 赖清德为“临阵脱逃”作准备,国台办:绝不会任“台独”祸首逍遥法外
  • 外交部:正确认识和对待历史是检验日本能否恪守和平发展承诺的重要标准
  • 从普通人经历中发现历史,王笛解读《线索与痕迹》
  • 美英贸易协议|不,这不是一份重大贸易协议
  • 教育部:启动实施县中头雁教师岗位计划,支撑县中全面振兴