问答文章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
发摅解释 摅的组词有哪些 摅字能组哪些词 检测电脑配置的软件电脑硬件检测权威软件有哪几个 查看电脑参数的软件什么软件可以全面检测显示出电脑硬件参数数据_百度... 有没有可以查自己电脑配置的软件啊??? 芯片程序解密哪家好 ...文章怎么突然间阅读量开始大减,从几百掉到个位数。 百家号怎么才个位数播放量?个位数播放量怎么算? 保本收益投资合法吗 ...到现在有一年多,今天我们的感情遇到了十字路口,好心人指点指点迷津... 小时候吃过的一款雪糕,微博看到想不起名字来问问,上部分有果酱在里面外... ...对我都好!请帮我分析感情与现实。我应该选哪个,我已经是结婚年龄_百 ... 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名称密码的设置方法 乙型病毒性肝炎具有传染性吗 乙型病毒性肝炎的传染途径有哪些 如何预防儿童龋齿的发生 学好物理最基础的方法 学好高中物理基础知识的方法