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

css2-BFC是什么?

1、BFC是什么?
在页面布局时,经常会出现以下几种情况:
这个元素高度怎末没了?
这两栏布局怎末没法自适应?
这两个元素的间距怎末有点奇怪的样子?

原因就是元素之间互相影响,导致了意料之外的情况,这里就涉及到了BFC的概念。
BFC(Block Formatting Context),即块级格式化上下文,它是页面的一块渲染区域,并且有自己的一套属于自己的渲染规则:
内部的盒子会在垂直方向上一个接一个的放置。
对于同一个BFC的两个相邻的盒子的margin会发成重叠,与方向无关。
每个元素的左外边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此。
BFC的区域不会与float的元素区域重叠
计算BFC的高度时,浮动子元素也参与计算。
BFC就是页面的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之,亦然。
BFC目的是形成一个相对于外界完全独立的空间,让内部的子元素不会影响到外部的元素。

2、触发元素
触发BFC的条件包含但不限于:
根元素:即HTML元素
浮动元素:float值为left、right
overflow值不为visible,为auto,scroll,hidden
display的值为inline-block,inltable-cell,table-caption,table,inline-table,flex,inline-flex,grid、inline-grid
position的值为absolute或fixed

3、应用场景
利用BFC的特性,我们将BFC应用在以下场景
3.1、防止margin重叠(塌陷)
在这里插入图片描述
在这里插入图片描述
两个p元素之间的距离为100px,发生了margin重叠(塌陷),以最大的为准,如果第一个p的margin为80的话,两个p之间的距离是100,以最大的为准。
前面讲到,同一个BFC的两个相邻的盒子的margin会发生重叠。
可以在p外面包裹一层容器,并触发这个容器生成一个BFC,那么两个p就不属于同一个BFC,则不会出现margin重叠
在这里插入图片描述
这个时候,边距则不会重叠

在这里插入图片描述
清楚内部浮动:
在这里插入图片描述
在这里插入图片描述
而BFC在计算高度时,浮动元素也会参与,所以可以触发.par元素生成BFC,则内部浮动元素计算高度时候也会计算。
在这里插入图片描述
实现效果如下:在这里插入图片描述
自适应多栏布局:
在这里插入图片描述
效果如下:
在这里插入图片描述
前面讲到,每个元素的左外边距与包含块的左边界相接触。
因为,虽然.aslide为浮动元素,但是main的左边依然会与包含块的左边相接触。
而BFC的区域不会与浮动盒子重叠。
所以可以通过触发main生成BFC,以此适应两栏布局。
在这里插入图片描述
这时候,新的BFC不会与浮动的.aside元素重叠,因此会根据包含块的宽度,和.aside的宽度,自动变窄。效果如下:
在这里插入图片描述

http://www.lryc.cn/news/112674.html

相关文章:

  • Flutter Dart语言(04)库操作
  • 通向架构师的道路之漫谈使用ThreadLocal改进你的层次的划分
  • springboot全局统一返回处理
  • C/C++面试经历(一)
  • 【PostgreSQL】系列之 一 用户创建和授权(三)
  • Python连接Hive实例教程
  • Jest和Mocha对比:两者之间有哪些区别?
  • Oracle:merge into用法
  • 【数据结构OJ题】消失的数字
  • linux 隔离内核
  • IO学习-有名管道
  • 小研究 - 基于 SpringBoot 微服务架构下前后端分离的 MVVM 模型(三)
  • 应用在多媒体手机中的低功率立体声编解码器
  • Teams Room视频会议室方案
  • C# 委托、事件、特性程序
  • MapTR论文笔记
  • JS进阶-Day4
  • 【C语言】初阶完结练习题
  • c++类与对象详解
  • I/O 函数/缓存和字节流、占位符、getchar(),putchar()
  • MySQL日期常见的函数
  • Python获取CPU温度
  • 后端整理(MySql)
  • HashSet的详细介绍
  • 【SCI征稿】JCR1区,中科院2区,有关大数据、人工智能、机器学习的应用研究均可
  • 【UE】AI导航,多个导航物体无法走到同一终点问题
  • 途游游戏 x 极狐GitLab “通关” DevOps :单元测试从无到优,覆盖率 0→80%
  • 【云原生】Docker-Compose全方面学习
  • 基于 Redux + TypeScript 实现强类型检查和对 Json 的数据清理
  • HIVE语法优化之Join优化