CSS布局基础——BFC
zhezhongyun 2025-05-25 16:44 2 浏览
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外溢不了了,外面的元素不再受其浮动的影响,从而达到了清除浮动的作用。
相关推荐
- 带你看好玩的CSS-霓虹灯按钮
-
对于前端开发人员来说,css是我们再熟悉不过的朋友的,它就相当于是我们页面的衣服,页面好不好看,就看我们css运用的是否炉火纯青。css学起来简单,但是我们要把它“修炼”到出神入化境界,那这可不是一丁...
- 自动生成的静态代码示例
-
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/...
- 如何用代码快速制作营销网站底部广告?
-
当前在很多的旅游网站,底部固定广告已经成为一种常见的形式,可以参看下图。以途牛为例,下边我们一起来说一下整个制作流程显然底部是固定定位的盒子,并且是分为两组,一组为显示状态下,一组为隐藏状态下,并且通...
- CSS中清除浮动的几种方法,快来学习一下吧
-
前言首先我们通过一张图来解释下元素浮动是什么样的状态。元素浮动情况上图的html部分代码为:html代码css部分代码为:css代码通过上面的图片可以看出,当内部的div设置float后,外部的元素的...
- css reset 标签属性默认值
-
在现在的网站设计中使用reset.css用重置整个站点的标签的CSS属性的做法很常见,但有时候我们已经为了reset而reset,我们经常看到这样的reset代码其实大部分CSSreset是没必要...
- CSS实现溢出显示省略号
-
小伙伴们,对于省略号呢,咱们前端攻城狮的实现方法可就是多种多样了,那接下来呢我就给你罗列一下如果用css书写这些特殊效果,来一起看看吧~~~1.单行文本超出显示省略号效果图:实现代码:HTML部分&l...
- CSS 基础大揭秘:打造酷炫网页的魔法钥匙
-
在当今这个数字化时代,网页已经成为我们生活中不可或缺的一部分。无论是购物、学习还是娱乐,我们每天都会与各种各样的网页打交道。而你是否曾好奇,那些设计精美的网页是如何实现的呢?今天,我们就来揭开网页设计...
- 治愈焦虑!清晨两道 CSS 面试题,轻松开启元气学习日
-
晨光透过窗户洒在键盘上,又是充满希望的一天。前端的小伙伴们,在忙碌的工作和面试压力下,不妨趁着清晨和上午这段宁静时光,静下心来,和我一起解锁CSS的奇妙世界。今天咱们就用两道高频面试题,开启元气满...
- 浅谈position中absolute和relative
-
CSSposition属性中absolute和relative很容易让人弄混,基本的概念什么着,你去参考W3C,就不啰嗦了--------------------------------------...
- Highcharts基础教程(二):图表配置
-
一、图表容器Highcharts实例化中绑定容器的方式有两种:1.通过dom调用highcharts函数的方式$("#container").highcharts({//...
- CSS之垂直导航条
-
今天的内容比较简单,我们来学习一种常见的垂直导航条的实现方法,首先看一下效果图:1.首先我们创建一个有效的列表<li><ahref="http://www.???.com">...
- Inkscape 1.4 新功能介绍
-
各位Inkscape爱好者们,备受期待的Inkscape1.4版本已经正式发布,现在就可以从Inkscape官网下载体验了!这次更新带来了许多强大的新功能和改进,旨在提升你的矢量图形编辑...
- 前端内功修炼:5大主流布局系统进阶
-
获课:keyouit.xyz/14642/前端布局进阶:从盒模型到弹性布局,深入解析5大主流布局系统核心原理前端布局是构建用户界面的基石,理解不同布局系统的底层逻辑和适用场景对于开发高效、可维护的...
- MVP最小可用产品实践:用Pywebio库写一个接口加解密的小工具
-
背景最近在接口测试的过程中,由于请求报文需要先进行加密再发起请求,响应报文也需要先解密才能提取指定字段的返回值传递给下一个接口,每次都要通过代码运行相应的加/解密方法进行解析,操作起来特别麻烦,所以我...
- 网易的互动版涂小瓶子爆火,究竟是如何做到的?
-
https://mp.weixin.qq.com/s/5vmXPBWcJZ_oZ4p1znNNLw附上爆火图文链接,复制打开即可查看其实最开始看见的时候没想到这个小小的瓶子会这么火,现在的SVG交互图...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- HTML 参考手册 (28)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML常用标签 (29)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- HTML button formtarget 属性 (30)