聊聊BFC吧

今天看了不少博文,整理一下关于BFC的知识

BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

基本规则:

                   内部的Box会在垂直方向,一个接一个地放置。Box垂直方向的距离由margin决定。

                   属于同一个BFC的两个相邻Box的margin会发生重叠每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。

                    BFC的区域不会与float box重叠。

                   BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。

                   反之也如此。计算BFC的高度时,浮动元素也参与计算

                  当我们设置浮动,绝对定位,fixed定位,或是display设置inline-block,设置浮动之类的。都可以触发BFC。

作用:

                   (1)通过给父元素设置BFC(比如加上overflow:hidden)可以让父元素根据子元素大小自适应调整,哪怕子元素是浮动元素。如图所示

<div style="border:1px solid #00F;overflow:hidden;width:300px;">
<div style="float:left;background:#939;">我的父元素是 BFC</div>
</div> 

<div style="border:1px solid gray;width:300px;">
<div style="float:left;background:#3C6;">我的父元素不是 BFC</div>
</div>

效果如下


    (2)-给兄弟元素加BFC避免浮动元素覆盖。代码如下

<div style="width:200px;height:80px;background:#30F;color:#fff;">
我是非浮动元素,并且没有创建 BFC
</div>
<div style="float:left;width:150px;height:50px;background:#FF0;">
我是浮动元素
</div> 
效果如下


这里要注意的是,如果兄弟元素超过父元素宽度,则兄弟元素自动会去下一行。

(3)BFC还能解决父子元素margin-top重叠的麻烦问题。这也是我一开始研究BFC的原因,margin重叠的时候,子元素的margin-top会作用到父元素上面的元素去,非常麻烦

代码如下

<div style="margin-top:20px;background:yellow;width:300px;">
<div style="margin-top:20px;">
我的上外边距是 20px,父级元素不是 BFC
</div>
</div>
<div style="margin-top:20px;background:yellow;overflow:auto;width:300px;">
<div style="margin-top:20px;">
我的上外边距是 20px,父级元素是 BFC
</div>
</div>
效果如图



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值