对BFC的深层理解及应用

  

一、什么是BFC呢?

  1. BFC 即 Block Formatting Contexts (块级格式化上下文)
  自译:如果BFC的盒子相当于985,211的高校,普通的盒子就是普通的大学

二、BFC的触发条件有哪些?

  1. 根元素(html标签就是一个BFC)
  2. float的值不为none时
  3. overflow的值不为visibility
  4. display的值为 line-block/table-cell/table-caption/flex/inline-flex
  5. position的值为absolute或者fixed
三、BFC的一些特性
  1. Box垂直方向的距离由margin决定,属于同一个BFC的两个相邻box的margin会发生重叠

<style type="text/css">
.box1{width: 200px;height: 200px;margin-bottom: 50px;background: pink;}
.box2{width: 200px;height: 200px;margin-top: 50px;background: blue;}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>

    

    box1和box2都在HTML的BFC下,所以会发生重叠。
    重叠以后,想要不重叠可以给box2添加一个父元素,并且添加overflow:hidden,那么这个父元素就是BFC了,就不继续在同一个BFC中了,也就不会发生重叠。

  2. 计算BFC高度时,浮动元素也参与计算
    应用:使用overflow等方法可以解决浮动元素高度塌陷问题
       给浮动元素的父盒子添加了overflow:hidden;之后就变成了BFC,BFC在计算高度时,浮动元素也会参与计算。
  3. BFC的区域不会与float的区域发生重叠
    应用:可以实现自适应两栏布局或者三栏布局(圣杯布局和双飞翼布局)
    上面的一个元素浮动,下面的一个元素没有浮动,那么会发生重叠,原因是因为浮动之后不占据位置,所以后面的元素会上去。

<style type="text/css">
body{margin: 0; padding: 0;}
.left{width: 300px;height: 300px; background: red;float: left;}
.right{height: 600px; background: yellow;}
</style>
</head>
<body>
<div class="left">1</div>
<div class="right">2</div>
</body>

     

    当给下面的元素添加了float/overflow/display的时候就不重叠了,原因是因为给了这些声明之后,就触发的下面的元素为BFC,而BFC里面规定了,BFC区域不会与浮动盒子发生重叠。

    

    既要BFC的区域不会与float的box重叠,又要右边的容器自适应。

    - overflow:hidden/auto/scroll;
    - display:flex/inline-flex;
  4. BFC内部的Box会在垂直方向,一个接一个的放置。
    
  5.  盒子的左边距会与包含块border外边框的左边相接触(对于从左到右的格式化,否则相反),即使存在浮动也会如此。
    
  6. BFC就是页面上的一个独立容器,容器里面的元素不会影响到外面的元素

原文地址:https://www.cnblogs.com/xiaozhi666666/p/12347643.html

时间: 2024-10-16 02:38:41

对BFC的深层理解及应用的相关文章

poj水题-3062 超级水题的深层理解——代码简化

题目很简单,要求输入什么样输出什么样.以回车结束 这就是我用的C代码 #include <stdio.h> int main (){char p;for(;gets(&p);)puts(&p);return 0;} 使用了代码简化方案,我简化到了75B.有大神简化到31B,真想看看他们的源代码.我估计他们比我个能够了解语言规则. 这里不得不说一本叫<短码之美>的书.介绍了这道题.但我试过了,没用.可能系统升级了吧,必须要求C99. ,还听说不用#include也行,

android中Logcat的深层理解

Android的开发也可以归类为嵌入式设备的开发,即便不是嵌入式开发,依然要注意对内存和处理的使用.养成一个好的习惯对自己的帮助是很大的. 在Log的源码中可以看到这样的注释: The order in terms of verbosity, from least to most is * ERROR, WARN, INFO, DEBUG, VERBOSE. Verbose should never be compiled * into an application except during

HDOJ1016 Prime Ring Problem(DFS深层理解)

Prime Ring Problem 时间限制: 2000ms               内存限制: 32768KB                HDU       ID: 1016 题目描述 A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent

MySQL深层理解

MySQL是一个关系型数据库,关联的数据保存在不同的表中,增加了数据操作的灵活性. 执行流程 MySQL是一个单进程服务,每一个请求用线程来响应, 流程: 1,客户请求,服务器开辟一个线程响应用户. 2,用户发起SQL请求, 3,查询缓存,并记录用户SQL,如果再次查询,直接查缓存. 4,没有缓存,进入分析器, 语法分析器:检查语法 词法分析器:将命令切片,按空格隔开,获取表,内容和用户权限. 5,优化执行路径选择,生产执行树. 6,存储引擎:用于管理存储文件系统,给上层应用提供不同管理. 那么

对于src路径问题,深层理解的实践。且对于输出流write()两个方法的源码阅读。

根据昨天的总结,可深层理解图片中src的路径.所以今天实现了一个想法.就是路径写入的是Controller,然后自动去本地找. 其实就是将电脑的本地图片 显示出来.通过输出流的方式. 代码如下: @RequestMapping(value = "/img/{id}") public void img(@PathVariable(value = "id") String id,HttpServletResponse response) { File file = ne

BFC的基础理解及应用场景

最近学习了BFC,开始学习的时候,单纯看概念,有种云里雾里的感觉,字都认识,凑一起啥意思大致也知道,但是具体有什么用呢? 这个就有点迷迷糊糊的,经过老师的讲解,以及自己课后的代码实验与总结,就拨云见日了,在这里分享自己对BFC的一些理解. BFC的概念: BFC 即(Block Formatting Context)块级格式化上下文,指一个独立的块级渲染区域,只有块级盒子(box)参与,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关. 与之对应的还有IFC.GFC.FFC. BFC

关于iOS 类扩展Extension的进一步深层理解

很多人可能会问  iOS的分类和扩展的区别,网上很多的讲解,但是一般都是分类讲的多,而这也是我们平常比较常用的知识:但是,对于扩展,总觉得理解的朦朦胧胧,不够透彻. 这里就讲一下我自己的理解,但是这个理解也是集合了前辈的经验来的,只不过我用大白文再延伸一点. 对于类扩展,先看这段话: 我们定义类时,在.h里写的变量如果不是public一般不能被外部直接调用,如果我有的方法不想被外部调用只给内部使用呢?至此,延展出现. 其实,延展就是类似于"定义私有方法"的一种子类. 对于如何创建: 通

接口深层理解

JAVA 接口理解 .txt27 信念的力量在于即使身处逆境, 亦能帮助你鼓起前进的船帆: 信念的魅 力在于即使遇到险运,亦能召唤你鼓起生活的勇气:信念的伟大在于即使遭遇不幸,亦能促 使你保持崇高的心灵. java 接口实现 对初学者来说,接口不是很好理解.现将某高手的一篇文章贴出来,共大家分享! 我们来看一个类 class A { private int a; public int getA() { return a; } } 这个类的属性是私有的,外界不能访问,而外界可以通过公有方法来访问这

java中的接口深层理解

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.