本文为原创,转载请注明出处: cnzt       文章:cnzt-p

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的更多相关文章

  1. 浅析CSS里的 BFC 和 IFC

    前端日刊 登录 浅析CSS里的 BFC 和 IFC 2018-01-29 阅读 1794 收藏 3 原链:segmentfault.com 分享到:   前端必备图书<Web安全开发指南 掌握白 ...

  2. CSS布局基础——BFC

    what's BFC? 第一次看到这个名词,我是拒绝的,css什么时候还有这个东西?于是迫不及待的google了一下,才发现原来它无时无刻不在我们的css当中,只不过它并不是一个属性,不需要我们平常使 ...

  3. 浅析CSS中的BFC和IFC

    1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...

  4. CSS 布局和 BFC

    什么是 BFC 在一个Web页面的CSS渲染中,块级格式化上下文 (Block Fromatting Context)是按照块级盒子布局的.W3C对BFC的定义如下:浮动元素和绝对定位元素,非块级盒子 ...

  5. 分析CSS布局中BFC

    1.什么是BFC BFC(Block Formatting Context,块级元素格式化上下文)是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和 ...

  6. CSS布局基础--BFC

    1,什么是BFC BFC(Block Formatting Context)块级格式化上下文,它就是一个环境,HTML元素在这个环境中按照一定规则进行布局.一个环境中的元素不会影响到其他环境中的布局. ...

  7. CSS布局秘籍(1)-任督二脉BFC/IFC

    01.CSS布局 1.1.正常布局流(Normal flow) 正常布局流 就是不做任何布局控制,按照HTML的顺序(从左到右,从上而下)进行布局排列.网页基于盒子模型进行正常的布局,主要特点: 盒子 ...

  8. css布局的各种FC简单介绍:BFC,IFC,GFC,FFC

    什么是FC? Formatting Context,格式化上下文,指页面中一个渲染区域,拥有一套渲染规则,它决定了其子元素如何定位,以及与其他元素的相互关系和作用. BFC 什么是BFC Block ...

  9. css布局中的各种FC(BFC、IFC、GFC、FFC)

    什么是FC?FC(Formatting Context)格式化上下文,其实指的是一个渲染区域,拥有一套渲染规则,它决定了其子元素如何定位,以及与其他元素之间的关系和相互作用. 什么是BFC? BFC( ...

随机推荐

  1. SEO 第八章

    SEO第八章 本次课目标: 1.  网站外部优化的外链优化 2.  网站流量分析 1.  什么叫做外链? 外链也叫反向链接,指的是从别的网站指向我自己的网站的链接. 2.  外链的作用? l  外链可 ...

  2. 记一次mysql优化操作

    这次操作,起因是需要获取用户来源及用户性别,而用户的性别信息在第三方授权的中有,存为JSON格式, 不想用php去解析获取,所以试试mysql操作 如果你有更好的解决方案,请留言告诉我! 情景简化 表 ...

  3. (转)Spring4.2.5+Hibernate4.3.11+Struts2.3.24整合开发

    http://blog.csdn.net/yerenyuan_pku/article/details/52902851 前面我们已经学会了Spring4.2.5+Hibernate4.3.11+Str ...

  4. C3P0连接池工具类实现步骤及方法

    C3P0连接池的工具类 使用C3P0获得连接对象连接池有一个规范接口 javax.sal.DataSourse 接口定义了一个从连接池中获得连接的方法getConnection(); 步骤导入jar包 ...

  5. 浅谈p值(p-value是什么)

    当我们说到p-value时,我们在说什么? “这个变量的p-value小于0.05,所以这个变量很重要” ........ 你真的知道自己在说什么么???这个p-value到底是个什么鬼?为什么小于0 ...

  6. iview upload on-format-error 事件 在 before-upload 事件 之后,导致在before里面阻止上传后,监测事件失效,需要自己手工写

    iview upload on-format-error 事件 在 before-upload 事件 之后,导致在before里面阻止上传后,监测事件失效,需要自己手工写

  7. 利用条件运算符的嵌套来完成此题: 学习成绩>= 90分的同学用A表示, 60-89分之间的用B表示, 60分以下的用C表示。

    题目:利用条件运算符的嵌套来完成此题: 学习成绩>= 90分的同学用A表示, 60-89分之间的用B表示, 60分以下的用C表示. 程序分析:(a> b)?a:b这是条件运算符的基本例子. ...

  8. [Java]Java工程师成神之路

    http://blog.csdn.net/sunnyyoona/article/details/50384595

  9. 获得Dictionary所有key和value值

    Dictionary<string, string> dc = new Dictionary<string, string>(); dc.Add("code" ...

  10. mac rar文件解压缩

    在下载文件时经常遇到RAR格式的压缩文件, 之前从APP Store下载了免费的解压软件, 但是总觉着不好用, 广告信息很多. 好用的软件都要花钱, 所以找到了命令行解决的办法. 步骤如下: 首先需要 ...