zoukankan      html  css  js  c++  java
  • 【CSS古话今说】-- 01.神奇的CSS-BFC在实战中的应用

    文章首发于掘金

    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 {
                 300px;
                position: relative;
            }
    
            .aside {
                 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 {
                 500px;
            }
    
            .par {
                border: 5px solid #fcc;
                /* 下面几种方式都会生成bfc */
                /* overflow: hidden; */
                /* display: inline-block; */
                /* position: absolute; */
                /* float: left; */
            }
    
            .child {
                border: 5px solid #f66;
                 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;
             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;
             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会发生重叠
    记住,在你成功之前,每前进一步遇到的都将是更大的困难,所以微笑面对每一个困难 -----至有理想的自己
  • 相关阅读:
    转载:揪出MySQL磁盘消耗迅猛的真凶
    转载:MySQL看这一篇就够了
    转载:MySQL:亲测备份策略实例(线上真实备份案例)
    Consul集群搭建 2Server+ 3Client
    consul配置参数大全、详解、总结
    基于consul高可用
    MySQL MGR+ Consul之数据库高可用方案
    MySQL Group Replication-MGR集群
    MySQL binlog_format中sbr 和rbr(Statement-Based and Row-Based Replication)的优缺点
    MySQL binlog2sql-闪回数据
  • 原文地址:https://www.cnblogs.com/-yu-ze-/p/10419505.html
Copyright © 2011-2022 走看看