BFC IFC GFC FFC的理解

html-css064

BFC IFC GFC FFC的理解,第1张

FC:formatting context 格式化上下文。

css2.1定义了 BFC 块级格式化上下文 + IFC 行内格式化上下文。

css3新定义了 GFC网格布局格式化上下文 + FFC 自适应格式化上下文。

其实就是对于块级盒模型、行内盒模型的一些渲染规则的定义,决定了元素如何排列、相互影响等。

BFC规定:浮动元素与生成BFC的元素不互相覆盖,所以可以用来进行多列布局,如:左右两列分别左右浮动,中间的内容区自适应。

子元素浮动,父元素设置overflow:hidden的原理是:通过设置overflow:hidden,触发父元素生成BFC块(渲染规则规定:BFC块之间外边距不互相重叠),在计算高度时包含浮动子元素。

GFC:是针对那些display:grid的元素的渲染规则。

网格布局并没有flex布局应用的广泛,flex相对常用一些,但是用grid实现多行布局,更加好理解。

FFC:是针对display:flex的元素的渲染规则(流式布局,自适应伸缩)。

参考文章:

http://www.cnblogs.com/dingyufenglian/p/4845477.html

参考链接: juejin.im/post/5e8d52…

animation、transition、transform、translate 这几个属性要搞清楚:

水平居中:

垂直居中

BFC 是块级格式上下文,IFC 是行内格式上下文:

不会,因为 BFC 是页面中一个独立的隔离容器,其内部的元素不会与外部的元素相互影响,比如两个 div,上面的 div 设置了 float,那么如果下面的元素不是 BFC,也没有设置 float,会形成对上面的元素进行包裹内容的情况,如果设置了下面元素为 overflow:hidden;属性那么就能够实现经典的两列布局,左边内容固定宽度,右边因为是 BFC 所以会进行自适应。

box-sizing 属性可以被用来调整这些表现:

BFC(Block Formatting Context)格式化上下文,是 Web 页面中盒模型布局的 CSS 渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。

五种:

BFC 的特性:

CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括: 外边距(margin) 、 边框(border) 、 内边距(padding) 、 实际内容(content) 四个属性。 CSS盒模型: 标准模型 + IE模型

标准盒子模型:宽度=内容的宽度(content)+ border + padding

低版本IE盒子模型:宽度=内容宽度(content+border+padding),如何设置成 IE 盒子模型:

static:无特殊定位,对象遵循正常文档流。top,right,bottom,left等属性不会被应用。 relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。 absolute:对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。 fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性定义。 sticky:具体是类似 relative 和 fixed,在 viewport 视口滚动到阈值之前应用 relative,滚动到阈值之后应用 fixed 布局,由 top 决定。

问:为什么会有这种现象?你能解释一下吗

是由块级格式上下文决定的,BFC,元素在 BFC 中会进行上下排列,然后垂直距离由 margin 决定,并且会发生重叠,具体表现为同正取最大的,同负取绝对值最大的,一正一负,相加

BFC 是页面中一个独立的隔离容器,内部的子元素不会影响到外部的元素。

不清楚浮动会发生高度塌陷:浮动元素父元素高度自适应(父元素不写高度时,子元素写了浮动后,父元素会发生高度塌陷)

了解更多加入我们前端学习圈

最近无意间看到很多文章写overflow: hidden可以清除浮动,但大多并没有说明其原理。这里就介绍一下BFC。平时会利用BFC解决一些如清浮动,防止 margin 重叠等问题,但是BFC具体是什么,就感觉只可意会不可言传了,于是特地花了半天时间,查阅了一些资料和文章,记录一下自己的学习过程(其实在 《CSS盒子模型》 一文中已经提及一些知识,为了方便,这里特地重新开一篇文章,方便以后查阅)。

BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

Box 是 CSS 布局的对象和基本单位,一个页面是由很多个 Box 组成的。元素的类型和 display 属性,决定了这个 Box 的类型。 不同类型的 Box, 会参与不同的 Formatting Context(一个决定如何渲染文档的容器),因此Box内的元素会以不同的方式渲染。让我们看看有哪些盒子:

block-level box:display 属性为 block, list-item, table 的元素,会生成 block-level box。并且参与 block fomatting context;

inline-level box:display 属性为 inline, inline-block, inline-table 的元素,会生成 inline-level box。并且参与 inline formatting context;

Formatting context 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。最常见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC)。

1.根元素

2.float属性不为none

3.position为absolute或fixed

4.display为inline-block, table-cell, table-caption, flex, inline-flex

5.overflow不为visible

根据第二部分的BFC布局规则第四个,我们只要让child2成为BCF就可以和child1不重叠;再根据第三部分生成BFC的元素的条件,可以为child2设置 display也可以设置overflow等等,可以达到如下图效果

达到了我们希望的自适应两栏布局。

到这里应该知道为什么overflow: hidden可以清除浮动;

第二本部分BFC布局规则第六:计算BFC的高度时,浮动元素也参与计算;

第三部分生成BFC的元素的条件第五:overflow不为visible。

具体例子可以参考我的这篇 《常见的清除浮动方法》 。

根据BFC布局规则第二:Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。让child2和child3为不同的BFC的box就不会重叠了。

其实以上的几个例子都体现了BFC布局规则第五条:BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。