css BFC介绍

 BFC 即块级格式上下文(Block Formatting Context),它是指一个独立的块级渲染区域,只有block-level的box参与,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关。

BFC的生成

  1. 根元素
  2. float的值不为none
  3. overflow的值不为visible  常见的overflow为hidden 
  4. position的值为fixed或absolute
  5. display的值为table-cell / table-caption / inline-block / flex / inline-flex

BFC的布局规则

1.内部的盒子会在垂直方向,一个个地放置。

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

3.属于同一个BFC的两个相邻BOx的上下margin会发生重叠

4.计算BFC的高度时,浮动元素也参与计算

5.每个元素的左边,与包含的盒子的左边相接触,即使存在浮动也是如此;

6.BFC的区域不会与float重叠;

 

BFC能解决哪些问题

1.解决margin重叠问题

2.解决浮动高度塌陷问题

3.解决侵占浮动元素的问题

 

1:margin重叠问题

.box{
  width: 200px;
  height: 50px;
  margin: 30px 0;
  background: black;
}


<div class="box"></div>
<div class="box"></div>

明显的看到了出现了 margin的重叠问题 

满足于BFC规则的第三条  : 属于同一个BFC的两个相邻BOx的上下margin会发生重叠

说明两者属于同一个BFC,所以我们将两个div放到不同的BFC中,为第二个div套上一个父元素,然后通过设置overflow hidden来激活BFC

.box{
  width: 200px;
  height: 50px;
  margin: 30px 0;
  background: black;
}
.content{
  overflow: hidden;
}

<div class="box"></div>
<div class="content">
    <div class="box"></div>
</div>

 

2:浮动后高度塌陷问题    

.content1{
  width:300px; 
  border:1px solid black; 
}
.box1{
  float:left;
  width:100px;
  height:100px;
  border:1px solid red;
}

<div class="content1">
  <div class="box1"></div>
</div>

能够看到父元素没有被撑开,BFC规则第四条:
计算BFC的高度时,浮动元素也参与计算
所以我们要将父元素触发BFC

.content1{
  width:300px; 
  border:1px solid black; 

  overflow:hidden;
}
.box1{
  float:left;
  width:100px;
  height:100px;
  border:1px solid red;
}

<div class="content1">
  <div class="box1"></div>
</div>

3:侵占浮动元素的问题

.left{
  width: 100px;
  height: 100px;
  background: salmon;

  float: left;
}

.right{
  width: 300px;
  height: 200px;
  background: black;
}

<div class="left"></div>
<div class="right"></div>

满足了规则第五点:
每个元素的左边,与包含的盒子的左边相接触,即使存在浮动也是如此

所以我们要将红色区域撑到黑色区域的左边,就需利用规则第六条
BFC的区域不会与float重叠
我们给黑色区域right设置一个 overflow: hidden; 属性来触发BFC;

.right{
  width: 300px;
  height: 200px;
  background: black;
  overflow: hidden;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值