美文网首页
【CSS古话今说】-- 01.神奇的CSS-BFC在实战中的应用

【CSS古话今说】-- 01.神奇的CSS-BFC在实战中的应用

作者: 张举欣 | 来源:发表于2019-02-22 16:39 被阅读86次

文章首发于掘金

BFC(Block Formatting Context)是Web页面中盒模型布局的CSS渲染模式。它的定位体系属于常规文档流

想要实现一个BFC布局需要满足以下条件之一:

1、float的值不是none。
2、position的值不是static或者relative。
3、display的值是inline-block、table-cell、flex、table-caption或者inline-flex
4、overflow的值不是visible

想要创建一个BFC有很多方式,但是一些方式可能会带来其他的麻烦,例如overflow:scroll等,所以使用的时候还是要注意一下,本文统一使用overflow:hidden来创建BFC。

1. bfc区域不会与float box 重叠

<style>
        body {
            width: 300px;
            position: relative;
        }

        .aside {
            width: 100px;
            height: 150px;
            float: left;
            background: #666666;
        }

        .main {
            height: 200px;
            background: #fcc;
        }
    </style>
<body>
    <div class="aside"></div>
    <div class="main"></div>
</body>

image.png

如果我们想要的效果是两个盒子分开,那么我们可以利用BFC的布局规则:BFC区域不会与float box重叠的原则,我们给main加上overflow:hidden的属性,神奇的事情发生了:


image.png

2. 计算bfc高度的时候,浮动元素也参与计算

 <style>
        body {
            width: 500px;
        }

        .par {
            border: 5px solid #fcc;
            /* 下面几种方式都会生成bfc */
            /* overflow: hidden; */
            /* display: inline-block; */
            /* position: absolute; */
            /* float: left; */
        }

        .child {
            border: 5px solid #f66;
            width: 100px;
            height: 100px;
            float: left;
        }

    </style>
image.png

上述代码因为浮动,会出现par高度塌陷的情况,为了达到清除内部浮动,我们可以触发par生成bfc,那么par在计算高度的时候,par内部的浮动元素child也会参与计算,所以我们给par加上overflow:hidden的属性后问题就解决了。


image.png

3. 属于同一个bfc的两个相邻box的margin会发生重叠

<style>
    p {
        color: #f55;
        background: #fcc;
        width: 200px;
        line-height: 100px;
        margin: 100px;
    }
</style>

<body>
        <p>haha</p>
        <p>hehe</p>
</body>
image.png

正常我们给两个p 标签都加上了margin:100px,但是两个p之间只有100px,为什么呢,同一个BFC环境时候,重叠的margin只去最大的,所以如果想解决这个问题,我们可以把下面的p标签包一层BFC。

    <style>
 p {
        color: #f55;
        background: #fcc;
        width: 200px;
        line-height: 100px;
        margin: 100px;
    }
  .warp {
            overflow: hidden;
        }
    </style>
    <p>haha</p>
    <div class="warp">
        <p>hehe</p>
    </div>

总结BFC的三种特性

  1. bfc区域不会与float box 重叠
  2. 计算bfc高度的时候,浮动元素也参与计算
  3. 属于同一个bfc的两个相邻box的margin会发生重叠

相关文章

  • 【CSS古话今说】-- 01.神奇的CSS-BFC在实战中的应用

    文章首发于掘金 BFC(Block Formatting Context)是Web页面中盒模型布局的CSS渲染模式...

  • CSS-BFC

        block formatting context块级格式化上下文    bfc是一个独立的渲染区域,只有b...

  • css-BFC

    BFC? ps:一开始看到这名词的时候我心里是拒绝的,什么鬼? 概念 (Block formatting cont...

  • CSS-BFC

    先挖坑 参考链接

  • CSS-BFC

    Visual formatting model 是用来处理和在视觉媒体上显示文档时使用的计算规则。该模型是 CSS...

  • css-BFC

    BFC(block formatting context):块格式化上下文 理解BFC BFC和堆叠上下文都没有定...

  • CSS-BFC

    BFC box,Formatting Context在解释 BFC 是什么之前,需要先介绍 Box、Formatt...

  • 古话今读

    怒从心头起,恶向胆边生。 老早听到这句话,当顺口溜,像耳边风,全不为意。近日读梁实秋散文《怒》中,说到这句话,才有...

  • CSS-BFC的理解

    简介在使用CSS的过程中,经常会听到触发BFC,但是何为BFC。BFC(Block formatting cont...

  • BFC

    原文:[布局概念] 关于CSS-BFC深入理解 面试的时候尽量不讲定义,而是讲例子。 定义 BFC全称叫做(Blo...

网友评论

      本文标题:【CSS古话今说】-- 01.神奇的CSS-BFC在实战中的应用

      本文链接:https://www.haomeiwen.com/subject/udleyqtx.html