在 web 页面布局中,有三种控制元素版式布局的模型:

  • 普通流 (Flow)

元素在 HTML 中按照先后位置从上至下的流式排列方式布局。

  • 浮动流(Float)

    在浮动布局中,元素首先按照普通流的位置呈现,然后根据浮动的方向向左边或右边偏移。

  • 定位流(Position)

    在绝对定位布局中,元素会整体脱离普通流,而元素的具体位置由绝对定位的坐标决定。

BFC 即 Block Formatting Contexts (块级格式化上下文),它属于普通流。具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素。

只要元素满足以下任一条件即可触发 BFC :

  1. float 元素:除 none 的值,float: left | right;

  2. 绝对定位元素:position: absolute | fixed;

  3. display:  inline-block | table-cells | table-caption | inline-flex | flex;

  4. overflow 除了 visible 的值,overflow: hidden | scroll | auto;

BFC 的特性:

  1. 同一个 BFC 下外边距折叠

    例如:上下两个盒子 div,一个设置了 margin-bottom,一个设置了 margin-top,两个 div 的边距就会重叠而取其中最大的边距为两个 div 之间的距离。如果要避免这种外边距折叠,可以新建一个 BFC 容器,将两个 div 放在不同的 BFC 容器中。

<div> DIV1 </div>
<div> DIV2 </div> <!-- 可以更改成如下 -->
<div>
<p> DIV1 </p>
</div>
<div> DIV2 </div>

  2. 可以清除浮动

<div>
<div style="width: 100px;height: 100px;float: left;"></div>
</div> <!-- 触发容器的BFC后 -->
<div style="overflow: hidden">
<div style="width: 100px;height: 100px;float: left;"></div>
</div>

  3. BFC 可以阻止元素被浮动元素覆盖

<div style="width: 100px;height: 100px;float: left;">我是一个左浮动的元素</div>
<div style="height: 200px;">我是一个没有设置浮动, 也没有触发 BFC 元素</div> <!-- 触发 BFC 后 -->
<div style="width: 100px;height: 100px;float: left;">我是一个左浮动的元素</div>
<div style="height: 200px; overflow: hidden;">我是一个没有设置浮动, 也没有触发 BFC 元素</div>

这个方法可以用来实现两列自适应布局,左边的宽度固定,右边自适应宽度。

浅谈BFC的理解的更多相关文章

  1. 【css】浅谈BFC

    定义: 块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域. BFC的布 ...

  2. 浅谈BFC

    Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个 Box 组成的.元素的类型和 display属性,决定了这个 Box 的类型. 不同类型的 Box, 会参与不同的 Fo ...

  3. 第一篇 ERP是什么?-从道的层面浅谈我的理解

    世界上称为ERP软件的软件很多,国外的有SAP,ORACLE,国内的有金蝶,用友,浪潮.这些由不同的厂商开发制作的软件总有其软件适用的场合.这个场合就是企业,而且是市场经济中的企业.个人是不会购买ER ...

  4. 浅谈BFC与应用

    什么是BFC BFC(Block formatting context)的中文翻译我们一般叫做块级格式化上下文.它是一个独立渲染的区域,规定了内部如何布局,同时不受外界的影响.我们的根元素本身就是一个 ...

  5. 浅谈BFC和IFC

    先说说FC,FC的含义就是Fomatting Context.它是CSS2.1规范中的一个概念. 它是页面中的一块渲染区域.而且有一套渲染规则,它决定了其子元素将怎样定位.以及和其它元素的关系和相互作 ...

  6. 浅谈BFC与高度塌陷

    这个概念我大概是去年时候接触到的吧,略略记录了一下,没有深入研究,恰逢最近秋招,在这里写一写,顺便加深自己的印象. 什么是BFC? 页面中的元素都隐含一个属性Block Formatting Cont ...

  7. 浅谈:深入理解struts2的流程已经spring和struts2的整合

    第一步:在tomcat启动的时候 1.在tomcat启动的时候,首先会加载struts2的核心过滤器StrutsPrepareAndExecuteFilter <filter> <f ...

  8. C++11标准的智能指针、野指针、内存泄露的理解(日后还会补充,先浅谈自己的理解)

    1.野指针的概念.成因以及避免 首先,来说说什么是野指针,所谓野指针就是一个指向未申请访问受限的内存区域或者已经删除了的对象的指针. 什么意思呢?就是本来一个指针指向一个对象.一块内存,但是由于程序( ...

  9. 浅谈分布式共识算法raft

    前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行.高效流转.主节点挂了怎么办.如何选主.各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题 ...

随机推荐

  1. day20 python常用模块

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀.     但其实import加载的模块分为四个通用类别: 1 使用pytho ...

  2. Java EE开发技术课程第三周

    一.分析Filter例子: @WebFilter(filterName="log",urlPatterns={"/*"})//创建一个LOgFilter类pub ...

  3. oracle 中对查询出来的数据进行切割、截取等操作

    oracle 中对查询出来的数据进行切割.截取等操作 最近遇到一个问题,需要把一个带有,的字符串拆分成多行.通过查询资料,这个操作需要使用以下2个关键知识: 1. REGEXP_SUBSTR函数 这个 ...

  4. java中的getStackTrace和printStackTrace的区别

    getStackTrace()返回的是通过getOurStackTrace方法获取的StackTraceElement[]数组,而这个StackTraceElement是ERROR的每一个cause ...

  5. docker enable overlay2 quota on Centos 7

    参考文档 docker overlay2的 --storage-opt 需要启动mount 参数中有pquota 参考上边的文档mount中的xfs 含有pquota 将 /etc/fstab 文件中 ...

  6. es6转es5 在线转换工具

    es6转es5 在线转换工具 Babeljs es6console

  7. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'catchFromPBomService': Cannot create inner bean '(inner bean)#302efb82' of type [com.thinkgem.jeesite.modules.fd

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'catchFromPBo ...

  8. JS文件写法操作,DOM基本操作

     js文件写法.规范 // 定义全局变量 var num = 0;//这个是用来记数的. // 页面加载完成 window.onload = funtion(){ intVar();//初始化变量 s ...

  9. python_requests官方文档中文版

    http://cn.python-requests.org/zh_CN/latest/

  10. MySQL查询缓存总结

    可以通过下面的SQL查看当前查询缓存相关参数状态: show variables like '%query_cache%'; 1)  query_cache_type 查询缓存类型: 0 表示始终不适 ...