【CSS】CSS中的BFC,是什么?

一、常见定位方案

普通流默认,从上而下,行内元素水平排列,行满换行,块级元素渲染成一个新行。
浮动先按普通流位置出现,然后根据浮动方向偏移。
绝对定位元素具体位置由绝对定位坐标组成。

二、什么是BFC

BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。

BFC 即 Block Formatting Contexts (块级格式化上下文),属于普通流。
可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。

三、形成BFC的条件

  1、浮动元素,float 除 none 以外的值; 2、绝对定位元素,position(absolute,fixed); 3、display 为以下其中之一的值 inline-block,table-cell,table-caption、flex; 4、overflow 除了 visible 以外的值(hidden,auto,scroll);5、body 根元素

四、BFC的特性

 1、内部的Box会在垂直方向上一个接一个的放置。2、垂直方向上的距离由margin决定3、bfc的区域不会与float的元素区域重叠。4、计算bfc的高度时,浮动元素也参与计算5、bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。

五、实例讲解

1、BFC中的盒子对齐

特性的第一条是:内部的Box会在垂直方向上一个接一个的放置。

<template><div id="app"><!-- 1、BFC中的盒子对齐 --><div class="container"><div class="box1"></div><div class="box2"></div><div class="box3"></div><div class="box4"></div></div></div>
</template><script>
export default {name: 'App',data(){return {}},methods:{}
}
</script><style scoped>
/* 1、BFC中的盒子对齐 */div {height: 20px;
}
.container {position: absolute;  /* 创建一个BFC环境*/height: auto;background-color: #eee;
}.box1 {width: 400px;background-color: red;
}.box2 {width: 300px;background-color: green;
}.box3 {width: 100px;background-color: yellow;float: left;
}.box4 {width: 200px;height: 30px;background-color: purple;
}
</style>

效果:

浮动的元素也是这样,box3浮动,他依然接着上一个盒子垂直排列。并且所有的盒子都左对齐。

2、外边距折叠

特性的第二条:垂直方向上的距离由margin决定
也会用到第五条特性: bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。

在常规文档流中,两个兄弟盒子之间的垂直距离是由他们的外边距所决定的,但不是他们的两个外边距之和,而是以较大的为准。

<template><div id="app"><div class="container"><div class="box1"></div><div class="box2"></div></div></div>
</template><script>
export default {name: 'App',data(){return {}},methods:{}
}
</script><style scoped>
.container {overflow: hidden;width: 100px;height: 100px;background-color: red;
}
.box1 {height: 20px;margin: 10px 0;background-color: green;
}
.box2 {height: 20px;margin: 20px 0;background-color: green;
}
</style>

效果:

这里我们可以看到,第一个子盒子有上边距(不会发生margin穿透的问题);两个子盒子的垂直距离为20px而不是30px,因为垂直外边距会折叠,间距以较大的为准。

那么有没有方法让垂直外边距不折叠呢?答案是:有。特性的第5条就说了:bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素,同样外面的元素不会影响到BFC内的元素。所以就让box1或box2再处于另一个BFC中就行了。

<template><div id="app"><!-- 特性的第5条:bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素,同样外面的元素不会影响到BFC内的元素。 --><div class="container"><div class="wrapper"><div class="box1"></div></div><div class="box2"></div></div></div>
</template><script>
export default {name: 'App',data(){return {}},methods:{}
}
</script><style scoped>
/* 特性的第5条:bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素,同样外面的元素不会影响到BFC内的元素。.container创建一个BFC环境.wrapper创建一个BFC环境
*/
.container {overflow: hidden;width: 100px;height: 100px;background-color: red;
}
.wrapper {overflow: hidden;
}
.box1 {height: 20px;margin: 10px 0;background-color: green;
}
.box2 {height: 20px;margin: 20px 0;background-color: green;
}
</style>

效果:

3、不被浮动元素覆盖

以常见的两栏布局为例。

左边固定宽度,右边不设宽,因此右边的宽度自适应,随浏览器窗口大小的变化而变化。

如果要是不加bfc的话就会被遮盖

<template><div id="app"><!-- 3、不被浮动元素覆盖  --><div class="column"></div><div class="column"></div></div>
</template><script>
export default {name: 'App',data(){return {}},methods:{}
}
</script><style scoped>
/* 3、不被浮动元素覆盖 .column:nth-of-type(2) 创建一个BFC环境:nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素.*/
.column:nth-of-type(1) {float: left;width: 200px;height: 300px;margin-right: 10px;background-color: red;
}
.column:nth-of-type(2) {overflow: hidden;height: 300px;background-color: purple;
}
</style>

效果:

还有三栏布局。

左右两边固定宽度,中间不设宽,因此中间的宽度自适应,随浏览器的大小变化而变化。

<template><div id="app"><!-- 三栏布局 --><div class="contain"><div class="column"></div><div class="column"></div><div class="column"></div></div></div>
</template><script>
export default {name: 'App',data(){return {}},methods:{}
}
</script><style scoped>
/* 三栏布局 */
.column:nth-of-type(1),
.column:nth-of-type(2) {float: left;width: 100px;height: 300px;background-color: green;
}
.column:nth-of-type(2) {float: right;
}
.column:nth-of-type(3) {overflow: hidden;height: 300px;background-color: red;
}
</style>

效果:

也可以用来防止字体环绕:

众所周知,浮动的盒子会遮盖下面的盒子,但是下面盒子里的文字是不会被遮盖的,文字反而还会环绕浮动的盒子。这也是一个比较有趣的特性。

<template><div id="app"><!-- 字体环绕 --><div class="left"></div><p>你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好</p></div>
</template><script>
export default {name: 'App',data(){return {}},methods:{}
}
</script><style scoped>
/* 字体环绕 p标签加不加bfc,实现不同效果 (overflow: hidden;) */
.left {float: left;width: 100px;height: 100px;background-color: yellow;
}
p {background-color: green;/* overflow: hidden; */
}
</style>

P标签不加BFC实现效果:

P标签加BFC实现效果:

4、BFC包含浮动的块

利用overflow:hidden清除浮动,因为浮动的盒子无法撑出处于标准文档流的父盒子的height。

BFC可以包含浮动的元素(清除浮动)

浮动的元素会脱离普通文档流,来看下下面一个例子:

 <!-- 4 BFC包含浮动的块 -->
<div style="border: 1px solid #000;"><div style="width: 100px;height: 100px;background: #eee;float: left;"></div></div>

效果:

由于容器内元素浮动脱离文档流,导致容器只剩下2px边距高度,我们这时候可以采用BFC:

<div style="border: 1px solid #000;overflow: hidden"><div style="width: 100px;height: 100px;background: #eee;float: left;"></div>
</div>

效果:

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

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

相关文章

适合小微企业的记账软件有哪些?

“涉及了很多的库存管理、进销存和记账&#xff0c;最好是这个软件可以随时看到我们公司的财务数据&#xff0c;且一定要安全&#xff01;” 进、销、存、财……进销存财管理就像是企业的大管家&#xff0c;管着货物、资金、成本、收入&#xff0c;保证一切有序运转。这些管理…

ISIS基本概率与配置(HCIP完整版)

目录 一、ISIS协议基础 1、ISIS概述&#xff08;认识ISIS&#xff09; 2、ISIS的应用 4、ISIS的工作过程 5、ISIS路由器的类型 6、ISIS区域 7、ISIS报文 8、ISIS基础配置 9、进程号&#xff1a; 10、NET地址 11、ISIS邻居关系 二、邻居表分析 1、ISIS邻居表字段解析…

Oracle11.2.0.4从RMAN备份中快速恢复单个表的方法

文章目录 前言一、查询所要恢复的表所涉及的表空间二、创建用于恢复的数据库三、恢复步骤1.恢复控制文件2.修改redo日志名称3.表空间恢复4.表空间recover5.查询数据 前言 由于用户误操作导致某表中的数据错乱&#xff0c;导致业务不能正常使用&#xff0c;现需要将该表恢复到一…

【FPGA】分享一些FPGA数字信号处理相关的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

更改邮箱发件人

更改邮箱发件人 未更改前发件人显示为发件人的邮箱地址 这里以outlook邮箱为例&#xff0c;进行邮箱发件人的更改 1.点击左上角“文件”选项 2.打开“账户设置”下拉菜单中的“账户设置” 3.选择“电子邮件”&#xff0c;点击该栏下的“更改”选项 4.在弹出页面中修改你…

机器学习原理到Python代码实现之NaiveBayes【朴素贝叶斯】

Naive Bayes 朴素贝叶斯算法 该文章作为机器学习的第二篇文章&#xff0c;主要介绍的是朴素贝叶斯算法的原理和应用。学习本章内容建议对概率论中的联合概率以及先验概率、后验概率有初步的学习和掌握。 难度系数&#xff1a;⭐⭐⭐ 更多相关工作请参考&#xff1a;Github 算法…

为什么流不关闭会导致内存泄漏

引言 经常有人告诉你流用完要记得关&#xff0c;不然会导致内存泄漏&#xff0c;但你是否考虑过下面这些问题: 为什么流不关会导致内存泄漏&#xff1f;JVM不是有垃圾回收机制吗&#xff1f;这些引用我用完不就变垃圾了为什么不会被回收呢&#xff1f;流未关闭除了导致内存泄…

node的下载、安装、配置

下载&#xff1a; 官网下载&#xff1a;Node.js 左右两个都可以&#xff1a; 安装&#xff1a; 打开cmd&#xff1a; 输入以下指令&#xff0c;如果出现版本号说明安装成功 node -v npm -v 配置&#xff1a; 1、新建文件夹&#xff1a;node_cache和node_global作为npm“缓…

前端实现搜索功能

最近遇到一个需求,用户在输入框输入关键字之后,点击搜索按钮后进行搜索,如下图,选中的数据在下面,上面展现的是搜索后的数据,现在选中了2条数据: 当用户输入KET后点击搜索,搜出的结果有16条,勾选全选选中后,将选中的16条的数据加到之前已选的2条数据里,于是此时已选…

重磅!大模型框架 LangChain 首个稳定版本终于来了!

著名的大模型智能体工具&#xff0c;现在有大版本更新了。 不知不觉&#xff0c;LangChain 已经问世一年了。作为一个开源框架&#xff0c;LangChain 提供了构建基于大模型的 AI 应用所需的模块和工具&#xff0c;大大降低了 AI 应用开发的门槛&#xff0c;使得任何人都可以基于…

oracle角色管理

常用角色 CONNECT,RESOURCE,DBA,EXP_FULL_DATABASE,IMP_FULL_DATABASE 1角色可以自定义&#xff0c;语法与创建用户一样 CREATE role role1 IDENTIFIED by 123; 2授权权限给角色 --自定义角色 CREATE role role1 IDENTIFIED by 123; --授权权限给角色 GRANT create view, …

AI人工智能从业人员《自然语言及语音处理设计开发工程师》证书专项培训(第二期)通知!

工业和信息化部电子工业标准化研究院联合北京龙腾亚太教育咨询有限公司和北京龙腾智元信息技术有限公司于2024年1月成功在京举办AI人工智能从业人员《自然语言及语音处理设计开发工程师》证书专项培训第一期课程&#xff0c;所有学员成功通过考试。介于学员的良好反应&#xff…

设置flex布局的元素,其子元素宽度和超过其本身时,其宽度值未被撑起问题

如图父元素main-content设置了display:flex. 里面包含了不确定个数的子元素&#xff0c;子元素样式为&#xff1a; flex: 1; min-width: 240px;现在想获取父元素的宽度&#xff0c;发现无论子元素的个数为多少&#xff0c;父元素的宽度都是一样的大小&#xff0c;并没有被子元…

Docker与微服务实战(基础篇)

Docker与微服务实战&#xff08;基础篇&#xff09; 1、Docker简介2、Docker安装步骤1.Centos7及以上的版本2.卸载旧版本3.yum安装gcc相关4.安装需要的软件包5.设置stable镜像仓库【国内aliyun】6.更新yum软件包索引--以后安装更快捷7.安装Docker-Ce8.启动Docker9.测试10.卸载1…

Socket closed 异常解决方案:如何解决 JMeter 压测中的问题

问题描述 JMeter 压测时会报 java.net.SocketException: Socket closed java.net.SocketException: Socket closed at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.ne…

Temu、Shopee、Lazada等跨境流量如何提升?买家号如何批量养号?

现在在temu、Lazada、shopee等跨境电商平台开店的商家越来越多。如果商家想让商店的产品得到更多的展示&#xff0c;流量是必不可少的&#xff0c;平台的流量入口主要有几个板块。 让我们谈谈temu、Lazada、shopee搜索流量如何提升&#xff0c;有什么方法。 有两种方法可以在短…

usb转32串口方案

方案结构图 使用usb hub芯片扩展4路usb然后再一分八路串口 USB hub 选择hub芯片注意事项&#xff1a; 目前市场上多数的USB 2.0 Hub芯片,只有内建一个Transaction Translators(STT)&#xff0c;因此 当Hub接收到如Full Speed的装置进入时&#xff0c;12Mbps的「单一」信道…

使用Moonbuilders Academy平台,学习DApp开发

Moonbeam团队于2022年宣布开放Moonbuilders Academy。这是一套以开发为中心的异步学习课程&#xff0c;用于学习如何在Moonbeam上构建跨链DApp。 如何从官网进入平台&#xff1f; 点击http://moonbeam.network 鼠标移动至 “Builders”&#xff0c;在Resources下方选择“Moo…

2024腾讯爱奇艺首发片单,谁能率先拿下开年爆款?

刚进入2024年&#xff0c;头部长视频平台就开启了新一轮“内卷”。 腾讯和爱奇艺不约而同地在2024年的第一天发布了新剧片单&#xff0c;多部高质量精品大剧蓄势待发&#xff0c;点燃了观众和市场的期待。 2023年之争已经落下帷幕&#xff0c;爱奇艺凭借大爆剧《狂飙》拔得头…

Next City 数都上海应用创新大赛结果公布,子虔科技获奖

12月16日&#xff0c;以“应变求机 以数谋新”为主题的上海城市数字化转型体验周举办。作为上海城市数字化转型年终重磅活动&#xff0c;上海市人民政府副秘书长庄木弟&#xff0c;市经济和信息化工作党委书记程鹏&#xff0c;杨浦区委副书记、区长周海鹰&#xff0c;市经济和信…