十年如一日的经典考题: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开发的基本,熟悉掌握页面开发规则,能使得你的开发事半功倍。

相关推荐
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
(⊙o⊙)~哦4 小时前
JavaScript substring() 方法
前端
无心使然云中漫步5 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者5 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_5 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
麒麟而非淇淋6 小时前
AJAX 入门 day1
前端·javascript·ajax
2401_858120536 小时前
深入理解MATLAB中的事件处理机制
前端·javascript·matlab
阿树梢6 小时前
【Vue】VueRouter路由
前端·javascript·vue.js
随笔写8 小时前
vue使用关于speak-tss插件的详细介绍
前端·javascript·vue.js
史努比.8 小时前
redis群集三种模式:主从复制、哨兵、集群
前端·bootstrap·html