在 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. JGit 切换分支

    //gitDir是git仓库的根目录,这个仓库必须是已clone好了 File file = new File(gitDir); Git git = Git.open(file); //切换分支, i ...

  2. vert.x 学习笔记

    Verticle 一个verticle是部署在Vert.x.单位 每个verticle包含启动它的主要手段. 一个应用程序可以是单个verticle或者可以由与彼此经由事件总线通信的多个verticl ...

  3. kubernetes-pod-infrastructure:latest

    解决方法:试试通过手动下载 docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest docker pull 是还是 ...

  4. 网络-01-端口号-linux端口详解大全

    0 | 无效端口,通常用于分析操作系统1 | 传输控制协议端口服务多路开关选择器2 | 管理实用程序3 | 压缩进程5 | 远程作业登录7 | 回显9 | 丢弃11 | 在线用户13 | 时间17 | ...

  5. python 文件重命名

    将文件夹中的.jsp重命名为.html import os def rename(path): files = os.listdir(path) for file in files: dir = os ...

  6. 《linux 必读》

    1. linux 内核设计与实现 2. 深入理解 linux 内核

  7. OSM自建服务

    1.  安装PostgreSQL. 2.  安装PostGis(安装目录为PostgreSQL目录). 3.  安装osm2pgsql. osm2pgsql下载地址:http://customdebu ...

  8. Typora学习笔记

    Typora学习笔记 标题 用"#"表示 快捷键:ctrl+1,2,3,4,5 居中 居中可用center标签 强调 使用强调 加粗 使用加粗 下划线 使用u标签:下划线 有序列表 ...

  9. 【WEB】带边框的网页页面实现

    前言 这是编程入学者尝试各种技术的备忘记录和自我激励,内容非常简单而单纯. 正文 成品 样式参考    http://tenhou.net/ 上边框 http://tenhou.net/img/f0t ...

  10. 3、SpringBoot集成Storm WorldCount

    RandomSentenceSpout //数据源,在已知的英文句子中,随机发送一条句子出去. public class RandomSentenceSpout extends BaseRichSpo ...