css布局的各种FC简单介绍:BFC,IFC,GFC,FFC
什么是FC?
Formatting Context
,格式化上下文,指页面中一个渲染区域,拥有一套渲染规则,它决定了其子元素如何定位,以及与其他元素的相互关系和作用。
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
;
display:table
也认为可以生成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(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
有点儿类似,但仍有以下几点区别:
- Flexbox 不支持
::first-line
和::first-letter
这两种伪元素 vertical-align
对Flexbox
中的子元素 是没有效果的float
和clear
属性对Flexbox
中的子元素是没有效果的,也不会使子元素脱离文档流(但是对Flexbox
是有效果的!)- 多栏布局(
column-*
) 在Flexbox
中也是失效的,就是说我们不能使用多栏布局在Flexbox
排列其下的子元素 Flexbox
下的子元素不会继承父级容器的宽
原文地址:https://segmentfault.com/a/1190000014886753
css布局的各种FC简单介绍:BFC,IFC,GFC,FFC的更多相关文章
- CSS布局秘籍(1)-任督二脉BFC/IFC
01.CSS布局 1.1.正常布局流(Normal flow) 正常布局流 就是不做任何布局控制,按照HTML的顺序(从左到右,从上而下)进行布局排列.网页基于盒子模型进行正常的布局,主要特点: 盒子 ...
- BFC,IFC,GFC,FFC
FC的全称是:Formatting Contexts,是W3C CSS2.1规范中的一个概念.它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用. ...
- CSS之box-sizing的用处简单介绍
前几天才发现有 box-sizing 这么个样式属性,研究了一番感觉很有意思, 通过指定容器的盒子模型类型,达到不同的展示效果 例如:当一个容器宽度定义为 width:100%; 之后,如果再增加 ...
- css的@符号的作用简单介绍
- CSS 中的 BFC,IFC,GFC和FFC
原文网址:http://www.cnblogs.com/dingyufenglian/p/4845477.html What‘s FC? 一定不是KFC,FC的全称是:Formatting Conte ...
- css3中的BFC,IFC,GFC和FFC(转载)
作者原文网址:http://www.cnblogs.com/dingyufenglian/p/4845477.html What‘s FC? 一定不是KFC,FC的全称是:Formatting C ...
- 跟着9张思维导图学习Javascript js 关键字和保留字 css3中的BFC,IFC,GFC和FFC
跟着9张思维导图学习Javascript 学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将 po 出我收集的 9 张 javascript 相关的思维导图(非原创). 思维导图小ti ...
- css3中的BFC,IFC,GFC和FFC
出处:https://www.jianshu.com/p/e75f351e11f8 表格比较: 名称 英文全称 含义 BFC Block Formatting Contexts 块级格式化上下文 IF ...
- CSS 布局经典问题初步整理
CSS 定位问题 主要就是经典的绝对定位,相对定位问题. 10个文档学布局:通过十个例子讲解布局,主要涉及相对布局,绝对布局,浮动. 百度前端学院笔记 – 理解绝对定位:文章本身一般,几篇参考文献比较 ...
随机推荐
- qr.update导致的java.lang.NullPointerException空指针异常
debug以后代码走到了qr.update这一步,再向下走一步就会报错了,内容是java.lang.NullPointerException 最后再三检查发现是SQL语句写错了!,我写的是插入语句是I ...
- 【OpenJ_Bailian - 4001】 Catch That Cow(bfs+优先队列)
Catch That Cow Descriptions: Farmer John has been informed of the location of a fugitive cow and wan ...
- 我的ubuntu连vi都没有??那在命令行怎么编辑文件??
今天弄了个docker下的ubuntu官方镜像,想在镜像里做一点实验,免得把自己的环境写得乱七八糟. 把代码文件mount进去之后,开始编译,但是镜像太干净了,什么工具都没有,于是先装cmake ap ...
- Luogu P1083 借教室【二分答案/差分】By cellur925
题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海 ...
- Manven下载
1.下载地址:http://maven.apache.org/download.cgi 2.点击下载链接 3.解压zip到安装路径 我的:C:\Progr ...
- mysql之流程控制
目录 分支结构 循环结构 分支结构: 1.if condition then [statement] elseif condition then [statement] else [statement ...
- Spark学习之Spark Streaming(9)
Spark学习之Spark Streaming(9) 1. Spark Streaming允许用户使用一套和批处理非常接近的API来编写流式计算应用,这就可以大量重用批处理应用的技术甚至代码. 2. ...
- github——团队合作
- 拼图游戏源码-swift版项目源码
作者fanyinan,源码PuzzleProject,公司的项目中需要一个拼图游戏,之前有手动拼图和随机打乱的功能,近期又由于个(xian)人(zhe)爱(dan)好(teng)自己加入了自动拼图功能 ...
- [转] NTFS Permission issue with TAKEOWN & ICACLS
(转自:NTFS Permission issue with TAKEOWN & ICACLS - SAUGATA 原文日期:2013.11.19) Most of us using TA ...