在 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. 轻量级集群管理软件-Ansible

    ansible概述和运行机制 ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具,  它用Python写成,类似于saltstack和Puppet,但是有一个不同 ...

  2. Nginx 配置文件优化

    user www www; #用户&组 worker_processes auto; #通常是CPU核的数量存储数据的硬盘数量及负载模式,不确定时将其设置为可用的CPU内核数(设置为“auto ...

  3. DLG消息

    WM_GETMINMAXINFO 0X0024 WM_NCCREATE 0X0081 WM_NCCALCSIZE 0X0083   WM_CREATE 0X0001 WM_SIZE 0X0005 WM ...

  4. OpenStack-Neutron-VPNaaS-代码

    目前juno只支持ipsec的vpn  但是其实稍微修改代码pptp/openvpn/gre也都是可以支持的,下面看看vpn服务的代码流程: 默认我们创建好了ide策略.ipsec策略和vpn服务,因 ...

  5. nodejs:导出Excel和解析导入的Excel

    用的是koa2框架,但好好处理一下,用express框架也是可以的.导出的Excel是xlsx的格式,解析导入Excel的有xlsx和csv格式.通常导入Excel是要上传的,然后获取文件的路径,这里 ...

  6. vue命令行错误处理

    全局安装vue/cli时:npm install -g @vue/cli (1)Error: EACCES: permission denied, access '/usr/local/lib/nod ...

  7. Kindle:自动追更之Calibre2脚本

    #!/usr/bin/env python2 # vim:fileencoding=utf-8 from __future__ import unicode_literals, division, a ...

  8. css的扩展技术

    CSS的扩展技术 (在原来的CSS语言的基础上扩展了js,可以在里面写js ) 一.less 定义: @color:red; //定义颜色 @body-color:blue; @div-color:y ...

  9. HTML5新增常用属性

    一. 代码名称语义化的好处 1.能让搜索引擎更好的收录 2.对于特殊设备如盲人设备好解析 二.article和section的区别 article(文章):独立且能被外部引用 section(章节.段 ...

  10. appium工作原理

    Appium原理 面试的时候,被问到appium原理,一点不会,实在尴尬.大家可以直接翻看原作https://blog.csdn.net/jffhy2017/article/details/69220 ...