您好,欢迎访问一九零五行业门户网

css布局中格式化上下文(FC)类型有哪些?格式化上下文(FC)的类型介绍

什么是格式化上下文(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)的类型介绍的详细内容。
其它类似信息

推荐信息