什么是BFC

什么是BFC?
BFC(Block formatting context)直译为“块级格式化上下文”。它是一个独立的渲染区域,只有Block-level box(块)参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。
BFC 的布局规则
一、内部的Box会在垂直方向,一个接一个地放置。
二、Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠(按照最大margin值设置)
三、每个元素的margin box的左边, 与包含块border box的左边相接触四、BFC的区域不会与float box重叠。
五、BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。
六、计算BFC的高度时,浮动元素也参与计算
依据BFC布局规则第二条:
Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠 注意:发生重叠后,外边距的高度等于两个发生重叠的外边距的高度中的较大者
案例:

<style type="text/css">			
                 div{		width: 100px;				
                                     height: 100px;			
                      }			
                 .box1{				
                                   background: #f00;				
                                  margin-bottom: 20px;			
                                  }			
                 .box2{				
                                 background: #0f0;				
                                 margin-top: 50px;			
                                 }		
      </style>	
      </head>	
      <body>		
                  <div class="box1"></div>		
                  <div class="box2"></div>	
      </body>

在这里插入图片描述
依据BFC布局规则第三条:
每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。 我们可以看到,虽然有浮动的元素box1,但是的左边依然与包含块的左边相接触
案例

<style type="text/css">			
                    div{        width: 100px;				
                                height: 100px;			
                                }			
                    .box1{				
                              float: left;				
                              background: #f00;							
                    }			
                    .box2{				
                             width: 200px;				
                             height: 200px;				
                             background: #0f0;						
                    }		
            </style>	
                    </head>	
         <body>		
                    <div class="box1"></div>		
                    <div class="box2"></div>	
      </body>

在这里插入图片描述
依据BFC布局规则第四条:
BFC的区域不会与float box重叠。 看代码和效果图,可以看出,这次的代码比上面的代码多了一行overflow:hidden;用这行代码触发新的BFC后,由于这个新的BFC不会与浮动的box1重叠,所以box2的位置改变了
案例

 <style type="text/css">			
 .box1{		
             width: 100px;				
             height: 100px;				
             float: left;				
 b         ackground: #f00;				
 }			
 .box2{				
            width: 100px;				
           height: 100px;				
           overflow: hidden;				
           background: #0f0;			
 }		
 </style>	
 </head>	
 <body>		
            <div class="box1"> </div>		
           <div class="box2"></div>	
 </body>

在这里插入图片描述
依据BFC布局规则第六条:
计算BFC的高度时,浮动元素的高度也参与计算。
案例

<style type="text/css">			
 .box1{
       border: 2px solid red;				
       background: #f00;				
       }			
 .box2{		width: 100px;		
                height: 100px;
                float: left;
                background: #0f0;			
      }		
 </style>	
 </head>	
 <body>		
 <div class="box1">			
 <div class="box2"></div>		
 </div>			
 </body>

在这里插入图片描述
当div增加 overflow:hidden; 时 效果如下

在这里插入图片描述
哪些元素和属性能触发BFC?
根元素(html)
float属性不为none
position为absolute或fixed
display为inline-block, table-cell, table-caption, flex, inline-flex
overflow不为visible
BFC的应用
1、自适应两栏布局
2、清除内部浮动
3、防止margin上下重叠

2020/3/1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值