问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

CSS中的BFC是什么?

发布网友 发布时间:2024-10-01 05:57

我来回答

1个回答

热心网友 时间:2024-10-09 17:35

大家好,我是前端西瓜哥。今天来学习BFC。

BFC,为BlockFormattingContext的缩写,中文翻译为块格式上下文。

BFC是Web页面CSS渲染的一个机制,是块级盒子布局中产生的区域。

你可以将一个BFC可以理解为一个容器,里面的元素不会影响到容器外的布局。

怎样的元素属于BFC?

根元素,也就是HTML元素

浮动元素,即使用了float属性且值不为none

绝对定位元素

块级容器(如display的值为inline-blocks、table-cells、table-captions)

overflow的值不为visible的元素

使用了display:flow-root的元素。这是新出的值,专门用来创建无副作用的BFC。兼容性存疑,比较少用。

当然还有一些CSS属性也可以触发BFC,但比较少见,这里就不一一列举了,读者可自行阅读MDN文档。

目前来说,最常见的是通过overflow:hidden来构建BFC。一般情况下,它的副作用最小。但如果元素下有超出盒子范围的内容,会被截掉,请谨慎使用。

BFC的特性

BFC主要有两个特性,我们来学习一下。

特性1:上下外边距重叠

同一个BFC下的两个相邻块级元素,会发生上下方向的margin重叠。

比如前一个div设置了margin-bottom:20px,下一个div设置了margin-top:10px,然后你会发现它们的上下距离其实是20px(二者的最大值),而不是30px(二者之和)。

<style>.box{width:100px;height:100px;}.b1{background-color:bisque;margin-bottom:20px;}.b2{background-color:blueviolet;margin-top:10px;}</style><divclass="boxb1"></div><divclass="boxb2"></div>

如果想避免这种情况,可以给这两个div裹上一个BFC。

<style>.container{overflow:hidden;}/*...*/</style><divclass="container"><divclass="boxb1"></div></div><divclass="container"><divclass="boxb2"></div></div>

因为overflow:hidden有副作用,所以在实际开发中,我更喜欢用padding来替代margin。

特性2:浮动元素也会参与计算高度

浮动,是非常奇怪的一种效果。效果类似word的文字环绕排版,可以让文字和内联样式环绕着它。

当一个元素被赋予浮动效果后,它会脱落正常文档流,向左或向右平移到所在容器的边框(border)位置,或者碰到另一个浮动元素为止。

浮动元素脱离了正常文档流,一般情况下,计算容器元素的高度时,是考虑浮动元素的高度的。

但BFC可以强行让浮动元素参与计算。

<style>.container{/*overflow:hidden;*/padding:5px;border:1pxsolid#000;}.box{float:left;width:100px;height:100px;background-color:cornflowerblue;}</style><divclass="container"><divclass="box"></div></div>

上面的这种写法,没有给container应用BFC,会导致容器元素高度塌陷,效果见下图左边。

当我们将overflow:hidden的注释去除,容器元素就应用了BFC,就能得到我们想要的容器元素根据子元素自动撑高的效果了。效果见下图右边。

结尾

BFC主要掌握它的两个特性就好了:

上下外边距重叠

浮动元素参与BFC高度计算

首发于我的公众号:前端西瓜哥

原文:https://juejin.cn/post/7098356495875588132
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? ...到现在有一年多,今天我们的感情遇到了十字路口,好心人指点指点迷津... 小时候吃过的一款雪糕,微博看到想不起名字来问问,上部分有果酱在里面外... ...对我都好!请帮我分析感情与现实。我应该选哪个,我已经是结婚年龄_百 ... 1.6t:450kg:=比值是多少 昨天早上7点左右电影频道播放的叫什么名字 7月27号6频道早上播了一个叫什么河的电影 8月25日7点电影频道6正在播出的节目 今天早上电影频道播出的电影6点到7点左右 手机照片如何上传? 我要干什么的作文四百五十字左右 暑假我可以尽情的干什么作文500字 我可以尽情的干什么作文 婚姻关系存续期间第三者破坏家庭可以立案吗 阻生齿拔牙后疼痛的原因 拔完牙后几天特别疼痛是什么原因 第三者破坏别人家庭可以告她吗 拔智齿后第三天疼痛是怎么回事 是否可以告第三者破坏别人家庭么? 拔牙4天后疼痛怎么回事 金字塔是雅利安人建的吗 WP7如何连接PC端下载软件 2024北京野生动物园需要预约吗 北京野生动物园开放时间及门票_北京动物园15元门票含哪几个馆 北京野生动物园门票多少钱 北京野生动物园有年票吗 ...函数y=f(x),若同时满足下列条件:①f(x)在D内单调递增或单调递减;②... ...我想请教一下正在使用的用户 有没有发现这个手机的弊端 操纵性本人... 对于定义域为D的函数Y=F(X) ,若同时满足:①Y=F(X) 在D 内单调递增或单 ... fx=根号下2x+1为闭函数 ,k的取值范围? 如何把电脑中的图片传到windows phone。芒果系统,求详细步骤,如何同步... cin1是什么 中公优就业成立多久了? 优就业的三维可视化专业怎么样?好找工作吗? 夏季推荐4款茶常喝降压降脂又清肝 如何进入路由器管理页面修改wifi密码 初中生可以学习IT技术吗? 怎么修改路由器密码wifi名称密码的设置方法 乙型病毒性肝炎具有传染性吗 乙型病毒性肝炎的传染途径有哪些 如何预防儿童龋齿的发生 学好物理最基础的方法 学好高中物理基础知识的方法