Daily-Interview-Question icon indicating copy to clipboard operation
Daily-Interview-Question copied to clipboard

第 73 题: 介绍下 BFC、IFC、GFC 和 FFC

Open jjeejj opened this issue 5 years ago • 19 comments

jjeejj avatar May 14 '19 01:05 jjeejj

https://blog.csdn.net/qq_39985511/article/details/90200283

GuoYuFu123 avatar May 14 '19 01:05 GuoYuFu123

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 定义了伸缩容器内伸缩项目该如何布局。

在这

swchenxixi avatar May 14 '19 02:05 swchenxixi

BFC BFC(Block Formatting Contexts)直译为"块级格式化上下文"。Block Formatting Contexts就是页面上的一个隔离的渲染区域,容器里面的子元素不会在布局上影响到外面的元素,反之也是如此。如何产生BFC?

float的值不为none。

overflow的值不为visible。

position的值不为relative和static。

display的值为table-cell, table-caption, inline-block中的任何一个。

那BFC一般有什么用呢?

  比如常见的多栏布局,结合块级别元素浮动,里面的元素则是在一个相对隔离的环境里运行。

IFC 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 GFC(GridLayout Formatting Contexts)直译为"网格布局格式化上下文",当为一个元素设置display值为grid的时候,此元素将会获得一个独立的渲染区域,我们可以通过在网格容器(grid container)上定义网格定义行(grid definition rows)和网格定义列(grid definition columns)属性各在网格项目(grid item)上定义网格行(grid row)和网格列(grid columns)为每一个网格项目(grid item)定义位置和空间。

fengjinlong avatar May 14 '19 09:05 fengjinlong

https://juejin.im/entry/5938daf7a0bb9f006b2295db 块级格式化上下文BFC,内联格式化上下文IFC,网格布局格式化上下文GFC,自适应格式化上下文FFC

MKLM0222 avatar May 14 '19 13:05 MKLM0222

bfc: 块级格式化上下文 https://www.w3.org/TR/2011/REC-CSS2-20110607/visuren.html#block-formatting

ifc: 内联格式化上下文 https://www.w3.org/TR/2011/REC-CSS2-20110607/visuren.html#inline-formatting

gfc:网格格式化上下文 display: grid

ffc: 弹性格式化上下文 display: flex

FounderIsShadowWalker avatar May 15 '19 02:05 FounderIsShadowWalker

总结了一下 https://wz71014q.github.io/2019/03/23/CSS-%E5%8F%AF%E8%A7%86%E5%8C%96%E6%A0%BC%E5%BC%8F%E6%A8%A1%E5%9E%8B/#more

wz71014q avatar May 17 '19 08:05 wz71014q

KFC

chenluily0451 avatar Jul 09 '19 03:07 chenluily0451

这种问题有什么意义么,…最多问问BFC差不多了,平时写的时候就是顺手就打上去了,这玩意就是个概念。难不成你用grid布局或者flex布局的时候先想想我用的这个叫做GFC,FFC,它们具有什么样的特点或者特性?

Bigggggggggger avatar Jul 10 '19 03:07 Bigggggggggger

KFC?

wzh19940000 avatar Aug 29 '19 06:08 wzh19940000

KFC?

UFO

365377584 avatar Nov 04 '19 10:11 365377584

KFC?

UFO

USB?

Jmingzi avatar Nov 23 '19 03:11 Jmingzi

页面的布局基本单位Box. 一个页面有多个盒子构成。盒子分为行内盒子,块级盒子,弹性盒子。不同的盒子参与不同的formatting context(定义容器渲染规则,决定子元素的定位,以及和其他元素的关系和相互作用)。 常见的有bfc,ffc,gfc,ifc

哪些元素生成BFC 根元素 position 不为relative float不为none overflow不为visible display为flex inline-flex inline-block tabel-cell

bfc 解决设么样的问题 bfc区域不与float 区域重叠。 双边距问题。 计算bfc高度,浮动元素也参与计算。 子集浮动元素,父级overflow:hidden 具有高度

布局规则,ifc 相对简单

gfc 网格布局格式化上下文 二维

解决table 问题。

display:grid; grid-template-rows:20px 40px; grid-template-columns:repeat(3,1fr)

3列2行 子元素 位置设置 grid-column-start: grid-column-end

grid-row-start: grid-row-end:

grid-row:1/3 grid-column:2/4

richChen0815 avatar Mar 11 '20 05:03 richChen0815

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 拓展 防止垂直边距重叠 防止元素浮动导致父类元素高度坍塌 防止元素浮动导致浮动节点覆盖兄弟节点

suxin2017 avatar Mar 31 '20 07:03 suxin2017

KFC

@chenluily0451 香

xsfxtsxxr avatar Sep 08 '20 07:09 xsfxtsxxr

题目可以再加一个:堆叠上下文(The stacking context)

Rockergmail avatar Apr 15 '21 11:04 Rockergmail

KFC?

NBA

Good-XiaAo avatar Apr 28 '21 11:04 Good-XiaAo

这种问题有什么意义么,…最多问问BFC差不多了,平时写的时候就是顺手就打上去了,这玩意就是个概念。难不成你用grid布局或者flex布局的时候先想想我用的这个叫做GFC,FFC,它们具有什么样的特点或者特性?

会显得问的人懂的多

resoka avatar Oct 19 '21 06:10 resoka

KFC?

今天是疯狂星期四,V我50

Lemonade1172 avatar Sep 23 '22 08:09 Lemonade1172

这种问题有什么意义么,…最多问问BFC差不多了,平时写的时候就是顺手就打上去了,这玩意就是个概念。难不成你用grid布局或者flex布局的时候先想想我用的这个叫做GFC,FFC,它们具有什么样的特点或者特性?

大概是为了应付那些蛋疼的面试官哈哈。

al4fun avatar Feb 09 '23 06:02 al4fun