一、什么是BFC浏览器
BFC(Block Formatting Context,块级元素格式化上下文)是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其余元素的关系和相互做用;布局
(BFC的全名是block formatting context,翻译成中文就是块级元素格式上下文,听起来有些别扭,字面上的意思大概就是一个元素的布局上下文类型。)性能
简 单的说,BFC就是一种布局方式,在建立了 BFC后,其子元素会一个接一个地放置:盒子们从所在的 containing block 顶部起,水平方向上一个接一个撑满整个宽度,垂直方向上它们的起点是包含块的顶部,两个相邻的元素之间的垂直距离取决于 ‘margin’ 特性。在 同一个BFC中,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有间隔(即父元素的边框,非空内 容,padding等)就会发生margin重叠,即margin会发生重合。更重要的是:建立BFC,能消除元素对相邻元素的布局影响,常见的应用 是:使用overflow:hidden建立BFC ,来清除浮动元素对后面元素的布局影响 。spa
二、怎么建立BFC翻译
当一个HTML元素知足下面条件的任何一点,均可以触发BFC:orm
float的值不为”none” (如:float:left/right)内存
overflow的值不为”visible”(如:overflow:hidden)it
display的值为 “table-cell”, “table-caption”, or “inline-block”中的任何一个io
position的值不为 “static” 或 “relative”中的任何一个(如:position:absolute)table
三、关于Haslayout
(1)hasLayout是ie私有的概念,ie7及更低版本的ie浏览器不支持BFC,但咱们能够针对ie七、6浏览器加入对应的hasLayout规则来实现BFC的效果
(2)Windows IE 专有(只有IE5.5/6/7支持?)
·(3)是HTML元素的一个属性,该属性的值为布尔值。
(值为false的元素能够经过某些方法使Haslayout值变为true,而值为true的元素没法变回false)
(4)表现形式与BFC元素很类似
haslayout:hasLayout 是IE内部的一个特有的隐形属性,属性值为true/false。元素一旦拥有了这 个属性,就拥有了布局,也就是说该元素能够对本身及其子元素进行尺寸计算和定位(比起依赖父元素进行布局会花费更大的代价)。因为这个元素是隐形的,不能 经过CSS来设置hasLayout:true/false;能够经过js来检测元素是否拥有布局。hasLayout是只读属性,一旦触发,不可逆转。 有些元素自己就默认拥有布局,有的元素能够经过一些CSS属性设置(如display、width、height等)来激发产生布局。并非全部元素都拥有布局的缘由是为了简洁和提升性能,拥有布局会消耗内存,并不轻量,会下降性能。最经常使用的是在CSS中设置zoom:1;来激发布局,不会产生任何其余影响的状况下让元素拥有布局。
四、使用BFC和hasLayout应该注意的问题
一、浮动和不浮动元素间,ie6会有3px的间隙,这是ie6的bug,解决方法是:若浮动元素是左浮动,则给左浮动元素加margin-right:-3px;若浮动元素是右浮动,则给右浮动元素 加margin-left:-3px;
二、overflow:hidden触发BFC的同时,也能触发ie7的hasLayout,但overflow:hidden是ie7新添加的触发hasLayout的新属性,ie6并不支持,所以要兼容ie6必须加_zoom:1;
未完待续。。。。。。