十年如一日的经典考题:BFC容器与清除浮动

前言

在上一篇章的学习中我们学习了浮动布局和如何解决高度塌陷问题,我们来回顾一下,清除浮动的方法有哪几种?四种,1.直接设置,2.使用clear:both,3.设置伪元素,4.触发BFC容器。今天我们将展开来学习BFC容器,什么是BFC容器,怎么触发BFC容器?

BFC容器

BFC容器,即块级格式化上下文(Block Formatting Context)容器

BFC容器通过创建一个独立的布局环境,解决了父元素高度塌陷、边距合并、清除浮动带来的布局问题以及图文环绕等问题,是CSS布局中一个非常有用的概念。在实际开发中,合理利用BFC可以大大提高布局的效率和可控性。

BFC解决了哪些问题

解决Margin重叠问题

当元素上下排列时时常会遇到Margin重叠的问题,就像下面这个例子

我设置了两个容器垂直排列,为他们设置了margin为50px,但是在垂直方向上他们发生了margin的问题。我原本想让他们分割开100px的距离。现在只有50px,我该怎么解决呢?

我们只需要给其中一个元素的父容器(或任何一个包裹它们的容器)创建BFC,我们可以简单地给其中一个容器的父容器设置overflow: hidden或其他能触发BFC的属性

下面以两个div举例,我会将其中一个div设置为BFC容器来避免margin重叠问题

css 复制代码
.bfc-wrapper {
        overflow: hidden;
        /* 触发BFC */
    }

    .div1,
    .div2 {
        margin: 50px;
        background-color: lightblue;
        padding: 10px;
    }
html 复制代码
 <div class="bfc-wrapper">
        <div class="div1">Div 1</div>
    </div>

    <div class="div2">Div 2</div>

以下是将其中一个容器的父容器设置为BFC容器的前后变化效果

解决父元素高度塌陷问题

回到我们今天的主题,还记得在上一篇的学习中我们通过设置BFC容器来消除浮动,解决高度塌陷问题。那么有哪些方法能触发BFC容器呢?

  1. 设置浮动 :给父元素设置float属性

当子元素浮动时,父元素也浮动,高度不会塌陷,但是可能会带来更多的问题,不建议使用

  1. 设置定位 :给元素设置position属性为absolutefixed

高度塌陷通常指的是当父元素内部的所有子元素都脱离了文档流(比如通过绝对定位或浮动)时,父元素的高度不再由子元素支撑,在没有其他内容或边框、内边距等时变为0。

当子元素脱离文档流导致父元素发生高度塌陷时,将父元素也脱离文档流,将恢复高度

给出以下例子:

css 复制代码
  .bfc-wrapper {
        position: absolute;
    }

    .div1,
    .div2 {
        margin: 50px;
        background-color: lightblue;
        padding: 10px;
        float: left;
    }
html 复制代码
 <div class="bfc-wrapper">
        <div class="div1">Div 1</div>

        <div class="div2">Div 2</div>
    </div>

所以当使用绝对定位和固定定位使父元素脱离文档流时,父元素高度不会塌陷。

  1. 设置overflow :给元素设置overflow属性为hiddenscrollauto

当为父元素设置 overflow时将触发BFC,清除浮动解决高度塌陷。

  1. 设置display :给元素设置display属性为inline-blocktable-celltable-captionflexinline-flex
  • display: flex; 会使容器成为一个块级元素,其子元素会按照 Flexbox 布局排列。
  • display: inline-flex; 会使容器成为一个行内级元素,这意味着容器本身会像 inline-block 那样显示,但它内部会按照 Flexbox 布局排列子元素。这允我们在不破坏文档流的情况下,对一组元素应用 Flexbox 布局。

阻止元素被浮动元素覆盖

在布局中,浮动元素可能会覆盖其他元素。通过将受影响的元素设置为BFC容器,可以防止其被浮动元素覆盖。

举个例子,比如下面这两个元素

当我们将被覆盖元素变成BFC容器时,两个元素将不会重叠

总结

在本文的学习中我们理解了什么是BFC容器,以及BFC容器的用途,用于解决的问题。在开发项目的过程中,BFC的运用是CSS开发的基本,熟悉掌握页面开发规则,能使得你的开发事半功倍。

相关推荐
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
m0_748255022 小时前
前端常用算法集合
前端·算法
真的很上进2 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203982 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2342 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
测试老哥3 小时前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
如若1233 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~4 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语4 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
supermapsupport4 小时前
iClient3D for Cesium在Vue中快速实现场景卷帘
前端·vue.js·3d·cesium·supermap