BFC、IFC

132 阅读4分钟

FC

FC(Formating Context)格式化上下文,是css2.1提出一个视觉渲染的概念。
它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素如何排列,以及和其他元素之间相互关系。
BFC和IFC都是常见FC。

BFC

BFC(Block Formating Context)块级格式化上下文
指的是页面中一个标签,不一定是块级标签,有指定满足条件,有自己排列规范,决定了BFC区域的子元素如何排列,与其他元素之间相互关系(BFC是页面中的一个块级渲染区域)

BFC区域的特点

内部的box会在垂直方向上,一个接着一个显示。(标准文档流)
box垂直方向的距离由margin决定,属于同一个BFC的两个相邻的盒子的margin会发生重叠。(属于不同的BFC区域的盒子在垂直方向上不发生重叠)
每个元素的左外边缘(margin-left),与包含块的左边相接触(对于从左往右排列的格式化,否则相反);即使存在浮动也是如此,除非这个元素自己形成了一个新的BFC区域。
BFC区域不会与float box重叠。
BFC区域就是页面上一个独立的容器,容器里面的子元素不会影响外面的元素,反之亦然。
计算BFC区域的高度时,浮动元素也参与计算。(可以解决子元素浮动,父元素高度塌陷)

如何成为BFC容器(如何升级伪BFC区域)

(1)根标签(html标签就是一个BFC容器)
(2)float不为none
(3)position为aboslute和fixed
(4)display为inline-block、table-cell、table-caption、flex(弹性盒子)
(5)overflow不为visible

BFC应用场景

场景一:每个元素的左外边缘(margin-left),与包含块的左边相接触(对于从左往右排列的格式化,否则相反);即使存在浮动也是如此,除非这个元素自己形成了一个新的BFC区域。
场景二:
每个元素的左外边缘(margin-left),与包含块的左边相接触(对于从左往右排列的格式化,否则相反);即使存在浮动也是如此,除非这个元素自己形成了一个新的BFC区域。
BFC区域不会与float box重叠。
三列布局,左右固定,中间适应。
场景三:
计算计算BFC区域的高度时,浮动元素也参与计算。
可以解决子元素浮动,父元素高度塌陷。
场景四:
box垂直方向的距离由margin决定,属于同一个BFC的两个相邻的盒子的margin会发生重叠。
解决方案:将其中一个盒子放在一个新的BFC容器中。

IFC

行内格式化上下文(即inline Formating context),它和BFC一样,都是css2提出视觉渲染的概念。
指的是一行区域的渲染规则,确定了一行中行级元素如何进行排列以及对齐。

IFC的特点

在IFC中,盒子水平放置,一个接着一个,从包含块的顶部开始。
在盒子之间margin和padding在水平方向有效。
这些盒子可以通过不同的方式进行对齐,有些底部和顶部对齐,顶部和基线对齐等等。

行盒

是指整个一行的渲染区域,就叫做行盒。
行盒的宽度:是由一行中内容的总宽度决定,由浮动和包含块决定的。
行盒的高度:由一行中内容高度计算得出,由行盒最高点到最低点决定。

主要影响行盒布局的css属性

font-size:字体大小会影响行盒;
font-family:字体样式更改也会影响行盒。
height | line-height:行高和高度都会影响行盒。
vertical-align:设置对齐的方式,不同的对齐方式可能会影响行盒。

影响IFC区域的高度的css属性

font-size:设置字体大小,字体越大,行盒越高,以行盒中最大的高度决定。
font-family:设置字体类型,不同的字体类型,占据的高度不一样,会影响IFC区域的行盒的高度。
height | line-height:分别设置盒子的高度和行高,值越大,行盒的高度越大,会影响行盒的高度。
vertical-align:设置行级元素在垂直方向的对齐方式。
取值:
baseline:默认值,基线对齐;
middle:中线对齐;
top:顶部对齐;
bottom:底部对齐;

文本之间

文本与文本之间排列方式,文本默认是参考基线进行对齐。

文本与图片之间

文本的基线和图片的底部默认对齐;
文本设置vertical-align:文本参考参考线与图片的底部进行对齐,文本进行移动;
图片设置vertical-align:图片设置了参考线,文本自己的参考线与图片的参考线进行对齐。

表格

设置表格中单元格中内容在垂直方向上的对齐方式;
取值:
middel:单元格中内容垂直居中,默认值;
top:单元格中内容顶对齐;
bottom:单元格中内容底对齐。