关于BFC

什么是BFC

bfc( 块级格式化范围 )是web页面中盒模型布局的CSS渲染模式,他决定了元素如何对其内容进行定位,以及与其他元素的关系核相互作用。当涉及到可视化布局的时候,bfc提供了一个HTML元素按照一定规则布局的环境。一个环境的元素不会影响其他环境的布局。所以BFC就是一个范围,也可以把它理解成一个独立的容器。

一个新的BFC可以通过给容器添加任何一个触发BFC的CSS样式,如overflow: scroll,overflow: hidden,display: flex,float: left,或者display: table来创建。

其一般的表现规则,大概有一下这些:

1,在创建了bfc元素中,其子元素按文档流一个接一个放置,垂直方向上他们的起点是一个包含块的顶部,两个相邻的元素之间的垂直距离取决于 ‘margin’ 特性

2、在bfc中,每一个元素左外边与包含块的左边相接触,即使存在浮动也是这样,除非这个元素也创建了一个新的Block Formatting Context。

3、bfc就是页面上的一个隔离的独立容器,容器里面的子元素不会在布局上影响到外面的元素,反之也是如此。

4、创建了bfc的元素不能与浮动元素重叠。

5、当容器有足够的剩余空间容纳BFC的宽度时,所有浏览器都会将BFC放置在浮动元素所在行的剩余空间内。

如何产生BFC

当一个HTML元素满足下面条件的任何一点,都可以产生Block Formatting Context:

float的值不为none。

overflow的值不为visible。

display的值为table-cell,

table-caption, inline-block中的任何一个。

position的值不为relative和static。

BFC的范围

它包含创建该上下文元素的所有子元素,但不包括创建了新BFC子元素的内部元素

例子:

<div id='div1' class='bfc'>

<div id='div2'>

<div id='div3'></div>

<div id='div4'></div>

</div>

<div id='div5' class='bfc'>

<div id='div6'></div>

<div id='div7'></div>

</div>

</div>

上面这段代码表示,#div_1创建了一个块格式上下文,这个上下文包括了#div_2、#div_3、#div_4、#div_5。即#div_2中的子元素也属于#div_1所创建的BFC。但由于#div_5创建了新的BFC,所以#div_6和#div_7就被排除在外层的BFC之外。

这从另一角度说明,一个元素不能同时存在于两个BFC中。

BFC的一个最重要的效果是,让处于BFC内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。

BFC的效果

就如刚才提到的,BFC的最显著的效果就是建立一个隔离的空间,断绝空间内外元素间相互的作用。然而,BFC还有更多的特性:

1.内部的盒会在垂直方向一个接一个排列

2.处于同一个BFC中的元素相互影响,可能会发生margin collapse

3.计算BFC的高度时,考虑BFC所包含的所有元素,连浮动元素也参与计算

6.浮动盒区域不叠加到BFC上

总结

以上就是BFC的分析,BFC的概念比较抽象,但通过实例分析应该能够更好地理解BFC。在实际中,利用BFC可以闭合浮动,防止与浮动元素重叠。同时,由于BFC的隔离作用,可以利用BFC包含一个元素,防止这个元素与BFC外的元素发生margin collapse等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,790评论 1 92
  • 1.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的例子。 在CSS中,两...
    尹萨萨阅读 901评论 0 2
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 963评论 0 2
  • BFC 是什么? 首先BFC(Block Formatting Contexts)中文是块级格式化上下文。BFC是...
    1w1ng阅读 412评论 0 0
  • 先前在学习CSS float时,有同学提到了BFC这个词,作为求知好问的好学生,哪里不懂查哪里,那么今天就来研究一...
    这名字真不对阅读 6,572评论 3 19