CSS面试题:什么是BFC?

css中的BFC是什么?

本质:BFC就是符合一些特性的HTML标签。

在了解BFC的具体概念前,我们还需要简单了解下常见的定位方案

常见的定位方案

定位方案:

  1. 普通流
    • 元素按照其在HTML中的先后位置至上而下自动排列布局;
    • 行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为一个完整的新行;
    • 所有元素默认都是普通流。
  2. 浮动
    • 元素首先按照普通流的位置出现,然后根据浮动的方向尽可能的向左边或者右边偏移。
  3. 绝对定位
    • 元素会整体脱离普通流,因此绝对定位不会对其兄弟元素造成影响。

BFC的概念

概念:

  1. BFC(Block Formatting Context) 格式化上下文;
  2. 指一个独立的渲染区域,或者说是一个隔离的独立容器;
  3. 可以理解为一个独立封闭的空间,无论如何不会影响到它的外面。

形成BFC的条件

条件:

  1. 浮动元素,float 除 none 以外的值;
  2. 绝对定位元素, position(absolute,fixed);
  3. 设置元素的display属性为以下其中之一的值:inline-block,table-cell,table-caption,table-row,table,table-row-group,table-header-group,table-footer-group,inline-table,flow-root,flex或inline-flex,grid或inline-grid;
  4. 设置元素的display属性为除了 visible 以外的值(hidden,auto,scroll等);
  5. body ,html等根元素就是一个独立的容器;
  6. contain值为layout,content 或 paint 的元素;
  7. 多列容器(元素的column-count 或 column-width属性不为 auto,包括 column-count为1时)。

BFC的特性

特性:

  1. 内部的div盒子会在垂直方向上一个接一个的放置;
  2. 垂直方向上的距离由各自的 margin属性决定;
  3. BFC的区域不会与设置了float浮动的元素区域重叠;
  4. 计算BFC的高度时,浮动元素也参与计算;
  5. BFC就是页面中的一个独立容器,容器里的子元素不会影响到外面的元素。

BFC的作用

  1. 避免外边距重叠;
  2. 清除浮动;
  3. 阻止元素被浮动元素覆盖。

归纳总结

  1. BFC属于普通流;
  2. BFC可以看做元素的一种属性,当元素拥有了BFC属性,就可以看作是隔离了的独立容器;
  3. 容器里的元素不会在布局上影响到外面的元素。

演示代码

在这里我们简单演示下常见的BFC的用法和作用。

新建一个div,不对其设置宽高,在里面放入一张图片
  <style>
        .box{
            background: #ddd;
            /*添加背景色是为了方便观察*/
        }
        .box img{
            width: 300px;
            /*限制好div的大小*/
        }
 </style>

<div class="box">
        <img src="./images/星瞳.jpg" alt="">
  </div>

此时它是这个样子
效果图1
此时div被图片提供的空间撑开,检查发现div也拥有了自己的宽高
效果图解析

但是我们给图片浮动后,div却肉眼可见的消失了。

.box img{
        width: 300px;
        float: left;
     }

浮动后
检查发现,div确实失去了刚才图片提供的高度
浮动珀西
这是因为浮动后的元素脱离了文档流,处于独立的区域。这个时候就需要使用到BFC,来让它回归原位,重新发挥它的作用。

.box{
      background: #ddd;
      overflow: hidden;
    }

over
div重新拥有了高度,再次显示了出来。

但这个时候会用另外一个问题:浮动后的元素处于文档流之上,它占据的区域会与其它的兄弟元素相重叠。

给图片一个兄弟元素,获得下图效果

<h2>这是一段填充文字</h2>

重叠
文字的位置和图片重叠在了一起,此时给h2设置成BFC,就能解决问题。

 .box h2{
   overflow: hidden;
  }

文字解决
由此我们就可以基本了解到BFC的作用

完整演示

这里再提供一份完整的演示代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            background: #ddd;
            overflow: hidden;
        }
        .box img{
            width: 300px;
            float: left;
        }
        .box h2{
            overflow: hidden;
        }
    </style>
</head>
<body>
    <h1>CSS中的BFC是什么?</h1>

    <div class="box">
        <img src="./images/星瞳.jpg" alt="">
        <h2>这是一段填充文字</h2>
    </div>
    
</body>
</html>

这里是万物之恋,感谢各位小伙伴的关注,我们下次再见了!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值