CSS布局基础——BFC
liuian 2024-12-13 14:53 48 浏览
what's BFC?
第一次看到这个名词,我是拒绝的,css什么时候还有这个东西?于是迫不及待的google了一下,才发现原来它无时无刻不在我们的css当中,只不过它并不是一个属性,不需要我们平常使用手写罢了。但是它的重要性确是杠杠的,可以这么说,没有它就就没有什么css布局。 BFC,全称 Block Formatting Context,翻译成块级格式化上下文,它就是一个环境,HTML元素在这个环境中按照一定规则进行布局。一个环境中的元素不会影响到其它环境中的布局。
看一大堆文字可能有点抽象,现在拿个js函数来比喻说明一下吧,我们现在有一个叫做bfc的函数,而一个函数就是一个块级作用域,这里面所有的变量申明、运行都在这个块级作用域内进行。理所当然,一个环境中的变量不会影响到其它环境变量。
var box =1;
function bfc{
var box = "2";
console.log(box);
}
bfc;//2
console.log(box)//1所以,我们是不是可以这样理解:所谓的BFC就是css属性的执行域?
BFC的生成
既然js可以通过函数等方法来实现块级作用域,我想那css肯定也是可以通过一些手段来实现BFC的。 这里BFC的官方文档写到:
Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with ‘overflow’ other than ‘visible’ (except when that value has been propagated to the viewport) establish new block formatting contexts for their contents.
从这段描述可以清楚知道,以下方法可以创建一个新的块级执行上下文(BFC):
- 浮动元素、
- 绝对定位元素,
- 块级元素以及块级容器(比如inline-block、table-cell、table-capation)
- overflow值不为visible的块级盒子
当然,root元素会自动生成一个BFC,这个应该很好理解,毕竟需要一个根BFC来布局
执行规则
既然存在了执行环境,那肯定会存在执行规则。BFC的
1.在一个块级排版上下文中,盒子是从包含块顶部开始,垂直的一个接一个的排列的。每个盒子的左外边是触碰到包含块的左边的(对于从右向左的排版,则相反)
这个应该不难理解。就是我们如果在
里写几个<div>,它会依次垂直排列,并且都是在页面的最左边(对于从右向左的排版,则相反)。
2.相邻两个盒子之间的垂直的间距是被margin属性所决定的,在一个块级排版上下文中相邻的两个块级盒之间的垂直margin是折叠的。
这句描述是不是超级熟悉,这不是我css常见的边距折叠问题吗?现在知道它出自哪里了吧,就是这里。下面的俩个盒子各有上下20px的间距,加起来应该有40px,但显然,现在只有20px;
<style>
.top{
width:100px;
height:100px;
background:#000;
margin:20px 0;
}
.bottom{
width:100px;
height:100px;
background:#000;
margin:20px 0;
}
</style>
<div class="top"></div>
<div class="bottom"></div>发生边距折叠是因为同一个BFC的关系(根BFC)。既然知道原因,解决就好办了,让他们俩个不在同一个BFC就ok啦。3. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。
通过这条属性,我们又可以想到哪些呢。对,浮动元素的塌陷问题。我们知道,一个元素中的子元素浮动了,这个父元素就会发生高度塌陷问题。下例中一旦内部的红色元素浮动,蓝色的盒子就无法被撑起,高度会变成0。
<style>
.wrap{
width:150px;
background:#ADD9E6;
margin:20px 0;
}
.in{
width:100px;
height:100px;
background:#FFCCCC;
margin:20px 0;
//float:left;
}
</style>
<div class="wrap"><div class="in"></div></div>现在我们知道了,这是因为浮动元素创建了一个新的BFC,成为了一个独立的容器,不会影响到外面的父元素了。它的定位规则不再受制于这个父元素了。如何解决这一问题?我们知道只要在在父元素加上overflow:hidden可以清除浮动。但是这又是为什么?
其实,这就是前面提到的overflow:hidden可以生成一个新的BFC,而这个浮动的子元素,被它所包含了,从而成为一个独立容器,它的float外溢不了了,外面的元素不再受其浮动的影响,从而达到了清除浮动的作用。
相关推荐
- 联想win7原版(联想正版win7原版)
-
要还原联想笔记本自带的Win7系统,首先需要进入电脑的BIOS界面,将启动项设置为光驱或U盘。然后将联想笔记本自带的恢复盘或安装盘插入电脑,并重启电脑。接着按照提示进行操作,选择还原系统选项,等待系统...
- bonjour软件有用吗(bonbon是啥软件)
-
1.bonjour软件是苹果公司在其开发的操作系统MacOSX10.2版本之后引入的服务器搜索协议所使用的一个商标名。2.安装了类似的itunes的软件以后,电脑上就会出现Bonjour软件...
- 笔记本电脑开机蓝屏无字(笔记本屏幕蓝屏什么字也没有)
-
初步怀疑是电脑温度过高导致的问题。出现蓝屏毛病的原因很多:1、电脑蓝屏是由于病毒破坏系统文件,导致系统故障进而出现蓝屏。2、电脑超频过度引起电脑蓝屏,这也可能涉及到下面的温度过高引起的蓝屏。3、内存条...
- 文件格式转换器免费版(文件格式转换器免费版下载安装)
-
一般来说,使用全能格式转换器转换文件的步骤大致如下:1.打开全能格式转换器,并点击“添加文件”按钮,选择您要转换的文件。2.在“输出格式”选项中,选择您想要将文件转换成的格式。3.如果需要,您可...
- 口碑最好的随身wifi品牌(随身wifi十大排名)
-
哪个牌子最好用性价比最高一目了然!格行设备价格:69/99/109/139/168(性价比高)芯片:进口马维尔芯片套餐:双网设备,套餐价格一致,随用随充续航:3000毫安18小时左右 33...
- 新买的台式电脑没声音(新买的台式机没有声音)
-
解决方法如下:1、查看主板的声卡驱动装没装上。2、驱动装好了,在右下角的小喇叭有没有,如果有,鼠标放在上面,右击就会看到声音的各种设置,如果没看到小喇叭,进入设备管理器看一下声音的硬件上是否有黄色标记...
- 三星笔记本u盘启动快捷键(三星笔记本u盘启动设置)
-
开机出现“SAMSUNG”画面时按F2进入BIOS设置,找到【Advanced】选项下,将快速启动“FastBIOSMode”项选为“Off”2.按F10键保存退出并重启,插入U盘,再次按F2键进入B...
- 普联无线路由器设置(普联路由器上网设置)
-
关于这个问题,以下是普联无线路由器的设置步骤:1.首先,将您的普联无线路由器与电脑或笔记本电脑连接。2.打开您的浏览器,输入路由器的IP地址(通常为192.168.1.1或192.168...
- 万兴数据恢复专家免费版(万兴数据恢复专家app)
-
手机版本目前还在开发当中,目前只有电脑版本跟网页版万兴数据管家,非常靠谱!这是一款专门针对苹果微信数据管理的软件,能够恢复苹果手机聊天记录、聊天记录备份、聊天记录导出!支持微信免费备到本地电脑,包括聊...
- 笔记本电脑怎么打开摄像头功能
-
看你的情况是,笔记本自带摄像头吧!如果是的话,只要和别人用通讯工具(支支视频,比如qqskype)聊天时,都可以自动打开!如果想单纯的自拍,打开“我的电脑”认真看,有一个选项(除了硬盘分区、光驱之外)...
- w7主题设置(w7怎么换主题)
-
1、打开win7系统电脑左下角“开始”菜单,找到【控制面板】点击打开;2、进入控制面板界面,右上方【查看方式】更改为“小图标”,然后找到【管理工具】打开;3、进入“管理工具”,点击打开【服务】选项;4...
-
- 显卡温度多少正常范围(显卡温度一般在什么范围合理)
-
1、正常情况下显卡的温度是在30至85这个区间。2、如果是天气热一点的话,保持在50至85也是属于正常的。3、如果电脑在玩着大型游戏,显卡温度达到90以上都是有可能的。4、但如果你的显卡温度超过95度的话,就要注意一下了,这个时候可以保持室...
-
2026-01-03 01:55 liuian
- 惠普1008打印机驱动安装教程
-
首先,你可以从惠普官网下载最新的驱动程序并解压缩。接下来,双击解压后的驱动文件并跟随提示完成安装。如果你遇到任何问题,可以尝试用管理员权限运行安装程序或尝试重新启动电脑后再次安装驱动。最后,检查设备管...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
