BFC的概念与作用

news/2024/5/19 0:52:00 标签: BFC, maigin合并, 父元素塌陷, css

本篇详细介绍FC的概念,以及BFC的作用:

  • FC的全称是Formatting Context,元素在标准流里面都是属于一个FC的.

  • 块级元素的布局属于Block Formatting ContextBFC

-也就是block level box都是在BFC中布局的;

  • 行内级元素的布局属于Inline Formatting ContextIFC

-而inline level box都是在IFC中布局的;

哪些具体的情况下会创建BFC

 根元素(HTML)

 浮动元素(元素的 float 不是 none)

 绝对定位元素(元素的 position 为 absolute 或 fixed)

 行内块元素(元素的 display 为 inline-block)

 表格单元格(元素的 display 为 table-cell,HTML表格单元格默认为该值),表格标题(元素的 display 为 table-caption,HTML表格标题默认为该值)

 匿名表格单元格元素(元素的 display 为 table、table-row、 table-row-group、table-header-group、table-footer-group(分别是HTML table、 row、tbody、thead、tfoot 的默认属性)或 inline-table)

 overflow 计算值(Computed)不为 visible 的块元素

 弹性元素(display 为 flex 或 inline-flex 元素的直接子元素)

 网格元素(display 为 grid 或 inline-grid 元素的直接子元素)

 display 值为 flow-root 的元素

BFC的作用?

  • BFC中,box会在垂直方向上一个挨着一个的排布;

  • 垂直方向的间距由margin属性决定;

  • 在同一个BFC中,相邻两个box之间的垂直方向的margin会折叠(collapse);

  • BFC中,每个元素的左边缘是紧挨着包含块的左边缘的;

<style>
.box1{
  height: 100px;
  width: 100px;
  margin: 20px;
  background-color: #73b1ce;
}
.box2{
  height: 100px;
  width: 100px;
  margin: 10px;
  background-color: #a473ce;
}
</style>
<div class="box1"></div>
<div class="box2"></div>

box1和box2垂直方向上的margin会合并,最终的margin值会取两个margin中的较大值。在此例中,box1和box2垂直方向之间的距离为20px。

BFC的特性可以解决什么问题呢?

  • 解决margin的折叠问题;

  • 解决浮动高度塌陷问题;

BFC的作用一:解决折叠问题

那么如果我们让两个box是不同的BFC呢?那么就可以解决折叠问题。

.box1 {
  height: 200px;
  width: 400px;
  background-color: orange;
  margin-bottom: 30px;
}

.box2 {
  height: 150px;
  background-color: purple;
  margin-top: 50px;
}

<div class="container">
  <div class="box1"></div>
</div>
<div class="box2"></div>

box1属于HTML的BFC,box2属于container的BFC,不属于同一个BFC,margin不会折叠

BFC的作用二:解决浮动高度塌陷

事实上,BFC解决高度塌陷需要满足两个条件:

  • 浮动元素的父元素触发BFC,形成独立的块级格式化上下文(Block Formatting Context);

  • 浮动元素的父元素的高度是auto的;

BFC的高度是auto的情况下,是如下方法计算高度的

  • 1.如果只有inline-level,是行高的顶部和底部的距离;

  • 2.如果有block-level,是由最顶层的块上边缘(margin-top)和最底层块盒子的下边缘(margin-bottom)之间的距离

  • 3.如果有绝对定位元素,将被忽略(不计算高度);

  • 4.如果有浮动元素,那么会增加高度以包括这些浮动元素的下边缘

因此,将浮动元素的父元素触发BFC,其会增加高度以包括浮动元素的底部,达到解决父元素高度塌陷的问题。

但是,这种方式不能解决绝对定位元素的父元素塌陷问题


http://www.niftyadmin.cn/n/88739.html

相关文章

富文本编辑组件封装,tinymce、tinymce-vue

依赖&#xff1a;package.json yarn add tinymce tinymce/tinymce-vue {"dependencies": {"tinymce/tinymce-vue": "5.0.0","tinymce": "6.3.1","vue": "3.2.45",}, } 本地依赖&#xff1a; 在publ…

“办”了三年数字化活动,这家公司成为行业独角兽

疫情三年&#xff0c;竟然有公司靠办活动成为行业独角兽&#xff1f;你没听错&#xff01;持续的疫情&#xff0c;让各行各业的数字化进程大大提速&#xff0c;活动这个历史悠久的领域也不例外。在疫情期间&#xff0c;数字化深刻影响着各行业招聘、展览、发布会等多种活动&…

科技 “新贵”ChatGPT 缘何 “昙花一现” ,仅低代码风靡至今

恍惚之间&#xff0c;ChatGPT红遍全网&#xff0c;元宇宙沉入深海…… 在科技圈&#xff0c;见证了太多“昙花一现”&#xff0c;“新贵” ChatGPT 的爆火几乎复制了元宇宙的路径&#xff0c;它会步元宇宙的后尘&#xff0c;成为下一个沉入深海的工具吗&#xff1f; 不可否认的…

学了两个月的Java,最后自己什么也不会,该怎么办?

学着学着你会发现每天的知识都在更新&#xff0c;也都在遗忘&#xff0c;可能就放弃了。但是只要自己肯练&#xff0c;肯敲代码&#xff0c;学过的知识是很容易就被捡起来的。等你学透了用不了一年也可以学好 Java的运行原理&#xff1a;Java是一门编译解释型语言&#xff0c;…

【swift】swift quick start

一、常量和变量 常量let&#xff0c;变量var 也可以用于确定数组和字典的不可变和可变 二、数据类型&#xff1a; Int&#xff1a;整数类型&#xff0c;可表示有符号整数或无符号整数&#xff0c;分别使用Int和UInt表示。 Float&#xff1a;单精度浮点数类型&#xff0c;用于…

KDJB1200六相继电保护测试仪

一、概述 KDJB1200继电保护测试仪是在参照电力部颁发的《微机型继电保护试验装置技术条件(讨论稿)》的基础上&#xff0c;广泛听取用户意见&#xff0c;总结目前国内同类产品优缺点&#xff0c;充分使用现代新的的微电子技术和器件实现的一种新型小型化微机继电保护测试仪。可…

【Spring Cloud Alibaba】004-Nacos 管理界面与集群部署

【Spring Cloud Alibaba】004-Nacos 管理界面与集群部署 文章目录【Spring Cloud Alibaba】004-Nacos 管理界面与集群部署一、管理界面1、文档2、服务列表与命名空间命名空间手动创建命名空间服务列表按照命名空间分类服务详情设置永久实例设置下线二、集群部署1、Nacos 集群架…

Java开源工具库使用之httpclient

文章目录前言一、简单使用1.1 get 请求1.2 post 简单表单请求1.3 表单上传文件1.4 上传 json 数据二、高级用法2.1 超时和重试2.2 Cookie2.3 拦截器2.4 fluent API三、3.1旧版本使用3.1 Get 请求3.2 Post 请求四、异步版本使用4.1 基本请求4.2 请求流水线执行参考前言 HttpCli…