BFC(清除浮动与边距塌陷)

BFC(Block Formatting Context) 块级格式化上下文

Web页面中一个独立的渲染区域,内部元素的渲染不会影响边界以外的元素

BFC布局规则

内部盒子会在垂直方向上,一个接一个的放置

盒子垂直方向上的距离由margin决定

属于同一个BFC的两个相邻盒子的margin会发生重叠

BFC的区域不会与float box重叠。BFC就是页面上的一个隔离的独立容器容器里面的子元素不会影响到外面的元素。

反之也如此。 -计算BFC的高度时,浮动元素也参与计算。

BFC形成的条件

float的值不能是none

position的值不是static或者relative(absolute、fixed)

display的值是inline-block、table-cell、flex、table-caption或者inline-flex

overflow的值不是visible(auto、scroll、hidden)

BFC解决能的问题:

清除浮动:BFC的方式都能清除浮动,但是常使用的清除浮动的BFC方式只有`overflow:hidden`

原因是使用float或者position方式清除浮动,虽然父级盒子内部浮动被清除了,但是父级本身又脱离文档流了,会对父级后面的兄弟盒子的布局造成影响。

如果设置父级为`display:flex`,内部的浮动就会失效,所以通常只是用`overflow: hidden`清除浮动。

浮动元素无法撑起父元素

解决margin塌陷

IFC(Inline formatting contexts):

内联格式上下文。IFC的高度由其包含行内元素中最高的实际高度计算而来(不受到竖直方向的padding/margin影响),

IFC中的line box一般左右都贴紧整个IFC,但是会因为float元素而扰乱。

GFC(GrideLayout formatting contexts):

网格布局格式化上下文。当为一个元素设置display值为grid的时候,此元素将会获得一个独立的渲染区域。

FFC(Flex formatting contexts):

自适应格式上下文。display值为flex或者inline-flex的元素将会生成自适应容器。

 清除浮动的几种方式:

 边距塌陷:

一、相邻块元素

(1)不用margin,选用padding

操作:让其中某个元素的margin变成padding,因为padding不存在塌陷

(2)中间加个空标签隔开

操作:让空标签的高度为两者margin之和

(3)只给一个元素设置margin

操作:只给其中一个元素设置margin,就不存在外边距塌陷了

(4)改变元素的显示模式

操作:改变其中一个块元素的显示模式为行内块元素

缺点:改变了元素的显示模式,可能产生其它的问题

二、嵌套块元素

(1)更改元素显示模式。

操作:改变其中一个块元素的显示模式为行内块元素

缺点:改变了元素的显示模式,可能产生其它的问题

(2)更改元素的文档流。

操作:给其中一个元素设置浮动,脱离标准流,就能解决

缺点:脱标元素会对后面的元素造成影响

(3)给父元素设置溢出隐藏 (推荐)

操作:设置overflow:hidden

(4)给父元素设置(上)内padding

操作:给父元素设置一个上内边距,使其和子元素保持距离

缺点:可能造成其它子元素的位置发生改变

(5)给父元素设置(上)边框

操作:给父元素一个边框,让子元素的margin-top以这个边框为准

缺点:多了个边框,影响美观

总结:

参考:https://juejin.cn/post/7001759587414212615

https://juejin.cn/post/7001759587414212615

http://dongtianee.sinaapp.com/demo10.html

posted @ 2022-08-15 14:42  Du9191  阅读(59)  评论(0编辑  收藏  举报