CSS中的各种格式化上下文-FC(BFC、IFC、GFC、FFC)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

什么是FC

FC是Formatting Context的缩写中文名格式化上下文。是 W3C在CSS2.1 规范中的一个概念。

FC是指页面中一篇渲染区域渲染区域内使用的格式化上下文的渲染规则决定了该区域以及其子元素如何定位。当然使用同的渲染规则也会对其他元素的起到相互关系的作用。

主要有哪些FC

主要的格式化上下文渲染规则一共有4种分别是BFC块级格式化上下文、IFC行内格式化上下文、GFC网格布局格式化上下文、FFC自适应格式化上下文。
4种格式化上下文渲染规则也是体现了CSS中不同的渲染规则。

BFC

什么是BFC

Block Formatting Context块级格式化上下文一个独立的块级渲染区域该区域拥有一套渲染规则来约束块级盒子的布局且与区域外部无关。

BFC的约束规则

内部的BOX会在垂直方向上一个接一个的放置
垂直方向上的距离由margin决定。完整的说法是属于同一个BFC的俩个相邻的BOX的margin会发生重叠与方向无关。
每个元素的左外边距与包含块的左边界相接触从左到右即使浮动元素也是如此。这说明BFC中的子元素不会超出它的包含块而position为absolute的元素可以超出它的包含块边界
BFC的区域不会与float的元素区域重叠
计算BFC的高度时浮动子元素也参与计算
BFC就是页面上的一个隔离的独立容器容器里面的子元素不会影响到外面的元素反之亦然

BFC的应用

防止margin发生重叠
防止发生因浮动导致的高度塌陷

怎么生成BFC

float的值不为none
overflow的值不为visible
display的值为inline-block、table-cell、table-caption
position的值为absolute或fixed
displaytable也认为可以生成BFC其实是在于Table会默认生成一个匿名的table-cell正是这个匿名的table-cell生成了BFC。

IFC

什么是IFC

IFC(Inline Formatting Contexts)直译为"行内格式化上下文"IFC的line box线框高度由其包含行内元素中最高的实际高度计算而来不受到竖直方向的padding/margin影响)

IFC有的特性

IFC中的line box一般左右都贴紧整个IFC但是会因为float元素而扰乱。float元素会位于IFC与与line box之间使得line box宽度缩短。

IFC中时不可能有块级元素的当插入块级元素时如p中插入div会产生两个匿名块与div分隔开即产生两个IFC每个IFC对外表现为块级元素与div垂直排列。

IFC的应用

水平居中当一个块要在环境中水平居中时设置其为inline-block则会在外层产生IFC通过text-align则可以使其水平居中。

垂直居中创建一个IFC用其中一个元素撑开父元素的高度然后设置其vertical-align:middle其他行内元素则可以在此父元素下垂直居中。

GFC

什么是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将改变传统的布局模式他将让布局从一维布局变成了二维布局。简单的说有了GFC之后布局不再局限于单个维度了。这个时候你要实现类似九宫格拼图之类的布局效果显得格外的容易。

FFC

什么是FFC

FFC(Flex Formatting Contexts)直译为"自适应格式化上下文"display值为flex或者inline-flex的元素将会生成自适应容器flex container。

FFC有的特性

Flex Box 由伸缩容器和伸缩项目组成。通过设置元素的 display 属性为 flex 或 inline-flex 可以得到一个伸缩容器。设置为 flex 的容器被渲染为一个块级元素而设置为 inline-flex 的容器则渲染为一个行内元素。

伸缩容器中的每一个子元素都是一个伸缩项目。伸缩项目可以是任意数量的。伸缩容器外和伸缩项目内的一切元素都不受影响。简单地说Flexbox 定义了伸缩容器内伸缩项目该如何布局。

FFC与BFC的区别

FFC与BFC有点儿类似但仍有以下几点区别

Flexbox 不支持 ::first-line 和 ::first-letter 这两种伪元素

vertical-align 对 Flexbox 中的子元素 是没有效果的

float 和 clear 属性对 Flexbox 中的子元素是没有效果的也不会使子元素脱离文档流(但是对Flexbox 是有效果的)

多栏布局column-* 在 Flexbox 中也是失效的就是说我们不能使用多栏布局在Flexbox 排列其下的子元素

Flexbox 下的子元素不会继承父级容器的宽

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: CSS