博客
关于我
10分钟了解什么是BFC
阅读量:418 次
发布时间:2019-03-06

本文共 1156 字,大约阅读时间需要 3 分钟。

什么是BFC?

块级格式化上下文 (Block Formatting Context, 简称 BFC) 是 W3C CSS2.1 规范中的一个核心概念。它定义了网页渲染时的一个独立的区域,决定了该区域内子元素的定位方式以及与其他元素的关系与相互作用。简单来说,BFC 就像一个封闭的大容器,容器内的元素不会影响到容器外的元素,同时容器内的子元素之间也有一套独特的布局规则。

BFC 具有隔离性,容器内的元素可以独立进行布局,不会干扰到容器外的其他元素。这一点在前端开发中非常有用,尤其是在处理浮动元素和绝对定位布局时。

如何触发BFC?

要使元素具备 BFC 的特性,只需满足以下任一条件即可:

  • 浮动元素:float 属性的值不是 none(如 left、right、absolute、fixed)。
  • 绝对定位元素:position 属性为 absolute 或 fixed。
  • display 属性:设置为 inline-block、table-cell、flex、inline-flex 或 table-caption。
  • overflow 属性:值为 hidden、auto 或 scroll(不包括 visible)。
  • 根元素:body 的 display 为 block(默认情况下)。
  • BFC 的渲染规则

    BFC 具有以下渲染规则:

  • 外边距折叠

    • 在同一个 BFC 中,垂直方向上的相邻块元素的外边距会发生重叠。
    • 重叠后,显示的边距会是最大值。例如,两个 p 元素的外边距分别为 5px 和 25px,最终显示为 25px。
  • 包含浮动元素

    • 浮动元素会脱离文档流,但仍然属于其父 BFC。
    • 在布局时,浮动元素会影响其父容器的高度计算。
  • 计算高度时的浮动元素参与

    • 父容器的高度计算会考虑浮动元素的总高度。
    • 如果父容器设置为 BFC 并且 overflow: hidden,则浮动元素的高度会被包含在父容器中。
  • 示例与解决方案

    以下是实际开发中的典型案例:

  • 外边距折叠问题

    • 当两个 p 元素在同一个 BFC 中时,它们的外边距会折叠。
    • 解决方法:将这两个 p 元素放入不同的 BFC 中。例如,添加一个父容器并设置 overflow: hidden。
  • 浮动元素扩展问题

    • 右侧容器的高度高于左侧容器时,右侧容器会扩展到左侧。
    • 解决方法:将右侧容器设置为 BFC 并添加 overflow: auto。
  • 浮动元素影响父容器高度

    • 当浮动元素存在时,父容器的高度计算会考虑浮动元素的高度。
    • 解决方法:将父容器设置为 BFC 并且 overflow: hidden。
  • BFC 的设计理念帮助开发者更好地控制布局,特别是在处理复杂布局和跨浏览器兼容性时。理解 BFC 的特性和规则,是前端开发中不可或缺的一部分。

    转载地址:http://dszuz.baihongyu.com/

    你可能感兴趣的文章
    php7.1.6 + redis
    查看>>
    php7中使用php_memcache扩展
    查看>>
    PHP7中十个需要避免的坑
    查看>>
    php7和PHP5对比的新特性和性能优化
    查看>>
    PHP7安装pdo_mysql扩展
    查看>>
    PHP7实战开发简单CMS内容管理系统(7) 后台登录架构 用户登录校验
    查看>>
    php7,从phpExcel升级到PhpSpreadsheet
    查看>>
    PHP8中match新语句的操作方法
    查看>>
    PHP:第一章——PHP中常量和预定义常量
    查看>>
    PHP:第一章——PHP中的位运算
    查看>>
    phpcms
    查看>>
    phpcms 2008 product.php pagesize参数代码注射漏洞
    查看>>
    phpcms V9 自定义添加 全局变量{DIY_PATH}方法
    查看>>
    Redis五种核心数据结构的基本使用与应用场景
    查看>>
    PHPCMS多文件上传和上传数量限制
    查看>>
    phpEnv的PHP集成环境
    查看>>
    PHPExcel一些基本设置总结
    查看>>
    PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/c...
    查看>>
    PHPMailer发送邮件
    查看>>
    phpmailer发送邮件,可以带附件
    查看>>