学习呦
BFC 块级格式化上下文
BFC (Block Formatting Context)
概念
MDN定义:Web 页面的可视 CSS 渲染的一部分,是块级盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域
概念很抽象,根据它的作用讲:就是可以让浮动元素的父级元素包括住浮动元素,不会造成高度坍塌
上面这个粉色的框就超出外面的父级虚线框了,布局有问题,粉色框是float浮动元素,可以给 “父级虚线框” 添加一个属性
overflow: auto; |
之后就变成这样
再比如可以使用display: flow-root;
变成
BFC:根据张鑫旭CSS世界定义,BFC为一个“结界”,外部不能对内部造成什么影响,比如上面使用了overflow: hidden的p标签(那一大段黑色文字)就形成了一个BFC,外部的那个float的浮动元素就对黑色文字造成不了影响
其实这个粉色框float元素也是BFC,不过是粉色框内部而言。同样的,按照BFC的生成规则,黑色文字的BFC也可以用float创建,但破坏性太大了,让元素本来的流体特性没了,变成了包裹性
BFC的生成规则
float的值不为noneoverflow的值为auto、scroll或hiddendisplay的值为table-cell、table-caption和inline-block中的任何一个position的值为absolute和fixeddisplay的值为flow-root(这个属性是2020 年后开始陆续支持的,可以创建一个 BFC,但是会占用display属性)
overflow: hidden也不是没有缺点,比如设置了这个属性的BFC,结构是一个父元素包含一个子元素,这个子元素超出父元素的部分就会隐藏
应用
margin高度塌陷,父子元素margin-top的合并,可以给父元素创建一个BFC,父元素的margin-top和其内部隔绝,父元素和子元素各自的margin-top就可以生效了- 清除浮动的影响,比如说上面的例子。浮动对外部元素和内部元素的影响
其他清除浮动方法
clear属性
clear 属性常用的写法 clear: both,不会和浮动元素相邻,相当于 clear: left|right会自动选择,如果左边有浮动元素,就不会和左边的元素相邻
这个属性不是最优解,因为清除浮动的方法是不与之相邻,有可能会造成布局错位



