zoukankan      html  css  js  c++  java
  • BFC学习笔记

    概念(来自MDN)

    BFCblock formatting context(块级格式化上下文),是 Web 页面的可视化 CSS 渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

    个人理解:在某些条件(形成BFC的条件)下,一个元素及其子元素拥有特定的渲染规则,此时我们称该元素形成一个BFC。

    形成条件(满足以下任何一种即可)

    • 根元素(html)

    • 浮动元素(元素的 float 不是 none)

    • 绝对定位元素(元素的 position 为 absolute 或 fixed)

    • overflow 值不为 visible 的块元素

    • display 为 inline-block flex grid table-cell 等(具体参见块格式化上下文

    BFC的渲染规则(和块级元素的区别)

    1. 属于同一个 BFC 内部的 box 的垂直 margin 会发生重叠

    2. BFC 是个独立的容器,容器里面的子元素不会影响外面的元素,反之亦然

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

    理解 BFC 后可以解决的问题

    1. 阻止外边距重叠

    HTML

    <div class="box">
      <div class="child"></div>
      <div class="child"></div>
    </div>
    

    CSS

    box {
       100vw;
      background: skyblue;
    }
    
    .child {
      margin: 10px;
       100px;
      height: 100px;
      background: deeppink;
    }
    

    此时两个 child 元素属于同一个 BFC(根元素html)内,根据 BFC 规则1,外边距会发生重叠。我们可以使他们在不同的 BFC 中,就不会重叠了

    CSS

    .child:last-child {
      display: inline-block;
    }
    
    1. 阻止元素和 float box 重叠

    HTML

    <div class="box">
      <div class="child"></div>
      <div class="child"></div>
    </div>
    

    CSS

    box {
       100vw;
      background: skyblue;
    }
    
    .child {
      margin: 10px;
       100px;
      height: 100px;
      background: deeppink;
    }
    
    .child:first-child {
      float: left;
    }
    

    根据 BFC 规则2,此时两个 child 会发生重叠,为了阻止重叠,我们可以为另一个非浮动元素创建 BFC

    CSS

    .child:last-child {
      overflow: hidden;
    }
    
    1. 清除浮动,防止容器高度塌陷

    HTML

    <div class="box">
      <div class="child"></div>
      <div class="child"></div>
    </div>
    

    CSS

    box {
       100vw;
      background: skyblue;
    }
    
    .child {
      float: left;
       100px;
      height: 100px;
      background: deeppink;
    }
    

    此时容器 box 的高度为 0,因为浮动的元素不参与高度计算,造成了该容器高度塌陷。根据 BFC 规则3,可以利用 BFC 元素下的浮动元素参与高度计算来清除浮动。

    CSS

    box {
       100vw;
      overflow: hidden;
      background: skyblue;
    }
    
    1. 可以利用 BFC 完成自适应两栏布局

    HTML

    <div class="box">
      <div class="child"></div>
      <div class="child"></div>
    </div>
    

    CSS

    box {
       100vw;
      background: skyblue;
    }
    
    .child {
      height: 100px;
      background: deeppink;
    }
    
    .child:first-child {
      float: left;
       100px;
    }
    
    .child:;ast-child {
      overflow: hidden;
    }
    

    实际也是利用了 BFC 规则2,BFC 元素不会和 float box 重叠

    总结

    其实我们在平常的工作中经常和 BFC 打交道,如外边距折叠,设置 overflow:hidden 清除浮动,自适应两列布局。但是很多人包括我自己对于 BFC 只是听说过概念,并不清楚其形成条件和渲染规则。今天通过写博客的方式让自己对其有了更清晰的认识,希望大家看完这篇文章后对 BFC 也可以有个清晰的了解和认识。其中若有错误的地方也希望可以帮忙指出。

    参考


    欢迎到前端学习打卡群一起学习~516913974

  • 相关阅读:
    tomcat快速部署脚本
    Centos7下搭建单节点Zookeeper
    request的基本使用用法
    Centos7 下配置jdk
    oracle备份脚本(以日期命名文件夹)
    Centos7 关闭防火墙
    Centos7 配置静态ip地址
    杀死占用8080端口的进程
    git clone的时候遇到“Please make sure you have the correct access rights and the repository exists”
    【笔记】关于多分类问题中的混淆矩阵,精准率
  • 原文地址:https://www.cnblogs.com/formercoding/p/12839939.html
Copyright © 2011-2022 走看看