Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
jjeejj opened this issue May 14, 2019 · 19 comments
Open

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

jjeejj opened this issue May 14, 2019 · 19 comments

Comments

@jjeejj
Copy link
Contributor

jjeejj commented May 14, 2019

No description provided.

@GuoYuFu123
Copy link

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

@swchenxixi
Copy link

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

在这

@fengjinlong
Copy link

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)定义位置和空间。

@MKLM0222
Copy link

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

@FounderIsShadowWalker
Copy link

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

@wz71014q
Copy link

总结了一下 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

@chenluily0451
Copy link

KFC

@Bigggggggggger
Copy link

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

@wzh19940000
Copy link

KFC?

@365377584
Copy link

KFC?

UFO

@Jmingzi
Copy link

Jmingzi commented Nov 23, 2019

KFC?

UFO

USB?

@richChen0815
Copy link

页面的布局基本单位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

@suxin2017
Copy link

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

@xsfxtsxxr
Copy link

KFC

@chenluily0451

@Rockergmail
Copy link

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

@Good-XiaAo
Copy link

KFC?

NBA

@resoka
Copy link

resoka commented Oct 19, 2021

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

会显得问的人懂的多

@Lemonade1172
Copy link

KFC?

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

@al4fun
Copy link

al4fun commented Feb 9, 2023

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests