CSS布局之BFC和IFC
http://www.cnblogs.com/zt-blog/p/6708358.html
《这是一篇css2-3的布局规则0.000001览》
BFC -- block formatting context 块级格式上下文
块级元素(block-level elements)-- display:block/list-item/table/flex
块级盒(block-level boxes)-- 块级盒是指参与了BFC的盒子,块级元素都会生成包含后代元素和生成内容的自身原本的盒子,并且这个盒子会参与任何位置计算(利用父元素的BFC清除浮动的原理,另外还有clearfix的清除法)!
1. content box(content/inner edge * 4)
conent的四条边构成了content box
2. padding box(padding edge * 4)
padding的四条边构成了padding box
3. border box(border edge * 4)
border的四条边构成了border box
4. margin box(margin * 4)
margin的四条边构成了margin box。(外边距的上下合并解决方法,给父元素添加border,or为父元素设置BFC特性)
包含块(containing block)-- 最近的块级祖先元素的content box
块级排版上下文 BFC --
1. BFC布局是从包含块的顶部开始垂直向下,外边距会合并(仅指处于同一BFC的相邻块级盒),由普通文档流中的块级盒参与,body是root BFC。那么脱离文档流的元素布局呢?来看其他能创建新的BFC的情况:
1) position: absolute;
2) overflow: !visible;的块级盒子
3) float:left/right;
4) 不是块级盒子的block containers比如 display:inline-block/table-cell/table-caption
新的BFC里面的布局不影响外面的,反之亦然。
2. 在BFC中,每个盒子的左外边框紧靠他的包含块的左边框(从右到左则为右边框紧挨),即使相邻元素存在着浮动(但盒子的边框会因这个浮动而收缩),除非这个盒子的内部创建了一个新的BFC(此时盒子因为相邻元素的浮动而变窄),这是盒子左外边框就跑到浮动元素右/后边去了。典型的例子是文字环绕浮动的图片。
IFC -- Inline Formatting Contexts (内联格式上下文)
行内元素/内联元素(inline-level elements) -- 是指那些不会形成新的内容块的源文档的元素,内容被分布在行间,例如,内容段落或内联图片。-- display:inline/inline-table/inline-block. 行内元素生成行级盒子
inline-level box -- 行内级盒子,参与IFC内联格式上下文。
inline box -- 行内盒子,既是内联的(inline-level),同时他的内容参与他的IFC的。例如display:inline产生一个行内盒子,但是置换元素/inline-block/inline-table产生的不是行内盒子。。。
IFC --
1) 在IFC中,所有盒子一个接一个水平排列,从包含块的顶部开始。这些盒子之间的水平margins,borders和paddings互不影响,不合并。盒子可以通过多种方式实现垂直居中/上/下/基线... 包含这些形成一行的矩形区域叫做line box行盒。
2) 行盒的宽度由他的包含块和出现的floats共同决定,高度规则:
行盒中的每个行内级盒子大小 VS 置换元素/inline-block/inline-table元素的margin box高度 VS 行内盒子的line-height 中的最高者。
行内级盒子可以通过他们的vertical-align实现对齐方式,同时影响行盒高度。
行盒的高度是最高的盒子的顶部到最低的盒子底部之间的距离。
空的内联元素inline element产生空的行内盒子,仍可有margin border padding line-height
3) 行盒总是足够高来包含他内部的盒子们,也可能比内部最高的盒子高(例如盒子基线对齐)。当一个盒子高度小于包含它的行盒时,该盒子的垂直对齐由vertical-align决定。当几个盒子水平方向不能装在一个行盒时,他们被分发一堆垂直的行盒,因此,一个段落就是一堆垂直的行盒。行盒们没有垂直的隔离地堆积在一起 ,并且他们不会重叠。
4) 一般地,行盒的左边触碰到他的包含块的左边,右边触碰包含块的右边,但是,浮动盒子可能会出现在包含块的边和行盒的边之间,因此,尽管统一IFC中的行盒一般会有相同的宽度(即包含块的宽度),但是他们的宽度可能不同当水平空间因为float而减少时。统一IFC的行盒的高度是不同的。
5) 当一行的行内级盒子宽度总和比包含它们的行盒小时,他们的水平分布由text-align决定。如果取值justify那么用户代理也可能在行盒拉伸空间和文字(inline-table和inline-block盒子不适用).
6) 当行内盒子超出行盒宽度时,他会被分割成几个盒子,这些盒子分布到几个行盒中。如果一个行内盒子不能被分割开(例如行内盒子包含单个字母,特殊的不允许在行内盒子断字的语言 或white-space:nowrap/pre),那么行内盒子溢出行盒(水平方向)。
7) 当行内盒子被分割时,margins,borders,paddings在分割发生的地方没有可见的效果(或者有很多分割时的每一个分割)
8) 行内盒子也可以被分割成位于同一行盒的盒子, 参考'direction' and 'unicode-bidi' !!!
9) 行盒在IFC中被创建来hold行内级内容的,那些不包含文本,不包含preserved white space,不包含margin/padding/border非0的行内元素,不包含其他in-flow内容(如image,inline blocks, inline tables),不以preservered newline结束的行盒必须被看做高度为0的行盒以便于决定他们内部的元素的定位,并且必须被视为不存在的。
例如:
<P>Several <EM>emphasized words</EM> appear
<STRONG>in this</STRONG> sentence, dear.</P>
在p的块盒总包含5ge行内盒子,em盒子,strong盒子和3个匿名盒子。p的块盒生成行盒的包含块,包含块足够到时,只有一个行盒就够了;否则就会有多个行盒,行内盒子可能被分割。 下面是W3C官网的示例,em盒子设置了margin,padding,border,并且它被分割了,可以看到emphasized之后,words之前没有任何padding,margin,border的可视化效果。
CSS布局之BFC和IFC的更多相关文章
- 浅析CSS里的 BFC 和 IFC
前端日刊 登录 浅析CSS里的 BFC 和 IFC 2018-01-29 阅读 1794 收藏 3 原链:segmentfault.com 分享到: 前端必备图书<Web安全开发指南 掌握白 ...
- CSS布局基础——BFC
what's BFC? 第一次看到这个名词,我是拒绝的,css什么时候还有这个东西?于是迫不及待的google了一下,才发现原来它无时无刻不在我们的css当中,只不过它并不是一个属性,不需要我们平常使 ...
- 浅析CSS中的BFC和IFC
1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...
- CSS 布局和 BFC
什么是 BFC 在一个Web页面的CSS渲染中,块级格式化上下文 (Block Fromatting Context)是按照块级盒子布局的.W3C对BFC的定义如下:浮动元素和绝对定位元素,非块级盒子 ...
- 分析CSS布局中BFC
1.什么是BFC BFC(Block Formatting Context,块级元素格式化上下文)是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和 ...
- CSS布局基础--BFC
1,什么是BFC BFC(Block Formatting Context)块级格式化上下文,它就是一个环境,HTML元素在这个环境中按照一定规则进行布局.一个环境中的元素不会影响到其他环境中的布局. ...
- CSS布局秘籍(1)-任督二脉BFC/IFC
01.CSS布局 1.1.正常布局流(Normal flow) 正常布局流 就是不做任何布局控制,按照HTML的顺序(从左到右,从上而下)进行布局排列.网页基于盒子模型进行正常的布局,主要特点: 盒子 ...
- css布局的各种FC简单介绍:BFC,IFC,GFC,FFC
什么是FC? Formatting Context,格式化上下文,指页面中一个渲染区域,拥有一套渲染规则,它决定了其子元素如何定位,以及与其他元素的相互关系和作用. BFC 什么是BFC Block ...
- css布局中的各种FC(BFC、IFC、GFC、FFC)
什么是FC?FC(Formatting Context)格式化上下文,其实指的是一个渲染区域,拥有一套渲染规则,它决定了其子元素如何定位,以及与其他元素之间的关系和相互作用. 什么是BFC? BFC( ...
随机推荐
- Spring AOP源码解析——专治你不会看源码的坏毛病!
昨天有个大牛说我啰嗦,眼光比较细碎,看不到重点.太他爷爷的有道理了!要说看人品,还是女孩子强一些. 原来记得看到一个男孩子的抱怨,说怎么两人刚刚开始在一起,女孩子在心里就已经和他过完了一辈子.哥哥们, ...
- 爬虫学习之csv读取和存储
一.读取 该读取主要使用到csv里面的Reader().DictReader()方法,和引用io里面的StringIO进行对字符串进行封装 在处理网上的csv文件方式主要是有一下几方面: • 手动把C ...
- svn 设置代理
Memory4Young Do Not Repeat Yourself! SVN —— 如何设置代理 如果在使用SVN下载外网的资源时,出现这样的提示:No such host is known. 或 ...
- 浅谈stiring数
在组合数学,Stirling数可指两类数,第一类Stirling数和第二类Stirling数. stirling常应用于许多组合枚举问题中. 第一类stirling数: 对第一类Stirling数 ...
- HNOI2006 潘多拉的盒子
题目描述 题解: 题目的描述比较长,理解起来也有一定难度.仔细读题后我们发现整个任务可以分成两个部分:找出咒语机之间所有的升级关系.求最长升级序列. 1. 求升级关系: 容易看出,咒语机i可以抽象成一 ...
- mysql 数据库 show命令
MySQL中有很多的基本命令,show命令也是其中之一,在很多使用者中对show命令的使用还容易产生混淆,本文汇集了show命令的众多用法. 1. show tables或show tables fr ...
- mysql单实例多库与多实例单库
一.单实例多库: 一个mysql实例,创建多个数据目录. 规划: 实例路径:/usr/local/mysql 数据目录路径: (1)/usr/local/mysql/data (2)/usr/loca ...
- 解决sqlplus无法退格问题
# wget http://download.openpkg.org/components/cache/rlwrap/rlwrap-0.42.tar.gz # tar -zxf rlwrap-0. ...
- 跟初学者学习IbatisNet第二篇
在上一篇里面我们知道了什么是IbatisNet,并且知道了如何用IbatisNet进行简单的增删改查的操作,在这一篇文章里面我们主要介绍一下IbatisNet操作存储过程. 我们一般把存储过程分为两种 ...
- Python2和Python3共存安装robotframework
1.下载Python2.Python3安装包 https://www.python.org/ 2.下载pip.tar.gz https://pypi.python.org/pypi/pip#downl ...