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

相关推荐
野生技术架构师1 小时前
一线大厂Java面试八股文全栈通关手册(含源码级详解)
java·开发语言·面试
柳杉1 小时前
震惊!字符串还能这么玩!
前端·javascript
是上好佳佳佳呀2 小时前
【前端(五)】CSS 知识梳理:浮动与定位
前端·css
wefly20172 小时前
纯前端架构深度解析:jsontop.cn,JSON 格式化与全栈开发效率平台
java·前端·python·架构·正则表达式·json·php
我命由我123454 小时前
React - 类组件 setState 的 2 种写法、LazyLoad、useState
前端·javascript·react.js·html·ecmascript·html5·js
自由生长20244 小时前
IndexedDB的观察
前端
IT_陈寒5 小时前
Vite热更新坑了我三天,原来配置要这么写
前端·人工智能·后端
斯班奇的好朋友阿法法5 小时前
离线ollama导入Qwen3.5-9B.Q8_0.gguf模型
开发语言·前端·javascript
掘金一周5 小时前
每月固定续订,但是token根本不够用,掘友们有无算力焦虑啊 | 沸点周刊 4.2
前端·aigc·openai
小村儿5 小时前
连载加餐01-claude code 源码泄漏 ---一起吃透 Claude Code,告别 AI coding 迷茫
前端·后端·ai编程