32 BFC原理

定义

BFC(Block Formatting Context – 块级格式化上下文)是布局过程中生成会块级合资的区域,也是浮动元素与其他元素的交互限定区域。

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

在一个块格式化上下文中,盒在竖直方向一个接一个地放置,从包含块的顶部开始。

两个兄弟盒之间的margin不会合并,属于同一个BFC的块级元素之间的margin会合并

BFC元素特性表现原则就是,内部子元素再怎么翻江倒海,翻云覆雨都不会影响外部的元素。所以,避免margin合并,清除浮动什么的也好理解了。

会产生BFC的情况

  1. 根元素
  2. float属性不为none
  3. positionabsolutefixed
  4. displayinline-block, table-cell, table-caption, flex, inline-flex
  5. overflow不为visible

BFC的应用

平时好多布局的技巧其实都利用了BFC的规则,只不过自己不清楚。

自适应两栏布局

利用的规则:每个元素的左边,与包含border的BFC元素的左边相接触,即使存在浮动一仍然如此

<style>
  * {
    margin: 0;
    padding: 0;
  }
  .left {
    width: 100px;
    height: 50px;
    float: left;
    background: red;
  }
  .right {
    height: 50px;
    background: fuchsia;
  }
</style>

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

清除浮动坍塌

利用的规则:

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

.baba {
  border: 10px solid red;
  min-height: 10px;
  display: inline-block; /*触发BFC*/
}
.erzi {
  background: green;
  float:left;
  width: 300px;
  height: 100px;
}

image

防止垂直margin合并

利用的规则:

Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠

<style>
  p {
    color: #f55;
    background: #fcc;
    width: 200px;
    line-height: 100px;
    margin: 100px;
}
</style>
<body>
  <p>Haha</p>
  <p>Hehe</p>
</body>

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值