zoukankan      html  css  js  c++  java
  • CSS BFC

    原文:

      [布局概念] 关于CSS-BFC深入理解

      深入理解 BFC; - 页面内可演示

    BFC的概念以及通俗理解

      通俗理解:BFC就是css布局的一个概念,是一块区域,一个环境。可以简单的理解为某个元素的一个 CSS 属性,只不过这个属性不能被开发者显式的修改,拥有这个属性的元素对内部元素和外部元素会表现出一些特性,这就是 BFC

      较官方概念:块级格式化上下文。它是一个独立的渲染区域,只有 Block-level box 参与(在下面有解释), 它规定了内部的 Block-level Box 如何布局,并且与这个区域外部毫不相干。

      我们常说的文档流其实分为定位流、浮动流和普通流三种。而普通流其实就是指 BFC 中的 FC - formatting 是页面中的一块渲染区域,有一套渲染规则,决定了其子元素如何布局,以及和其他元素之间的关系和作用。

      常见的 FC 有 BFC、IFC(行级格式化上下文)、GFC(网格布局格式化上下文)和FFC(自适应格式化上下文)。

    BFC 的触发条件:

      下列条件只需满足其一即可:

      【1】根元素,即HTML元素;

      【2】float的值不为none;

      【3】overflow的值不为visible;

      【4】display的值为inline-block、table-cell、table-caption;

      【5】position的值为absolute或fixed;

    BFC 触发后的布局规则:

    1.内部的Box会在垂直方向,一个接一个地放置。

    2.Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。

    3.每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。

    4.BFC的区域不会与float box重叠。

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

    6.计算BFC的高度时,浮动元素也参与计算。

    BFC 的常见应用:

      除了耳熟能详的清除内部浮动外,还能进行页面布局、阻止某些情况下发生的 margin 重叠等等,下面依次根据布局规则进行解释。

      规则1:就是我们平常div一行一行块级放置的样式,不多说;

      规则2:同一个BFC的两个相邻Box的margin会发生重叠,见下例:

    // html
    <div class="aside"></div>
    <div class="text">
        <div class="main"></div>
    </div>
          
    
    // css
    .aside {
        margin-bottom: 100px;
         100px;
        height: 150px;
        background-color: #f66;
    }
    
    .text {
        overflow: hidden;
    }
    .main {
        background-color: #fcc;
        margin-top: 100px;
        height: 200px;
    }
    

       在按照如上写法, .aside 与 .main 之间的空白区域高度是 200px,而把 .text 的样式注释掉,空白区域变成 100px,见下图;

      

      规则3:左浮是子div的左边接触父 div 的 borderbox 的左边,右浮是子 div 接触父 div 的 borderbox 右边,除非设置margin来撑开距离,否则一直是这个规则。见下例:

    // html
    <div class="par">
        <div class="child"></div>
        <div class="child"></div>
    </div>
    
    // css
    .par {
         300px;
        border: 10px solid #fcc;
        overflow: hidden;
    }
    .child {
        float: left;
         100px;
        height: 100px;
        border: 10px solid #f66;
    }
    

     

      因此,通常使用的 overflow: hidden; 方法来清除浮动就是利用的 BFC 的触发条件 3 来实现的。

      规则4:BFC的区域不会与float box重叠:首先看下例子 - 自适应两栏布局:

    // html
    <div class="aside"></div>
    <div class="text">
        <div class="main"></div>
    </div>
          
    
    // css
    .aside {
         100px;
        height: 150px;
        float: left;
        background: #f66;
    }
    
    .text {
         500px;
    }
    .main {
        height: 200px;
         /* 触发 .main 盒子的 BFC 规则 */
        overflow: hidden;
        background: #fcc;
    }
    

     

      上面盒子 .aside 左浮动,因此 .main 盒子在没有触发 BFC 的情况下会被覆盖。而后来 .main 盒子触发 BFC ,根据规则 4 ,就会显示成两栏布局的样子。

    附上一个关于 float 的案例:

    // html
    <div class="par">
        <div class="child"></div>
        <div class="child0">123</div>
    </div>
    
    
    // css
    .par {
         200px;
        border: 10px solid #fcc;
    }
    
    .child {
       float: left;
        100px;
       height: 100px;
       border: 3px solid #f66;
    }
    .child + div {
       border: 3px solid #000;
    }
    

     

  • 相关阅读:
    通过scp拷贝文件时无需交互输入密码
    suse linux安装lrzsz
    shc加密shell脚本
    linux小程序--cmatrix
    linux系统PXE+Kickstart自动安装系统
    升级SSH
    shell生成随机数的几种方法
    django —— MVT模型
    Django学习---笔记一
    python学习--Django虚拟环境搭建
  • 原文地址:https://www.cnblogs.com/cc-freiheit/p/10416645.html
Copyright © 2011-2022 走看看