CSS中的BFC详细讲解(易懂)

news2024/11/17 12:29:01
带你用最简单的方式理解最全面的BFC~~~

1.先了解最常见定位方案

  1. 普通流

  • 元素按照其在 HTML 中的先后位置至上而下布局

  • 行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为完整的一个新行

  • 所有元素默认都是普通流定位

  1. 浮动

元素首先按照普通流的位置出现,然后根据浮动的方向尽可能的向左边或右边偏移

  1. 绝对定位

元素会整体脱离普通流,因此绝对定位不会对其兄弟元素造成影响

2.BFC讲解

BFC是属于普通流的,我们可以把BFC看成页面的一块渲染区,他有自己的渲染规则,简单来说就是BFC可以看做元素的属性,当元素有了BFC这个属性,这个元素可以看做隔离了的容器,容器里面的元素不会在布局上影响到外面的元素。

1.BFC特性

  1. 每一个BFC区域只包含其子元素,不包含其子元素的子元素

  1. 每一个BFC区域相互独立,互不影响

2.如何触发BFC

也就是说怎么给这个元素添加BFC属性,它需满足下列任一条件。

1. 根元素(<html>)

2. 设置float浮动,不包含none

3. 绝对定位元素 (元素的 position 为 absolute 或 fixed)

4. display 为 inline-block、table-cell、table-caption、table、table-row、table-row-groutable-header-group、table-footer-group、inline-table、flow-root、flex 或 inline-flex、grid 或 inline-grid

5. 设置overflow,不为visible

6. contain 值为 layout、content 或 paint 的元素

7. 多列容器(column-count 或 column-width (en-US) 值不为 auto,包括column-count 为 1)

更多查阅文档MDN

3.BFC的作用

1.第一个作用:避免外边距重叠

看个案例(面试也会出现)

.box{
    width: 200px;
    height: 200px;
    background: #5aa878;
    margin: 100px;
   }


<body>
    <div class="box"></div>
    <div class="box"></div>
</body>

大家认为上下盒子间距是200px吧(狗头)

结果是上间距100px的,这不是bug,这是一种规范。块的上外边距margin-top和下外边距margin-bottom会合并为单个边距,如果两个边距相等取其中一个,若大小边距不一样区最大边距,。

如何解决呢?

只需要将这两个div放置不同的BFC中,那么两个BFC的内容互不干扰。把代码修改如下:

.box{
      width: 200px;
      height: 200px;
      background: #5aa878;
      margin: 100px;
     }
.container{
       overflow: hidden;
     }


<div class='container'>
    <div class="box"></div>
</div>
<div class="container">
    <div class="box"></div>
</div>
给这两个box给各自一个div包裹,然后给这个div添加 overflow: hidden;属性触发container的BFC,最后就可以看到理想的结果200px

2.第二个作用:清除浮动

啥也不说上代码,看看是不是你想的那样

.container{
    border: 2px solid yellowgreen;
}
.content{
    width: 100px;
    height: 100px;
    background: #47cabf;
    margin: 100px;
    float: left;
}

<div class="container">
    <div class="content"></div>
</div>
你们想的应该是一个边框包裹着一个100px的方块,可结果不尽人意····

我们给子元素添加了浮动导致子元素脱离了文档流,所以只剩下2px的边框了。

如何解决?

同样我们给父容器添加BFC属性,添加overflow: hidden;属性触发BFC。这样就起到清除浮动的效果。

.container{
    border: 2px solid yellowgreen;
    overflow: hidden;
}
.content{
    width: 100px;
    height: 100px;
    background: #47cabf;
    margin: 100px;
    float: left;
}

<div class="container">
    <div class="content"></div>
</div>

这样就可以了。

3.防止元素被浮动元素覆盖

先上才艺,给两个盒子设置宽高颜色,其中一个设置浮动。

.box1{
    width: 100px;
    height: 100px;
    background: blue;
    float: left;
}
.box2{
    width: 200px;
    height: 200px;
    background: red;
}

<div class="box1"></div>
<div class="box2"></div>
你们想的结果可能是两个盒子独占一行,可是结果~~~

这里可以看到浮动元素覆盖了没有添加浮动的元素,如果想不被覆盖,可以触发正常的元素的BFC即可。所有在第二个元素添加overflow: hidden;属性,这样这两个属性就互不干扰。

.box1{
    width: 100px;
    height: 100px;
    background: blue;
    float: left;
}
.box2{
    width: 200px;
    height: 200px;
    background: red;
    overflow: hidden;
}

<div class="box1"></div>
<div class="box2"></div>

这样就正常了。

4.防止父子元素外边距塌陷

上菜~~

.box1{
    width: 200px;
    height: 200px;
    background: blue;
}
.box2{
    width: 100px;
    height: 100px;
    background: red;
    margin-top: 20px;
}

<div class="box1">
   <div class="box2"></div>
</div>
大家想的结果是父元素距离子元素20px,然而~~

给子元素添加margin-top:50px后,影响了父元素,给父元素添加BFC属性即可。

.box1{
    width: 200px;
    height: 200px;
    background: blue;
    overflow: hidden;
}
.box2{
    width: 100px;
    height: 100px;
    background: red;
    margin-top: 20px;
}

<div class="box1">
   <div class="box2"></div>
</div>

ok~~~

6.总结

  1. 一个BFC区域只包含它的子元素,不包含其子元素的子元素。

  1. 成为一个BFC区域要满足一定的条件

  1. 不同的BFC区域相互独立,互补影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过中断控制KUKA机器人暂停与再启动的具体方法示例

通过中断控制KUKA机器人暂停与再启动的具体方法示例 中断程序的基本介绍:  当出现例如输入信号变化等事先定义的事件时,机器人控制器中断当前程序,并处理一个已定义好的子程序  由中断而调用的子程序称为中断程序  最多允许同时声明32个中断  同一时间最多允许有16个…

Linux网络技术学习(六)—— 网络设备初始化(II)

文章目录初始化选项模块选项设备处理层初始化&#xff1a;net_dev_init用户空间辅助程序kmod解析热插拔虚拟设备虚拟设备范例通过/proc文件系统调整初始化选项 内核内建的组件以及模块加载的组件都能输入参数&#xff0c;使用户调整组件所实现的功能、重写默认值等 模块选项&…

Java微服务安全丨雪崩问题及解决方案

1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 如图&#xff0c;如果服务提供者I发生了故障&#xff0c;当前的应用的部分业务因为依赖于服务I&#xff0c;因此也会被阻塞。此时&…

微信小程序 之 原生开发

目录 一、前期预备 1. 预备知识 ​2. 注册账号 - 申请AppID 3. 下载小程序开发工具 4. 小程序项目结构 ​5. 小程序的MVVM架构 二、创建小程序项目 1. 查看注册的appId ​2. 创建项目 ​3. 新建页面 01 - 创建text页面文件夹 ​02 - 新建text的page ​03 - 在app.json中配置 ​…

从未想过制作数据可视化展示竟可以如此简单

还在跟着网络上一节课好几个小时的付费课程学习如何制作数据可视化大屏嘛&#xff1f;还在为不知道怎么设计数据展示排版而苦恼&#xff1f;今天教大家用最简单的方式制作一个数据可视化大屏&#xff0c;首先让我们看一下参考大屏样式&#xff1a;接下来我们将制作数据可视化大…

【Kubernetes】【九】Label,Deployment,Service

Label Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识&#xff0c;用来对它们进行区分和选择。 Label的特点&#xff1a; 一个Label会以key/value键值对的形式附加到各种对象上&#xff0c;如Node、Pod、Service等等一个资源对象可以定义任意数量的L…

Python正则表达式中group与groups的用法详解

本文主要介绍了Python正则表达式中group与groups的用法详解&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧目录在Python中&#xff0c;正则表达式的group和groups方…

阿里一面:你做过哪些代码优化?来一个人人可以用的极品案例

前言 在尼恩读者50交流群中&#xff0c;尼恩经常指导小伙伴改简历。 改简历所涉及的一个要点是&#xff1a; 在 XXX 项目中&#xff0c;完成了 XXX 模块的代码优化 另外&#xff0c;在面试的过程中&#xff0c;面试官也常常喜欢针对提问&#xff0c;来考察候选人对代码质量的追…

06 OpenCV 阈值处理、自适应处理与ostu方法

1 基本概念 CV2中使用阈值的作用是将灰度图像二值化&#xff0c;即将灰度图像的像素值根据一个设定的阈值分成黑白两部分。阈值处理可以用于图像分割、去除噪声、增强图像对比度等多个领域。例如&#xff0c;在物体检测和跟踪中&#xff0c;可以通过对图像进行阈值处理来提取目…

更专业、安全、可控!政企都选择WorkPlus私有化部署

现如今政企机构在信息化建设的过程中&#xff0c;内部的沟通协作都离不开即时通讯软件。但大多数企业使用的即时通讯软件都是Saas部署的&#xff0c;虽然使用Saas部署产品成本低&#xff0c;又方便快捷&#xff0c;但还是建议企业有条件最好使用私有化部署的即时通讯软件&#…

ERP是什么?中小商户有必要用吗?秦丝、金蝶、管家婆哪家强?

ERP系统刚开始传入中国的时候&#xff0c;基本上只有超大型或大型企业有条件实施&#xff0c;不过最近几年随着小微企业、中小商户的信息化需求不断增长&#xff0c;ERP软件已慢慢被普遍使用。但是仍然有不少中小商户&#xff0c;还没搞清楚ERP到底是什么&#xff0c;看到大家都…

【LeetCode】每日一题(5)

题目&#xff1a;2341. 数组能形成多少数对 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; class Solution { public:vector<int> numberOfPairs(vector<int>& nums) {} }; 解题思路&#xff1a; 做了一个星期的每日一题&#xff0c;终于…

自动驾驶:BEV开山之作LSS(lift,splat,shoot)原理代码串讲

自动驾驶&#xff1a;BEV开山之作LSS&#xff08;lift,splat,shoot&#xff09;原理代码串讲前言Lift参数创建视锥CamEncodeSplat转换视锥坐标系Voxel Pooling总结前言 目前在自动驾驶领域&#xff0c;比较火的一类研究方向是基于采集到的环视图像信息&#xff0c;去构建BEV视角…

疑似45亿地址信息泄露事件跟进后续

开放隐私计算 收录于合集#数据安全13个开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区…

重生之我是赏金猎人-漏洞挖掘(十一)-某SRC储存XSS多次BypassWAF挖掘

0x01&#xff1a;利用编辑器的超链接组件导致存储XSS 鄙人太菜了&#xff0c;没啥高质量的洞呀&#xff0c;随便水一篇文章吧。 在月黑风高的夜晚&#xff0c;某骇客喊我起床挖洞&#xff0c;偷瞄了一下发现平台正好出活动了&#xff0c;想着小牛试刀吧 首先信息收集了一下&a…

【ns-3】零基础安装教程

文章目录前言1. 安装虚拟机及Ubuntu2. 安装依赖库3. 下载ns-34. 构建ns-3前言 近期因工作需要开始接触ns-3。作者零基础&#xff0c;从零开始顺利完成了ns-3的安装。本篇为ns-3安装过程记录贴或针对小白的零基础教程。 本篇内容所使用到的软件版本信息如下&#xff1a;VMware…

这5个代码技巧,让我的 Python 加速了很多倍

Python作为一种功能强大的编程语言&#xff0c;因其简单易学而受到很多初学者的青睐。它的应用领域又非常广泛&#xff1a;科学计算、游戏开发、爬虫、人工智能、自动化办公、Web应用开发等等。 而在数据科学领域中&#xff0c;Python 是使用最广泛的编程语言&#xff0c;并且…

【Flink】Flink时间语义详解

简介 在流处理中&#xff0c;时间是一个非常核心的概念&#xff0c;是整个系统的基石。我们经常会遇到这样的需求&#xff1a;给定一个时间窗口&#xff0c;比如一个小时&#xff0c;统计时间窗口内的数据指标。那如何界定哪些数据将进入这个窗口呢&#xff1f;在窗口的定义之…

【C语言】程序环境和预处理|预处理详解|定义宏(下)

主页&#xff1a;114514的代码大冒 qq:2188956112&#xff08;欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ &#xff09; Gitee&#xff1a;庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 2.5带副作用的宏参数 2.6宏和函数的对比 3#undef ​编辑 4 命令行定义…