在描述他们之间的区别之前,我们首先要了解一下什么是 BFC、IFC、GFC、FFC?

我们知道元素有内联元素、块级元素、行内块级元素,在页面上渲染时它们的定位,排列方式等都有所不同,就是因为它们根据内部的格式化上下文进行不同的渲染,即 BFC 和 IFC。

后面 css3 新增了 grid 布局以及 flex 布局,所以也迎来了 GFC、FFC。

BFC(Block formatting contexts):块级格式上下文

页面上的一个隔离的渲染区域,那么他是如何产生的呢?可以触发 BFC 的元素有 float、position、overflow、display:table-cell/ inline-block/table-caption ;BFC 有什么作用呢?比如说实现多栏布局

IFC(Inline formatting contexts):内联格式上下文

IFC 的 line box(线框)高度由其包含行内元素中最高的实际高度计算而来(不受到竖直方向的 padding/margin 影响)IFC 中的 line box 一般左右都贴紧整个 IFC,但是会因为 float 元素而扰乱。

float 元素会位于 IFC 与与 line box 之间,使得 line box 宽度缩短。同个 ifc 下的多个 line box 高度会不同

IFC 中时不可能有块级元素的,当插入块级元素时(如 p 中插入 div)会产生两个匿名块与 div 分隔开,即产生两个 IFC,每个 IFC 对外表现为块级元素,与 div 垂直排列。

那么 IFC 一般有什么用呢?

水平居中:当一个块要在环境中水平居中时,设置其为 inline-block 则会在外层产生 IFC,通过 text-align 则可以使其水平居中。

垂直居中:创建一个 IFC,用其中一个元素撑开父元素的高度,然后设置其 vertical-align:middle,其他行内元素则可以在此父元素下垂直居中。

GFC(GrideLayout formatting contexts):网格布局格式化上下文

当为一个元素设置 display 值为 grid 的时候,此元素将会获得一个独立的渲染区域,我们可以通过在网格容器(grid container)上定义网格定义行(grid definition rows)和网格定义列(grid definition columns)属性各在网格项目(grid item)上定义网格行(grid row)和网格列(grid columns)为每一个网格项目(grid item)定义位置和空间。

那么 GFC 有什么用呢,和 table 又有什么区别呢?首先同样是一个二维的表格,但 GridLayout 会有更加丰富的属性来控制行列,控制对齐以及更为精细的渲染语义和控制。

FFC(Flex formatting contexts):自适应格式上下文

display 值为 flex 或者 inline-flex 的元素将会生成自适应容器(flex container),可惜这个牛逼的属性只有谷歌和火狐支持,不过在移动端也足够了,至少 safari 和 chrome 还是 OK 的,毕竟这俩在移动端才是王道。Flex Box 由伸缩容器和伸缩项目组成。

通过设置元素的 display 属性为 flex 或 inline-flex 可以得到一个伸缩容器。设置为 flex 的容器被渲染为一个块级元素,而设置为 inline-flex 的容器则渲染为一个行内元素。

伸缩容器中的每一个子元素都是一个伸缩项目。伸缩项目可以是任意数量的。伸缩容器外和伸缩项目内的一切元素都不受影响。简单地说,Flexbox 定义了伸缩容器内伸缩项目该如何布局。

感谢阅读。

学习更多技能

请点击下方公众号

BFC、IFC、GFC 和 FFC 的区别?相关推荐

  1. css3中的BFC,IFC,GFC和FFC(转载)

    作者原文网址:http://www.cnblogs.com/dingyufenglian/p/4845477.html   What's FC? 一定不是KFC,FC的全称是:Formatting C ...

  2. css----BFC,IFC,GFC,FFC的区别

    FC:Formatting Contexts,是W3C CSS2.1规范中的一个概念.它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用. BFC ...

  3. 第 20 题:请描述一下 BFC、IFC、GFC 和 FFC 的区别?

    网上看了很多文章,只想说一句话:"真的啥都没看懂".以下是我个人的理解,有不对的地方可以提出. 在描述他们之间的区别之前,我们首先要了解一下什么是 BFC.IFC.GFC.FFC? ...

  4. (37) BFC IFC GFC FFC概念

    一.什么是FC? Formatting Contexts,是W3C CSS2.1规范中的一个概念.它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作 ...

  5. BFC/IFC/GFC/FFC分别是什么?

    BFC

  6. 【转】前端的BFC、IFC、GFC和FFC

    什么是BFC.IFC.GFC和FFC CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC. FC的全称是:Formatting Contexts,是W3C CSS2.1规范中的一个概念. ...

  7. BFC、IFC、GFC、FFC

    BFC.IFC.GFC.FFC CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC. 那么到底什么是BFC.IFC.GFC和FFC呢? What's FC? 一定不是KFC,FC的全称是 ...

  8. BFC、IFC、GFC、FFC概念理解、布局规则、形成方法、用处浅析

    接着聊一下BFC.IFC,与FFC.GFC,GFC是一种二维度的布局方式,现在也蛮火,但是因为兼容性问题比较大,现在用的不多.其实这些布局方式经常会遇到,主要是想了解一下相关的各种概念和术语. 想要理 ...

  9. css3之BFC、IFC、GFC和FFC

    CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC. What's FC? 一定不是KFC,FC的全称是:Formatting Contexts,是W3C CSS2.1规范中的一个概念. ...

最新文章

  1. Django-C006-第三方
  2. Java多线程闲聊(四):阻塞队列与线程池原理
  3. Slackware网卡配置文件和配置工具
  4. Linux(Ubuntu)常用命令(二)
  5. 构建可读性更高的 ASP.NET Core 路由
  6. Form验证之简单应用
  7. Java获取资源的路径
  8. iOS利用Speech Kit实现语音识别
  9. ajax调用方式汇总
  10. 利用EEPROM实现arduino的断电存储
  11. 阿里矢量图标库 - Unicode 方式使用说明(两种用法)
  12. 第八章 软件维护(1)
  13. 软件迭代测试是什么工作,快速迭代的测试人员的思考
  14. STM32 I2S学习(一)
  15. 怎么把备忘录中的视频导到手机相册里
  16. 怎样用python提取英文字母_python如何获取一次获取26个英文字母
  17. Report_Report Builder的一些基本概念(概念)
  18. 一种通过加速粒子进入其它宇宙的机器
  19. 云服务器和普通服务器主要区别有三点
  20. 中缀和后缀表达式的转换

热门文章

  1. 将wav音频文件转化为16k Hz 单通道的文件
  2. 使用正则表达式处理金额
  3. 用Assimp模型加载库加载一个Crytek的游戏孤岛危机(Crysis)中的原版纳米装(Nanosuit)
  4. Cocos Creator 新手引导制作
  5. 罗克韦尔Rockwell Automation EDI 项目
  6. 大学物理实验试卷1到8_15_试卷(光学,大学物理实验)_doc_大学课件预览_高等教育资讯网...
  7. 微星GS73VR 6RF + Linux Mint 18 + GTX1060 + CUDA8.0 + OpenCV3.0.0 + Caffe安装笔记
  8. 人人权限系统本地部署
  9. 2873-36-1,Gancidin W,CYCLO(L-LEU-L-PRO),cyclo-L-Leu-L-Pro,环(L-脯氨酰-L-亮氨酰)
  10. 新的一年里,愿你所有的愿望都能实现