CSS——可视化格式模型
CSS的可视化格式模型
- CSS中规定每一个元素都有自己的盒子模型(相当一规定了这个元素如何显示);
- 然后可视化格式模型则是把这些盒子模型按照规则摆放到页面上,也就是如何布局;
- 换句话说,盒子模型规定了怎么在页面上摆放盒子,盒子的相互作用等等;
- CSS的可视化格式模型就是规定了浏览器在页面中如何处理文档树
1、关键字:
- 包含块(Containing Block)、
- 控制框(Controlling Box)、
- BFC(Block Formatting Context)、
- IFC(Inline Formatting Context)、
- 定位体系、
- 浮动等
2、CSS三种定位机制:普通流、浮动流、绝对定位
3、包含块
- 一个元素的box的定位和尺寸,会与某一矩形框有关,这个框就称之为包含块。
- 元素h会为它的子孙元素创建包含块,但是,并不是说元素的包含块就是它的父元素,元素的包含块与它的祖先元素的样式有关:
譬如:
- 根元素是最顶端的元素,他没有父节点,它的包含块就是初始化包含块;
- static和relative的包含块由他最近的块级、单元格或者行内块祖先元素的内容框(content)创建;
- fixed的包含块就是当前可视窗口;
absolute的包含块由他最近的position属性值不为static的祖先元素创建:
- 如果其祖先元素是行内元素,则包含块取决于其祖先元素的direction特性;
- 如果祖先元素不是行内元素,那么包含块的区域应该是祖先元素的内边距边界。
4、控制框(Controlling Box)
块级元素和块框以及行内元素和行框相关的概念。
块框
- 块级元素会生成一个块框(Block Box),块框会占据一整行,用来包含子box和生成的内容;
- 块框同时也是一个块包含框(Containing Box),里面要么只包含块框,要么只包含行内框(不能混杂);
- 如果块框内部有块级元素也有行内元素,那么行内元素会被匿名块框包围
- 匿名块框的生成:
```
<div>
some inline text
<p>more text</p>
</div>
```- div生成了一个块框,包含了另一个块框p以及文本内容some inline text,此时文本内容会被强制加到一个匿名的块框里面,被div生成的块框包含;
- 换句话说:如果一个块框在其中包含另一个块框,那么我们强迫它只能包含块框,因此其他文本内容生成出来的都是匿名块框(而不是匿名行内框)。
行内框
- 一个行内元素生成一个行内框;
- 行内元素能排在一行,允许左右有其他元素。
- 匿名行内框的生成:
```
<div>
some
<em>more text</em>
text
</div>
```- div元素生成一个块框,其中有几个行内框(如em)以及文本some和text,此时会专门为这些文本生成匿名行内框;
display属性的影响
display的几个属性也可以影响不同框的生成:
- block,元素生成一个块框;
- inline,元素产生一个或多个的行内框;
- inline-block,元素产生一个行内级块框,行内块框的内部会被当做块框来格式化,而此元素本身会被当作行内级框来格式化(这也是为什么会产生BFC);
- none,不生成框,不再格式化结构中,而另一个visibility:hidden则会产生一个不可见的框
总结:
- 如果一个框里,有一个块级元素,那么这个框里的内容都会被当作块框来进行格式化,因为只要出现了块级元素,就会将里面的内容分成几块,每一块独占一行(出现行内可以用匿名块框解决);
- 如果一个框里,没有任何块级元素,那么这个框里的内容会被当成行内框来格式化,因为里面的内容时按照顺序成行的排列。
FC(Formatting Context)
FC即格式化上下文,它定义框内部的元素渲染规则,比较抽象,譬如:
- FC就像是一个大箱子,里面装有很多元素;
- 箱子可以隔开里面的元素和外面的元素(所以外部并不会影响FC内部的渲染);
- 内部的规则可以是:如何定位、宽高计算、margin折叠等等
- 不同类型的框参与的FC类型不同,譬如块级框对应BFC,行内框对应IFC
- 注意:并不是说所有的框都会产生FC,而是符合特定的条件才会产生,只有产生了对应的FC后才会应用对应的FC渲染规则
BFC渲染规则
- 在块格式化上下文中,每一个元素左外边与包含块的左边解除(对于从右到左的格式化,右外边接触右边),即使存在浮动也是如此(所以浮动元素正常会直接贴近它的包含块的左边,与普通元素重合),除非这个元素也创建了一个新的BFC;
BFC特点:
- 内部box在垂直方向,一个接一个的放置;
- box的垂直方向由margin决定,属于同一个BFC的两个box间的margin会重叠;
- BFC区域不会与float box重叠(可用于排版)
- BFC就是页面上的一个隔离的独立容器,容器里的子元素不会影响到外面的元素,反之也是如此;
- 计算BFC的高度时,浮动元素也参与计算(不会浮动塌陷如overflow:hidden清除浮动就是这个原理);
如何触发BFC
- 根元素;
- float属性不为none;
- position为absolute或fixed;
- display为inline-block、flex、inline-flex、table、table-cell、table-caption
- overflow不为visible
- display:table,本身不会产生BFC,但是他会产生匿名框(包含display:table-cell的框),而这个匿名框产生BFC。
IFC规则
- 在行内格式化上下文中,框一个接一个地水平排列,起点是包含块的顶部。水平方向上的margin,border和padding在框之间得到保留,框在垂直方向上可以以不同的方式对齐;
- 它们的顶部或底部对齐,或根据其中文字的基线对齐
行框:
- 包含那些框的长方形区域,会形成一行,叫做行框。行框的宽度有它的包含块和其中的浮动元素决定,高度的确定由行高度计算规则决定;
行框的规则:
- 如果几个行内框在水平方向上无法放入一个行框内,它们可以分配在两个或多个垂直堆叠的行框中(即行内框的分割)
- 行框在堆叠是没有垂直方向上的分割且永远不重叠;
- 行框的高度总是足够容纳所包含的所有框,不过他可能高于他包含的最高的框(例如,框对齐会引起基线对齐)
- 行框的左边接触到其包含块的左边,右边接触到其包含块的右边。
总结:
```
1. 行内元素总是会应用IFC渲染规则;
2. 行内元素会应用IFC规则渲染,譬如text-align可以用来居中等;
3. 块框内部对于文本这类的匿名元素,会产生匿名行框包围,而行框内部就应用IFC渲染规则
4. 行内框内部,对于那些行内元素,一样应用IFC渲染规则;
5. 另外,inline-block,会在元素外层产生IFC(所以这个元素可以通过text-align水平居中),当然,它的内部则按照BFC规则渲染```
CSS——可视化格式模型的更多相关文章
- CSS概念 - 可视化格式模型(二) 定位概述(普通流、绝对定位)
2.定位概念 上一节熟悉了盒模型, 现在来看一下可视化格式模型和定位模型. 理解这两个模型的细微差异是非常重要的, 因为它们一起控制着如何在页面上布置每个元素 2.1 可视化格式模型 CSS有三种基本 ...
- CSS概念 - 可视化格式模型(一) 盒模型与外边距叠加
可以参考<精通CSS 高级WEB标准解决方案>第三章. 可视化格式模型 可视化格式模型要掌握的3个最重要的CSS概念是 浮动.定位.盒模型. 这些概念控制在页面上安排和显示元素的方式, 形 ...
- visual formatting model (可视化格式模型)【持续修正】
概念: visual formatting model,可视化格式模型 The CSS visual formatting model is an algorithm that processes a ...
- 可视化格式模型(visual formatting model)
原文 简书原文:https://www.jianshu.com/p/7632f16ff555 大纲 1.认识可视化模型 2.可视化模型的内容 3.可视化模型的影响因素 1.认识可视化模型 盒子模型是C ...
- Visual formatting model 可视化格式模型
在可视化格式模型里,每个元素都是由一个或者多个盒子组成,这些盒子的布局由下面规则控制: box dimensions and type.(块元素和行内元素) positioning scheme (n ...
- 精通css 高级web标准解决方案——可视化格式模型-盒模型
1-盒模型的两种标准: IE :width 和 height属性 是包括padding和border在内的. w3c:width 和 height 属性,就是单纯的内容的宽高,padding 是内容之 ...
- 精通CSS高级Web标准解决方案(2-2 可视化格式模型之定位概述)
视觉格式化模型 块级元素(块框).行内元素(行内框),可以使用display改变生成的框的类型,display:block让行内元素(比如<a>)表现的跟块级元素一样,display:no ...
- 精通CSS高级Web标准解决方案(2-1 可视化格式模型之框模型)
浮动.定位.框模型这些控制在页面上安排和显示元素的方式,形成CSS布局. 盒子模型 页面上的每个元素都被看成一个矩形框. 盒子模型有两种,分别是 IE 盒子模型和标准 W3C 盒子模型.他们对盒子模型 ...
- 精通css 高级web标准解决方案——可视化格式模型-定位模型
CSS 中有三种定位机制:普通流.浮动.绝对定位.(默认为普通流) 改变文档流:display: inline-block; (支持到ie8及以上) 1-匿名块框: <div> 你好! & ...
随机推荐
- 洛谷 P3622 [APIO2007]动物园【状压dp】
看成网络流建图想了好久... 实际上5个是可以状压的 设f[i][k]为到第i个围栏状态为k的方案数,因为考虑到重复,设g[i][k]记录i开始,状态为k的孩子有几个 状态转移很好想:f[j][k]= ...
- P2093 [国家集训队]JZPFAR(KDTree)
传送门 类似于p4357 不过因为距离相等的时候要优先选择序号小的,所以要重载一下运算符 //minamoto #include<bits/stdc++.h> #define R regi ...
- P4323 [JSOI2016]独特的树叶(树哈希)
传送门 树哈希?->这里 反正大概就是乱搞--的吧-- //minamoto #include<bits/stdc++.h> #define R register #define l ...
- golang——关于for循环的学习
1.for循环的用法 (1)常规用法 func main() { slice := []int{1, 2, 3, 4, 5, 6} //方式1 for i := 0; i < len(slice ...
- hdu 1863 畅通工程(Kruskal+并查集)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 扩展KMP的应用
扩展KMP的应用: 给出模板串S和串T,长度分别为Slen和Tlen,要求在线性时间内,对于每个S[i](0<=i<Slen),求出S[i..Slen-1]与T的 最长公共前缀长度,记为e ...
- ACboy needs your help HDU - 1712
ACboy needs your help HDU - 1712 ans[i][j]表示前i门课共花j时间最大收益.对于第i门课,可以花k(0<=k<=j)时间,那么之前i-1门课共花j- ...
- ASP.NET MVC+Bootstrap个人博客之修复UEditor编辑时Bug(四)
我的个人博客站在使用百度富文本编辑器UEditor修改文章时,遇到了一些问题,(不知是bug,还是我没有配置好).但总算找到了解决方法,在此记录下来. 遇到的问题: 正常来讲,进入文章修改页,只需将U ...
- AJPFX编写cmd界面下一键编译、执行java代码的bat脚本
此脚本适合刚接触java的同学,在cmd界面下用jc取代 复杂的 javac *.java + java main使用说明:把脚本内容复制到txt文本中,修改后缀名为.bat,运行一次即可完成配置, ...
- MySQL多表
一.外键 1.外键:链接两张表的字段,通过主表的主键和从表的外键来描述主外键关系,呈现的是一对多的关系.例如:商品类别(一)对商品(多),主表:商品类别表,从表:商品表. 2.外键的特点:从表外键的值 ...