CSS-BFC

    block formatting context块级格式化上下文
    bfc是一个独立的渲染区域,只有block-level box参与,它规定了内部的block-level box如何布局,并且与这个区域外部毫不相干。
    BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之也如此,包括浮动和外边距合并等等,有了这个特性我们布局的时候就不会出现意外情况了。

哪些元素会产生bfc

display属性为block、list-item、table的元素,会产生bfc。(最常用的就是块级元素)

什么情况下会触发bfc

1. 设置了float属性,并且不为none
2. position属性为absolute或fixed
3. display为inline-block、table-cell、table-caption、flex、inline-flex
4. overflow属性不为visible

bfc元素所具有的特性

1. 在bfc中,盒子从顶端开始垂直地一个接一个的排列;
2. 盒子垂直方向的距离由margin决定,属于同一个bfc的盒子的margin会重叠;
3. 在bfc中,每一个盒子的左边缘会触碰到父容器的左边缘内部,也就是说在没有margin和padding时,父border的内边和子border的外边重叠;
4. bfc的区域不会与浮动盒子产生交集,而是紧贴浮动边缘;
5. 如果父盒子没有设置高度,但子盒子中有浮动元素,那么在计算bfc的高度时, 会计算上浮动盒子的高度。

bfc的主要用途

清除元素内部浮动

    只要把父元素设置为bfc就可以清除子元素的浮动,最常见的就是给父元素添加overflow:hidden属性。
    啥意思呢,其实我有一段时间不是很明白“清除子元素浮动”这句话,人家设置的好好的浮动,你干嘛给人家清除呢,那不就是不生效了么?其实清除浮动的意思不是清除你设置的元素的浮动属性,而是清除设置了浮动属性之后给别的元素带来的影响。举个栗子:

<div class="father">
     <div class="son1"></div>
     <div class="son2"></div>
</div>
.father {
    width: 150px;
    border: 1px solid red;
}

.son1, .son2 {
    width: 50px;
    height: 50px;
    background-color: pink;
}

.son2 {
    background-color: purple;
}

正常情况下的样子是上下块撑开父元素的高度

image.png

当给两个子元素设置了float属性之后,子元素不再占据父元素的空间,此时父元素的高度就为0
image.png

当设置父元素bfc后,此时就清除了子元素浮动带来的影响,什么影响呢,就是不撑开父元素的高度的影响,那么父元素的高度就是子元素的高度
为父元素添加

overflow: hidden;
image.png

解决外边距合并问题

    我们知道,两个盒子在一起时,当有相邻的外边距时,会取外边距较大的那一个,也就是外边距会合并,但这种情况只发生在同属一个bfc的两个盒子中间,换言之,要想解决外边距合并问题,只要把两个盒子放在不同的bfc中即可。

制作右侧盒子自适应宽度的问题(左侧盒子宽度固定,右侧宽度不固定)

    当在父元素中只设定一个盒子浮动,另一个不浮动时,会造成第二个盒子在第一个盒子的下方,被覆盖掉一部分(但文字不会被覆盖)。

.father2 {
    width: 200px;
    border: 1px solid red;
}

.s1 {
    width: 50px;
    height: 50px;
    background-color: pink;
    float: left;
}

.s2 {
    background-color: purple;
    height: 100px;
}
image.png

给第2个元素设定bfc

.s2 {
    background-color: purple;
    height: 100px;
    overflow: auto;
    word-break: break-all;
}
image.png

当增加第一个块的宽度时,第二个块的宽度会自动缩小,实现宽度自适应。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,841评论 1 92
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 989评论 0 2
  • 一,浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动模型是一种可视化格式模型,浮动...
    DeeJay_Y阅读 917评论 0 4
  • 1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 任何定义为float的元素,都可以...
    QQQQQCY阅读 276评论 0 0
  • 一、在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例 在CSS当中,相...
    dengpan阅读 618评论 0 0