什么是格式化上下文(FC)?格式化上下文(Formatting Context),指页面中一个渲染区域,拥有一套渲染规则,它决定了其子元素如何定位,以及与其他元素的相互关系和作用,那么css布局中格式化上下文有哪些呢?下面这篇文章给大家介绍了几种格式化上下文的类型。
块级格式上下文(BFC):
什么是BFC?Block Formatting Context,块级格式化上下文,一个独立的块级渲染区域,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关。
BFC的约束规则
1、内部的BOX会在垂直方向上一个接一个的放置;
2、垂直方向上的距离由margin决定。(完整的说法是:属于同一个BFC的俩个相邻的BOX的margin会发生重叠,与方向无关。)
3、每个元素的左外边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此。(这说明BFC中的子元素不会超出它的包含块,而position为absolute的元素可以超出它的包含块边界);
4、BFC的区域不会与float的元素区域重叠;
5、计算BFC的高度时,浮动子元素也参与计算;
6、BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然;
BFC的应用
防止margin
发生重叠
防止发生因浮动导致的高度塌陷
怎么生成 BFC
float
的值不为none
;
overflow
的值不为visible
;
display
的值为inline-block
table-cell
table-caption
;
position
的值为absolute
或fixed
;
display:table也认为可以生成BFC?其实是在于Table会默认生成一个匿名的table-cell,正是这个匿名的table-cell生成了BFC。
行内格式化上下文(IFC):
什么是IFC?IFC(Inline Formatting Contexts)直译为"行内格式化上下文",IFC的line box(线框)高度由其包含行内元素中最高的实际高度计算而来(不受到竖直方向的 padding/margin 影响)
IFC有的特性
1、IFC中的line box一般左右都贴紧整个IFC,但是会因为float元素而扰乱。float元素会位于IFC与与line box之间,使得line box宽度缩短。
2、IIFC中时不可能有块级元素的,当插入块级元素时(如p中插入div)会产生两个匿名块与div分隔开,即产生两个IFC,每个IFC对外表现为块级元素,与div垂直排列。
IFC的应用
水平居中:当一个块要在环境中水平居中时,设置其为inline-block
则会在外层产生IFC
,通过text-align
则可以使其水平居中。
垂直居中:创建一个IFC
,用其中一个元素撑开父元素的高度,然后设置其vertical-align:middle
,其他行内元素则可以在此父元素下垂直居中。
网格布局格式化上下文(GFC)
GFC(GridLayout Formatting Contexts)
直译为"网格布局格式化上下文",当为一个元素设置display
值为grid
的时候,此元素将会获得一个独立的渲染区域,我们可以通过在网格容器(grid container)
上定义网格定义行(grid definition rows)
和网格定义列(grid definition columns)
属性各在网格项目(grid item)
上定义网格行(grid row)
和网格列(grid columns)
为每一个网格项目(grid item)
定义位置和空间。
GFC
将改变传统的布局模式,他将让布局从一维布局变成了二维布局。简单的说,有了GFC
之后,布局不再局限于单个维度了。这个时候你要实现类似九宫格,拼图之类的布局效果显得格外的容易。
自适应格式化上下文(FFC):
FFC(Flex Formatting Contexts)直译为"自适应格式化上下文",display值为flex或者inline-flex的元素将会生成自适应容器(flex container)。
Flex Box 由伸缩容器和伸缩项目组成。通过设置元素的 display 属性为 flex 或 inline-flex 可以得到一个伸缩容器。设置为 flex 的容器被渲染为一个块级元素,而设置为 inline-flex 的容器则渲染为一个行内元素。
伸缩容器中的每一个子元素都是一个伸缩项目。伸缩项目可以是任意数量的。伸缩容器外和伸缩项目内的一切元素都不受影响。简单地说,Flexbox 定义了伸缩容器内伸缩项目该如何布局。
自适应格式化上下文(FFC)与块级格式上下文(BFC)的区别:
FFC与BFC有点儿类似,但仍有以下几点区别:
1、Flexbox 不支持 ::first-line 和 ::first-letter 这两种伪元素
2、vertical-align 对 Flexbox 中的子元素 是没有效果的
3、float 和 clear 属性对 Flexbox 中的子元素是没有效果的,也不会使子元素脱离文档流(但是对Flexbox 是有效果的!)
4、多栏布局(column-*) 在 Flexbox 中也是失效的,就是说我们不能使用多栏布局在 Flexbox 排列其下的子元素
5、Flexbox 下的子元素不会继承父级容器的宽
相关文章推荐:
CSS > 译文:理解CSS中的块级格式化上下文_html/css_WEB-ITnose
CSS > 行内格式化上下文中的各种高度计算_html/css_WEB-ITnose
块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解_html/css_WEB-ITnose
以上是css布局中格式化上下文(FC)类型有哪些?格式化上下文(FC)的类型介绍的详细内容。更多信息请关注PHP中文网其他相关文章!