CSS 之 BFC

个人记笔记使用,如有描述不当的地方欢迎大家多多指教!
CSS BFC: 块级格式上下文,BFC是一个独立的区域,不会影响其他的区域的布局,每一个被bfc元素的子元素不会对外面的元素产生影响

BFC触发的条件:

1. body: body是bfc元素
2. float: left,right,(不是none默认值)
3. position:absolute、fixed、(非relative)
4. 块级元素overflow:scroll、auto、hidden、(非visible)
5. display: flex、inline-block、table-cell、table-caption、grid、(非none、非inline、非block)

元素或属性属性值
floatleft right (非默认值none)
positionabsolute、fixed、(非relative)
块级元素overflowscroll、auto、hidden、(非visible)
displayflex、inline-block、table-cell、table-caption、grid、(非none、非inline、非block)
根元素bodybody是bfc元素

BFC的特性
1、计算BFC的高度时,浮动元素也参与计算
2、bfc的区域不会与浮动元素的区域重叠

BFC实际应用:
分析一: 解决margin重叠问题

  <style>
    .box {
      width: 100px;
      height: 100px;
      background-color: #096;
      /* overflow: hidden; */
      /* float: left; */
      /* display: inline-block; */
      /* position: absolute; */
    }
    .box1 {
      width: 50px;
      height: 50px;
      margin-top: 30px;
      background-color: cornflowerblue;
    }
  </style>
  <body>
  <div class="box">
    <div class="box1"></div>
  </div>
</body>

现象:给子元素设置margin-top,但是作用到了父元素身上了,原本是要设置父元素与子元素之间的距离,没产生效果
如图所示:
在这里插入图片描述

=====================================================================================
在这里插入图片描述
原因分析:css外边距margin-top、margin-bottom 会重叠导致的,(看上图的定义),父子盒子之间没有非空内容分隔导致margin重合
解决办法:
1. 父级设置padding(破坏非空白的折叠条件)
2. 父级设置border-top,或者border即可(破坏非空白的折叠条件)
3. 给父级元素设置成bfc元素即可,比如:float、position、overflow、display、其中之一都可以
4. 子元素使用浮动或者绝对定位(原因暂时不清楚,后续补充)

margin重叠的解释建议看一下:外边距重叠

分析二: 解决清除浮动

  <style>
    .box {
      width: 100px;
      background-color: #096;
      border: 1px solid #000;
      /* overflow: hidden; */
      /* float: left; */
    }
    .box1 {
      width: 100px;
      height: 100px;
      float: left;
      background-color: cornflowerblue;
    }
  </style>
  <body>
  <!-- 高度坍塌是因为子元素浮动了,不占文档流,撑不开父元素了,子元素对父元素有影响,用bfc可以实现子元素形成独立的一块区域,
    不对外界造成影响 -->
  <div class="box">
    <div class="box1"></div>
  </div>
</body>

现象:父元素没设置高度,子元素浮动之后,高度塌陷了,高度坍塌是因为子元素浮动了,不占文档流,撑不开父元素了,子元素对父元素有影响,用bfc可以实现子元素形成独立的一块区域,不对外界造成影响
在这里插入图片描述
解决办法:
让父元素成为BFC元素 (其他办法后续补充)
分析三: bfc的区域不会与浮动元素的区域重叠

  <style>
    .container {
      width: 800px;
      background-color: aquamarine;

    }
    .container img {
      float: left;
      width: 300px;
    }
    .bfc {
      overflow: hidden;
    }
  </style>
<body>
<div class="container bfc">
    <img src="./1111111111111.png" alt="">
    <div class="box1">这是一段话</div>
  </div>
</body>

现象:img左浮动了,box1盒子的宽度占据了左边图片的位置,给box1盒子设置BFC属性
在这里插入图片描述
给box1盒子设置 bfc 类名

<body>
  <div class="container bfc">
    <img src="./1111111111111.png" alt="">
    <div class="box1 bfc">这是一段话</div>
  </div>
</body>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值