目录

一. BFC基本慨念

二. BFC渲染规则

三. 如何创建BFC元素


一. BFC基本慨念

一个块格式化上下文(block formatting context) 是Web页面的可视化CSS渲染出的一部分。它是块级盒布局出现的区域,也是浮动层元素进行交互的区域。

网页是一个一个盒子组成的,而BFC就是一种css盒模型的渲染规则。

  • CSS盒模型:链接暂无

二. BFC渲染规则

  • 以下列举一些比较重要的规则:
  1. 根元素<html>是一个BFC元素。
  2. 在同一个BFC元素中,相邻盒子垂直方向上的margin会发生折叠,取较大的margin值。
  3. BFC元素是一个独立的容器,外部元素和内部元素互不影响。
  4. BFC的区域不会与浮动盒子产生交集,而是紧贴浮动边缘。
  5. 计算BFC的高度时,自然也会检测浮动或者定位的盒子高度。
  6. BFC元素不再和其子元素发生 margin 折叠。
  • 了解上面的规则后,我们就能解释平时会遇到的一些css奇怪现象:

1. 垂直方向上元素margin的合并现象

首先,两个父子关系的div,给子元素添加一个margin-top: 100px后,父元素和子元素同时下移100px。

示例如下:

代码如下:

<style>.parent {width: 200px;height: 200px;background: blue;}.child {width: 100px;height: 100px;background: yellow;margin-top: 100px;}
</style><body><div class="parent"><div class="child"></div></div>
</body>

原因:规则1和规则2


2. 垂直方向上元素margin的合并现象

两个相邻的div之间分别设置了margin-bottom: 60px和margin-top: 40px,而他们实际的间距只有60px。

示例如下:

代码如下 :

<style>.box1 {width: 200px;height: 100px;background: blue;margin-bottom: 60px;}.box2 {width: 200px;height: 100px;background: yellow;margin-top: 40px;}
</style><body><div class="box1"></div><div class="box2"></div>
</body>

原因:规则1和规则2


3. overflow:hidden可以清除浮动

本文中所有的“清除浮动"均指清除浮动造成的副作用

首先,两个父子关系的div,给子元素添加float: left后,子元素脱离的文档流,于是父元素的高度为0,如下图:

然后父元素添加 overflow: hidden 就可以清除浮动,如下图:

代码如下:

<style>.parent {width: 200px;border: 4px solid red;overflow: hidden;}.child {width: 100px;height: 100px;background: yellow;float: left;}
</style><body><div class="parent"><div class="child"></div></div>
</body>

原因:规则1和规则5


4. overflow:hidden 配合浮动,可以实现自适应布局

首先,两个兄弟关系的div在同一个父div中,给子元素1添加float: left后,于是父元素高度由子元素2撑起,子元素2占据所有父元素,子元素1脱离的文档流,如下图:

然后子元素2添加overflow: hidden 后,其紧贴子元素1边缘,不再占据整个父元素,如下图:

代码如下:

<style>.parent {width: 100%;border: 4px solid red;}.box1 {width: 100px;height: 100px;background: blue;float: left;}.box2 {height: 100px;background: yellow;overflow: hidden;}
</style><body><div class="parent"><div class="box1"></div><div class="box2"></div></div>
</body>

原因:规则1和规则4


三. 如何创建BFC元素

根元素<html>就是最大的BFC容器。

创建BFC元素的方式很多,常见包括:

  • 根元素或其它包含它的元素
  • 浮动元素 (元素的 float 不是 none)
  • 绝对定位元素 (元素具有 position 为 absolute 或 fixed)
  • 内联块 (元素具有 display: inline-block)
  • 表格单元格 (元素具有 display: table-cell,HTML表格单元格默认属性)
  • 表格标题 (元素具有 display: table-caption, HTML表格标题默认属性)
  • 具有overflow 且值不是 visible 的块元素,
  • display: flow-root
  • column-span: all 应当总是会创建一个新的格式化上下文,即便具有 column-span: all 的元素并不被包裹在一个多列容器中。
  • 一个块格式化上下文包括创建它的元素内部所有内容,除了被包含于创建新的块级格式化上下文的后代元素内的元素。

其中常见的还是overflow : hidden产生的。

盒模型BFC渲染机制相关推荐

  1. CSS之盒模型(九)

    CSS 盒模型 1.盒子模型简介 2.盒子模型属性 2.1.width和height属性 2.2.border边框属性 2.3.padding内边距 2.4.margin外边距 2.5.盒子模型占位计 ...

  2. CSS-0816盒模型 标准盒模型怪异盒模型及其应用背景属性补充小图标使用图标网站可变化单位meta元信息浏览器内核(渲染机制)响应式页面 媒体类型媒体特性opacity和背景色设置透明的区别

    title: "CSS 0816" date: 2022-08-16T11:18:25+08:00 文章目录 title: "CSS 0816" date: 2 ...

  3. 深入理解盒子模型——CSS视觉格式化模型|盒模型|定位方案|BFC

    视觉格式化模型 页面(文档树)可以想象成是由一个个的Box组合而成的,而视觉格式化模型(Visual formatting model)是一套规则,将这些框布局成访问者看到的样子. 哪些因素控制了这些 ...

  4. 简要介绍css的盒模型,CSS盒模型的介绍

    CSS盒模型的概念与分类 CSS盒模型就是一个盒子,封装周围的HTML元素,它包括内容content.边框border.内边距padding.外边距margin. CSS盒模型分为标准模型和IE模型: ...

  5. android 重绘如何能不闪一下屏幕_浏览器渲染机制——重绘重排

    性能优化中,减少重绘重排应该是一种很好的优化方式,我们具体看一下什么情况下会造成重绘重排,为什么减少重绘重排可以做到优化,怎么样减少重绘重排. 浏览器渲染过程 我们先看看当浏览器拿到服务端返回的资源时 ...

  6. CSS基础必备盒模型及清除浮动

    盒模型 盒模型是有两种标准的,一个是标准模型,一个是IE模型. css如何设置两种模型 这里用到了CSS3 的属性 box-sizing /* 标准模型 */ box-sizing:content-b ...

  7. 从架构到源码:一文了解Flutter渲染机制

    简介:Flutter从本质上来讲还是一个UI框架,它解决的是一套代码在多端渲染的问题.在渲染管线的设计上更加精简,加上自建渲染引擎,相比ReactNative.Weex以及WebView等方案,具有更 ...

  8. 深入理解CSS盒模型 - 程序猿的程 - 博客园

    深入理解CSS盒模型 本文是学习中传思客在慕课网开的课程<前端跳槽面试必备技巧>的学习笔记.课程地址:https://coding.imooc.com/class/evaluation/1 ...

  9. 深入css布局 (1) — 盒模型 元素分类

    深入css布局(1)-- 盒模型 & 元素分类     " 在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深 ...

最新文章

  1. 【Spark篇】---SparkStream初始与应用
  2. Android WebView使用
  3. 哈哈,终于想着注册博客了
  4. c# getresponsestream返回byte[]_C++模版和C#范型求同存异录(一)sizeof(T)
  5. 2021总结-》2022年
  6. 大数据项目实战数仓4——常用脚本
  7. 抓包工具_Charles使用
  8. Android快速转战Kotlin教程
  9. python 删除指定目录_删除Python中除一个子目录外的目录
  10. *新手看php手册的正确姿势
  11. bag java_Bag.java · linbo/Bag_Queue_Stack_Java - Gitee.com
  12. 《商君列传第八》–读书总结
  13. sem_wait和sem_post
  14. 甲方和大厂外包,哪个更好?这是最醍醐灌顶的回答
  15. windows网络适配器 黄色下三角
  16. excel在每行下面添加插入指定行数的空白行方法步骤
  17. java IP转换为国家省份城市
  18. windows计划任务执行powershell脚本
  19. STM32学习记录:输入捕获应用
  20. 当渠道需要在Application中调用有参方法

热门文章

  1. Android 12.0Camera2 静音时拍照去掉快门声音
  2. chcon mysql_Linux中的SELinux与chcon以及Samba实现【转】
  3. [Android] AS 中 Gradle 配置运行浅析
  4. [教程] [Matplotlib] 生成背景透明的图片
  5. 设计师必备的PNG免抠素材网站,告别PS手动抠图~
  6. SQL server 常用的数据库 DDL语言
  7. freenas mysql_FreeNas安装PHP5+mySQL5.5
  8. Windows系统下Jenkins安装、配置和使用
  9. Nanoprobes 艾美捷DPPE-NANOGOLD使用说明
  10. 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。