资讯专栏INFORMATION COLUMN

浅析BFC

voyagelab / 938人阅读

摘要:原文链接说起其实有点像闭包在大多数人印象中的感觉,平时都用过,但在不了解定义的情况下大多数人却又不知道这就是。这种行为只存在于兄弟元素在同一下这种情形。上文提到的可以看下大漠的这篇文章参考理解布局和分钟理解原理

原文链接: Fyerl"s Blog

说起 BFC 其实有点像闭包在大多数人印象中的感觉,平时都用过,但在不了解定义的情况下大多数人却又不知道这就是 BFC。之所以会想了解下什么是 BFC,是因为前些日的一个简单且常见的排版问题

HTML 代码结构如下

登录名

label 的宽度是自适应的,content 需填充满此行剩余的区域。常规方法通过 flex 布局,很简单

.form-item {
  display: flex;
}

.content {
  flex: 1;
}

但是 flex 的兼容性还是不够向下的,于是搜索了一下,得到了这么个方案

.label {
  float: left;
}

.content {
  overflow: hidden;
}

label 给了个 float 可以理解,但 content 写了一个 overflow: hidden 是什么意思?实则这里的 content 就形成了一个 BFC,所以还是先回到 BFC 这个概念上

什么是 BFC
BFC 即(Block Format Context)块级格式化范围,是 CSS2.1 中用于规定块级盒子的渲染布局方式
如何触发创建一个 BFC

root: 页面的根元素

display: inline-block | flex | flow-root

position: absolute | fixed

overflow: hidden | auto | scroll

以上条件满足任一便会触发创建一个 BFC,同时也可以看出这些属性的设置会产生一些额外的效果,比如仅仅是想触发 BFC,却使用了 overflow: scroll 导致元素出现了滚动条,所以具体使用哪种方式触发 BFC,还是需要结合实际的业务场景

BFC 的特性以及使用场景 一、消除外边距折叠


  

如上,两个 item 均存在上、下 margin,理想情况下,两个 item 之间间距应是 24px,但结果只有 12px,这便是外边距折叠,兄弟元素外边距不同时,取最大值。这种行为只存在于兄弟元素在同一 BFC 下这种情形。若想消除外边距折叠,对上述代码做一些改造,使兄弟元素存在于不同 BFC 之中即可



  

此时 item-wrapper 便形成了一个 BFC,解决了外边距折叠问题。相信大家遇到这种情况习以为常地会加一层外层元素再给个 overflow: hidden,但为什么 overflow: hidden 就能消除折叠,其实背后是 BFC 的原理

二、清除浮动


  

此时内部 item 已脱离常规文档流,父元素无法被子元素撑起。若需要父元素包裹住子元素,一是通过常见的 clearfix 方案,二就是同过构造父元素为 BFC,也就是通过大家熟悉的 overflow: hidden,这里涉及到的特性就是 BFC 能包裹住自己的后代浮动元素



  

三、防止被浮动元素覆盖和围绕浮动元素


  

回到最开始的布局问题上了,此时 label 浮动于 content 之上,如果 content 内填充了其他元素,当 content 高度大于 label 一定高度时 content 内元素会被 label 覆盖或文本元素会围绕着 label。如下图,当然不希望右侧地址的第二行会从最左边开始

此时一行代码构造 content 为 BFC,问题便解决了



  

总结

本文对 BFC 稍作梳理,望对代码中那些莫名的 overflow: hidden 的理解有所帮助。上文提到的 overflow: flow-root 可以看下大漠的这篇文章《flow-root》

参考:

理解 CSS 布局和 BFC

10分钟理解 BFC 原理

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/113099.html

相关文章

  • BFC与自适应浅析

    摘要:最常见的有简称和简称。的区域不会与重叠。也就是说只要父容器形成就可以,触发方式见上清除浮动比较好的方法以上用,用更好的方法自适应布局触发自适应属性对比参考资料张鑫旭老师的博客 本文是从之前的csdn上的乱七八糟的笔记整理过来的 概念   Formatting context 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何...

    makeFoxPlay 评论0 收藏0
  • 浅析BFC

    摘要:原文链接说起其实有点像闭包在大多数人印象中的感觉,平时都用过,但在不了解定义的情况下大多数人却又不知道这就是。这种行为只存在于兄弟元素在同一下这种情形。上文提到的可以看下大漠的这篇文章参考理解布局和分钟理解原理 原文链接: Fyerls Blog 说起 BFC 其实有点像闭包在大多数人印象中的感觉,平时都用过,但在不了解定义的情况下大多数人却又不知道这就是 BFC。之所以会想了解下什么...

    My_Oh_My 评论0 收藏0
  • 浅析BFC布局的概念以及作用

    摘要:的概念以及作用的概念以及作用的定义的定义直译为块级格式化上下文。是的首字母缩写,直译过来是格式化上下文,它是页面中的一块渲染区域,有一套渲染规则,决定了其子元素如何布局,以及和其他元素之间的关系和作用。BFC的概念以及作用 BFC的定义: (Block formatting context)直译为块级格式化上下文。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内...

    荆兆峰 评论0 收藏0
  • 一篇文章带拿下盒模型BFC渲染机制

    摘要:它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。一个的范围包含创建该上下文元素的所有子元素,但不包括创建了新的子元素的内部元素。 走在前端的大道上 本篇将自己读过的相关 盒模型BFC 文章中,对自己有启发的章节片段总结在这(会对原文进行删改),会不断丰富提炼总结更新。 一.常见定位方案 在讲 BFC 之前,我们先来了解一下常见的...

    DangoSky 评论0 收藏0
  • 2017文章总结

    摘要:欢迎来我的个人站点性能优化其他优化浏览器关键渲染路径开启性能优化之旅高性能滚动及页面渲染优化理论写法对压缩率的影响唯快不破应用的个优化步骤进阶鹅厂大神用直出实现网页瞬开缓存网页性能管理详解写给后端程序员的缓存原理介绍年底补课缓存机制优化动 欢迎来我的个人站点 性能优化 其他 优化浏览器关键渲染路径 - 开启性能优化之旅 高性能滚动 scroll 及页面渲染优化 理论 | HTML写法...

    dailybird 评论0 收藏0

发表评论

0条评论

voyagelab

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<