HTML+CSS入门之10分钟了解什么是BFC
从安 2019-06-18 来源 : 阅读 1165 评论 0

摘要:本篇文章主要讲述HTML+CSS入门之10分钟了解什么是BFC,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章主要讲述HTML+CSS入门之10分钟了解什么是BFC,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

HTML+CSS入门之10分钟了解什么是BFC

BFC对于已经是一个耳熟能详的词汇了,而且在前端面试中,这题也是一个高频题。虽然我们平时在开发的时候知道如何利用BFC来解决问题,但是我们要具体说出BFC的概念和怎么触发BFC,我相信很多小伙伴也是和我一样不知道的


什么是BFC?

块级格式化上下文,W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。

具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。

通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部


怎么触发BFC?

只要元素满足下面任一条件即可触发 BFC 特性:

浮动元素:float值除none以外的值 

绝对定位元素:position为absolute或fixed 

display为inline-block、table-cell、flex、inline-flex、table-caption 

overflow除了visible以外的值(hidden、auto、scroll) 

body根元素


BFC的渲染规则

1. 同一个BFC下垂直方向上相邻的两个box的外边距(margin)会发生重叠

从效果上看的话,两个p元素都处于同一个BFC容器中,所以第一个p元素的下边距会和第二个p元素的上边距重合。重合之后,最终显示的边距是取最大的那个值,也就是25px。所以两个p元素之间的边距值是25px,标准的应该是30px才对。 

<section id="margin">
        <style>
            #margin{
                background:pink;
                overflow:hidden;
 
            }
            #margin p{
                margin:5px auto 25px;
                background:red;
            }
        </style>
        <p>1</p>
        <p>2</p>
    </section>

这其实不是css的bug,我们可以将其理解为是一种规范。如果我们想要避免外边距重叠的话,根据同一个BFC容器下面的元素才会发生折叠的原理,我们可以将他们放在不同的BFC容器中

解决方法:

将发生重叠的盒子放在另外一个BFC容器中,即添加一个父盒子,将该盒子设置为BFC容器 

<section id="margin">
        <style>
            #margin{
                background:pink;
                overflow:hidden;
 
            }
            #margin p{
                margin:5px auto 25px;
                background:red;
            }
        </style>
        <p>1</p>
        <div style="overflow: hidden">
                <p>2</p>
        </div>
        <p>3</p>
    </section>

 

2. BFC可以包含浮动的元素

我们都知道,浮动的元素都会脱离文档流,我们来看一下下面的例子 

<section id="layout">
        <style>
            #layout{
                background:red;
 
            }
            #layout .left{
                float: left;
                width: 100px;
                height: 100px;
                background: pink;
            }
            #layout .right{
                height: 110px;
                background: green;
            }
        </style>
        <div class="left"></div>
        <div class="right"></div>
    </section>

通过这个图我们可以看出,右侧的盒子因为高度比左边的高之后,因为BFC的缘故,就延申到它的左侧去了。这个例子我们做前端的应该是经常遇到的,很多人知道应该怎么解决,但是却不知道它的原理,这是因为BFC的缘故

解决方法:

给右侧的盒子设置为BFC容器,添加overflow属性,注意overflow不能为visible 

<section id="layout">
        <style>
            #layout{
                background:red;
 
            }
            #layout .left{
                float: left;
                width: 100px;
                height: 100px;
                background: pink;
            }
            #layout .right{
                height: 110px;
                background: green;
                overflow: auto;
            }
        </style>
        <div class="left"></div>
        <div class="right"></div>
    </section>

 

3.计算BFC高度时,浮动元素也参与计算

下面我给大家举一个非常常见的例子: 

 <section id="float">
        <style>
            #float {
                background: red;
            }
 
            #float .float {
                float: left;
                font-size: 30px;
            }
        </style>
        <div class="float">我是浮动元素</div>
    </section>

 

相信大家在开发的时候肯定有遇到过这个,子元素浮动之后,子元素的高度没有算到父元素上面,导致父元素的高度为0

解决方法:

给父元素设置为BFC,添加overflow:hidden属性

<section id="float">
        <style>
            #float {
                background: red;
                overflow: hidden;
            }
 
            #float .float {
                float: left;
                font-size: 30px;
            }
        </style>
        <div class="float">我是浮动元素</div>
    </section>

 

4 . BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此

  例子在2,3里面有体现


本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

 

本文由 @从安 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程