CSS:BFC以及如何生成BFC(五颗星)

1.BFC概念:

BFC(box formatting context块级格式化上下文,用于清除浮动,防止margin重叠等。):

  • box:box是CSS布局的对象和基本单位,一个页面是有很多个box组成的,这个box就是我们所说的盒模型。
  • formatting context:块级上下文格式化,它是页面中的一块渲染区域,并且有一套渲染规则,他决定了其子元素将如何定位,以及和其他元素的关系和相互作用。
  • 块格式化上下文(Block Formatting Context,BFC)是一个独立的渲染区域,是 Web 页面的可视化 CSS 渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。并且有一定的布局规则,规定了内部如何布局,并且这个区域的子元素不会影响到外面的元素。

通俗来讲:BFC 是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品。如果一个元素符合触发 BFC 的条件,则 BFC 中的元素布局不受外影响

如:网页中广告点击关闭按钮不影响页面的布局,这种效果就是用BFC创建的(用到了定位position:absolute或fixed)

2.比较重要的布局规则有:

  • 内部box垂直放置。
  • 计算BFC的高度的时候,浮动元素也参与计算,

3.BFC特点:

  • 垂直方向上,自上而下排列,和文档流的排列方式一致。
  • 在 BFC 中上下相邻的两个容器的 margin 会重叠
  • 计算 BFC 的高度时,需要计算浮动元素的高度
  • BFC 区域不会与浮动(float)的容器发生重叠
  • BFC 是页面上的一个独立的容器,容器内部元素不会影响外部元素
  • 每个元素的左 margin 值和容器的左 border 相接触

4.哪些元素会生成BFC(创建BFC):

哪些元素会创建BFC:

  • 根元素
  • float的值不为none,即值为left,right等
  • overflow的值不为visible,即值为hidden、auto、scroll等
  • display的值为inline-block、table-cell、table-caption、flex、inline-flex的元素

display:table也认为可以生成BFC,其实这里的主要原因在于Table会默认生成一个匿名的table-cell,正是这个匿名的table-cell生成了BFC。

  • position的值为absolute或fixed

具体内容如下:

1.根元素:body/html。

2.元素设置浮动:(父元素)float 除 none 以外的值,即float不为none的元素(缺点:父元素不一定是左边或右边,会影响布局,方法比较局限)

解决浮动塌陷:

<style>
        .outer {
            width: 250px;
            background-color: red;
            /* 浮动塌陷解决方法BFC方法中给浮动的元素的容器添加浮动 */
            float: left;
        }
        .inner{
            width: 100px;
            width: 50px;
            /* 因为outer没设置高,导致浮动(高度)塌陷,浮动元素不占空间,导致outer盒子撑不起来。*/
            float: left;
            background-color: rgb(18, 33, 207);
        }
    </style>
 <div class="outer">
        <div class="inner">inner1</div>
        <div class="inner">inner2</div>
    </div>

3.元素设置绝对定位:position (absolute、fixed),即position为fixed和absolute的元素

定位:

<style>
        .outer {
            width: 250px;
            background-color: red;
        }
        .inner1{
            width: 100px;
            background-color: rgb(18, 33, 207);
 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

前端面试题 文章被收录于专栏

前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理

全部评论

相关推荐

评论
1
收藏
分享
牛客网
牛客企业服务