当前位置: 首页 > Web前端 > HTML

前端面试题-BFC(BlockFormattingContext)

时间:2023-04-02 17:09:59 HTML

一、BFC的概念1、规范解读BlockFormattingContext(BlockFormattingContext,BFC)是网页可视化CSS渲染的一部分,它是是布局过程中产生的块。水平框的区域也是浮动元素与其他元素交互的限定区域。2.通俗的理解BFC是一个独立的布局环境,可以理解为一个容器,在容器中按照一定的规则放置物品,不会影响其他环境中的物品。如果元素满足触发BFC的条件,则该元素在BFC中的布局不受外界影响。一个浮动元素会创建一个BFC,浮动元素内部的子元素主要受浮动元素影响,所以两个浮动元素互不影响。2、创建BFC根元素或包含根元素的元素浮动元素float=left|rightorinherit(≠none)绝对定位元素position=absoluteorfixeddisplay=inline-block|弹性|内联柔性|表格单元格或表格标题溢出=隐藏|autoorscroll(≠visible)3、BFC的特点BFC是一个独立的容器,容器内的子元素不会影响容器外的元素。反之亦然。盒子从顶部开始一个接一个垂直排列,盒子之间的垂直间距由边距决定。在同一个BFC中,两个相邻的块级框的垂直边距会重叠。BFC区域不会与浮动框重叠。BFC可以识别和包含浮动元素。在计算其所在区域的高度时,浮动元素也可以参与计算。四、BFC的作用1、包含浮动元素(清除浮动)浮动元素会脱离文档流(绝对定位元素也会脱离文档流),导致无法计算出准确的高度。这个问题称为高度崩溃。解决高度塌陷问题的前提是能够识别并包含浮动元素,即清除浮动元素。问题示例:如上图左图,容器没有height或者height=auto,其子元素(sibling)是浮动元素,所以容器的高度不会被拉伸,即height会坍塌。解决方案:在容器中创建BFC。HTML

CSS。容器{溢出:隐藏;/*创建块格式化上下文*/background-color:green;}.container.Sibling{浮动:左;边距:10px;背景色:浅绿色;}特别提醒:用overflow:hidden创建BFC可以解决高塌问题,但是Range应用肯定不是最合适的布局,毕竟overflow:hidden会造成溢出隐藏问题,尤其是会影响与JS的交互效果.我们可以使用clearfix来清除浮动,这里就不多介绍了。想知道可以看看前端面试题——clearfix(清除浮点数)。2.导致MarginCollapse当两个相邻框(可能是兄弟或祖先)的垂直边距相遇时,它们将形成边距。此边距的高度等于两个折叠边距的高度中的较大者。HTML

Sibling1

Sibling2

CSS.Container{background-color:red;溢出:隐藏;/*创建块格式化上下文*/}p{background-color:lightgreen;边距:10px0;}如上图所示:红框(Container)包含两个绿色的兄弟元素(P),红框设置了overflow:hidden;然后创建了一个导致边距崩溃的BFC。理论上两个兄弟元素之间的边距应该是两个元素的边距之和(20px),但实际上是10px。这就是导致利润率崩溃的原因。2.1collapsedmargin的取值当相邻的两个margin为正数时,collapsemargin取两者中较大的值。当相邻的两个margin都是负值时,collapsedmargin是两者中较大的绝对值。当相邻的两个margin为一正一负时,collapsedmargin为两者之和。2.2margincollapse的条件是margin必须相邻!3.避免边距崩溃这听起来可能令人困惑,因为我们之前讨论过导致边距崩溃的BFC。但我们必须记住的是,Margincollapsing只会发生在属于同一BFC的块级元素之间。如果它们属于不同的BFC,则它们之间的边距不会塌陷。因此,通过创建不同的BFC,您可以避免边距崩溃。修改前面的示例并添加第三个兄弟元素,CSS不变。HTML

Sibling1

Sibling2

Sibling3

结果不会改变,也会折叠margins,三个兄弟元素(P)将以10px的垂直距离分隔。原因是三个兄弟元素都属于同一个BFC。创建一个不同的BFC以避免边距崩溃。HTML

兄弟1

兄弟2

兄弟3

CSS.Container{背景颜色:红色;溢出:隐藏;/*创建块格式化上下文*/}p{background-color:lightgreen;边距:10px0;}.newBFC{溢出:隐藏;/*创建新的块格式化上下文*/}当第二个和第三个兄弟元素属于不同的BFC时,它们之间没有margincollapse。阅读更多