CSS 布局之 —— BFC

1. BFC 是什么?

BFC--块级格式化上下文(Block Formatting Context),是一个独立渲染的块级盒子,其内部的元素与外部的元素相互隔离,内外元素的定位不会相互影响。

2. 应用

2.1 清除浮动
  • 浮动元素是脱离文档流的,如下图:
  • 对应代码:

html 部分:

<div class="container-clear-none">
  <div class="floated">
    Floated element
  </div>
  BFC特性:其内部的所有元素都会被其包裹。
</div>
复制代码

css 部分:

.container-clear-none{
    background-color: #f5d3dc;
}
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}
复制代码

若触发浮动元素的父级容器的BFC,那么容器会包裹浮动元素,起到清除浮动的作用。

  • 对应代码:

html 部分:

<div class="container-clear">
  <div class="floated">
    Floated element
  </div>
  BFC特性:其内部的所有元素都会被其包裹。
</div>
复制代码

css 部分:

.container-clear{
    background-color: #f5d3dc;
    overflow: hidden;
 }
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}
复制代码
2.2 清除文字环绕

同一容器内,与浮动元素同级的元素会有部分被覆盖,但文字不会,而是会环绕浮动元素。

  • 对应代码:

html 部分:

<div class="container">
  <div class="floated">
    Floated element
  </div>
  <div>BFC特性:包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。</div> 
</div>
复制代码

css 部分:

.container {
    background-color: #f5d3dc;
    overflow: hidden;
}
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}
复制代码

有些情况下不想要第二个元素被覆盖,可触发第二个元素的 BFC ,则第二个元素不会被覆盖,这种方法也可用来实现两列自适应布局。

  • 对应代码:

html 部分:

<div class="container">
  <div class="floated">
    Floated element
  </div>
  <div class="text">BFC特性:包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。</div>
</div>
复制代码

css 部分:

.container {
    background-color: #f5d3dc;
    overflow: hidden;
}
.container > .text {
    background-color: rgb(183, 245, 242);
    overflow: hidden;
}
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}
复制代码
2.3 清除 margin 叠加

margin 叠加:当两个垂直边界相遇时,它们将形成一个边界。这个边界的高度等于两个发生叠加的边界的高度中的较大者。

  • 对应代码:

html 部分:

<div class="container-margin-none">
  <div class="block">block 1</div>
  <div class="block">block 2</div>
  <div class="block">block 3</div>
</div>
复制代码

css 部分:

.container-margin-none {
    background-color: #f5d3dc;
    overflow: hidden;
}
.container-margin-none div {
    background-color: lightgreen;
    margin: 20px 0;
}
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}
复制代码

若想清除 margin 叠加,可触发某个元素的BFC,则这个元素会是一个独立的区域,不再产生 margin 叠加。

  • 对应代码:

html 部分:

<div class="container-margin">
  <div class="block">block 1</div>
  <div class="block">block 2</div>
  <div class="newBFC">
    <div class="block">block 3</div>
  </div>
</div>
复制代码

css 部分:

.container-margin {
    background-color: #f5d3dc;
    overflow: hidden; 
 }
.container-margin .block {
    margin: 20px 0;
    /* height: 20px; */
    background-color: lightgreen;
}
.container-margin .newBFC {
    overflow: hidden;
 }
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}
复制代码

3. 常用的 BFC 的触发条件

转载于:https://juejin.im/post/5c66585f6fb9a049ad7792c8

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值