BFC

BFC

BFC (Block formatting context) “块级格式化上下文”

它是页面中的一块渲染区域,有一套渲染规则,决定了其子元素如何布局,以及和其他元素之间的关系和作用。

  • 触发

满足下列条件之一就可触发BFC

  【1】根元素,即HTML元素
  【2】float的值不为none
  【3】overflow的值不为visible
  【4】display的值为inline-block、table-cell、table-caption
  【5】position的值为absolute或fixed

  • 特性

【1】阻止垂直外边距(margin-top、margin-bottom)折叠

属于同一个BFC的两个相邻块级子元素(元素都要在文档流中)的上下margin会发生重叠—— 分为两个BFC就可以消除这种margin 重叠

<style>
    .dv {
        width: 400px;
        height: 400px;
        border: 1px solid slateblue;
    }

    .dv2 {
        width: 200px;
        height: 100px;
        background: salmon;
        margin-bottom: 30px;
    }


    .dv3 {
        width: 200px;
        height: 100px;
        margin-top: 60px;
        background: seagreen;
    }

    <div class="dv">
        <div class="dv2">
        </div>       
           <div class="dv3">
             IE6IE7中, // function foo(){ // console.log(a); // } // function bar(){ // var a =3 ;
          </div>
  </div>

这里写图片描述

可以看到两个div,实际的margin距离是60px

解决 触发其中一个div的BFC,使得两个div不在同一个 BFC内,这样就可以阻止这两个div的margin重叠

 .dv4{
        /* overflow: hidden; */
        /* display: inline-block; */
        position: absolute;  
    }

这里写图片描述

【2】包含浮动元素
可以包含它内部的所有元素,包括浮动元素——因此一清除内部浮动

<style>
 .second{
        width: 400px;
        padding: 10px;
        border: 1px solid slateblue;

    }
    .float{
        float: left;
        width: 200px;
        height: 50px;
        background: salmon;
    }
    .s1{

        background: slategray;

    }

</style>  
<div class="second">
        <div class="float">
        </div>
        <div class="s1"> 
            IE6、IE7中, // function foo(){ // console.log(a); // } // function bar(){ // var a =3 ;
            IE6、IE7中, // function foo(){ // console.log(a); // } // function bar(){ // var a =3 ;
        </div>
    </div>   

元素内容比较多的时候,内容会环绕着浮动的元素
这里写图片描述

清除环绕,为其本身创建一个BFC

   .s1{
        overflow: hidden;
        background: slategray;
    }

这里写图片描述

元素内容比较少的时候,会出现高度坍塌, 足够的文本去一个浮动的元素 , 浮动元素脱离文档流,父元素(class=second)高度就会随着文本的减少而降低 ,父元素未被浮动元素撑开,父元素的高度坍塌。
这里写图片描述

改变坍塌:为父元素创建一个BFC

.second{
        width: 400px;
        padding: 10px;
        border: 1px solid slateblue;
        overflow: hidden;
       //或者 overflow: auto;
    }

这里写图片描述

整理自:
https://blog.youkuaiyun.com/liuliuliu_666/article/details/70847566

https://juejin.im/post/5909db2fda2f60005d2093db

<think>好的,我需要回答用户关于BFC的问题。首先,用户想了解BFC的概念或含义,特别是在CSS或编程上下文中。根据提供的引用,特别是引用[1]和[2],BFC是块级格式化上下文,是CSS中的一个隐含属性。我需要先解释BFC的基本定义。 接下来,我应该说明BFC的作用和特点。根据引用[2],开启BFC的元素会变成一个独立的布局区域,具有防止浮动元素覆盖、避免外边距重叠、包含浮动子元素等特性。需要将这些特点分点列出,清晰易懂。 然后,要提到如何触发BFC。用户可能想知道如何实际应用,所以需要列举常用的方法,比如设置overflow: hidden、浮动元素、绝对定位等。这部分要结合引用中的内容,特别是引用[2]提到的overflow:hidden。 此外,用户可能关心BFC的应用场景,比如解决高度塌陷问题。引用[2]中详细说明了父元素高度塌陷的问题,以及使用BFC来包含浮动子元素。这部分需要具体举例,说明如何通过开启BFC来避免布局混乱。 还要注意引用来源的正确标注,在解释每个关键点时,末尾自然地添加引用标识,如[^1][^2]。同时,根据用户提供的示例,生成相关问题,可能需要包括BFC的触发方式、解决的问题、与层叠上下文的关系等。 最后,确保回答结构清晰,分点说明,语言简洁,符合中文表达习惯,并且避免使用任何Markdown格式。同时检查是否有遗漏的信息,比如BFC的其他特点或相关概念,如层叠上下文(引用[3]),但用户主要关注BFC,所以可能不需要深入其他内容。</think>### BFC的概念与作用 BFC(Block Formatting Context,块级格式化上下文)是 CSS 中的一个隐含属性,用于控制元素在页面中的布局规则。开启 BFC 的元素会形成一个独立的渲染区域,其内部布局与外部完全隔离,从而避免样式冲突或布局异常。 #### 核心特性 1. **避免浮动覆盖** 开启 BFC 的元素不会被相邻的浮动元素覆盖。例如,若左侧有浮动元素,BFC 容器会自动调整内容区域以避免重叠。 2. **防止外边距合并** 在普通流中,相邻块级元素的垂直外边距会合并(取最大值),但 BFC 内部的子元素与父元素的外边距不会合并[^2]。 3. **包含浮动子元素** 当父元素未设置高度且子元素浮动时,父元素可能因高度塌陷导致布局错乱。开启 BFC 后,父元素可以正确计算高度以包含浮动子元素。 #### 触发方式 通过为元素添加以下任一 CSS 属性即可开启 BFC: - `overflow: hidden`(最常用且无副作用) - `float: left/right`(元素会脱离文档流) - `position: absolute/fixed` - `display: inline-block/flex/grid` #### 应用场景示例 ```html <div class="parent"> <div class="child" style="float: left;">浮动元素</div> </div> ``` 若未开启 BFC,父元素 `.parent` 高度会塌陷。通过添加 `overflow: hidden` 触发 BFC: ```css .parent { overflow: hidden; /* 包含浮动子元素 */ } ``` ### 相关问题 1. 如何通过 BFC 解决多个浮动元素导致的布局错乱? 2. BFC 与层叠上下文(如 `z-index`)之间有何关联[^3]? 3. 为什么 `overflow: hidden` 是触发 BFC 的推荐方式? 4. BFC 在响应式布局中的典型应用场景有哪些? [^1]: BFC(Block Formatting Context)块级格式化环境,CSS隐含属性,形成独立布局区域。 : 浮动布局中BFC的作用:避免覆盖、防止外边距合并、包含浮动子元素。 : 层叠上下文与z-index的关系,影响元素叠加顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值