一、块级格式化上下文(BFC)

1、什么是块级格式化上下文?

    Block Formatting Contexts (BFC,块级格式化上下文)就是一个块级元素 的渲染显示规则
(可以把 BFC 理解为一个封闭的大箱子,,容器里面的子元素不会影响到外面的元素)

2、触发BFC的条件如下:

  • 根元素
  • float的值不为none。
  • overflow 除了 visible 以外的值(hidden,auto,scroll)
  • display的值为table-cell, table-caption, inline-block中的任何一个。
  • 绝对定位元素:position (absolute、fixed)
  • 弹性盒 flex boxes (元素的 display: flex 或 inline-flex)

3、BFC 的布局规则:

  • 内部的盒子会在垂直方向,一个个地放置;
  • BFC是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然
  • 属于同一个BFC的 两个相邻Box的 上下margin会发生重叠 ;
  • 计算BFC的高度时,浮动元素也参与计算
  • 每个元素的左边,与包含的盒子的左边相接触,即使存在浮动也是如此;
  • BFC的区域不会与float重叠;

4、BFC特性

1.同一BFC下外边距会发生折叠:

代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>外边距折叠</title>
<style>
body{
margin:0;
}
.box{
width:500px;
height:500px;
margin:0 auto;
}
.btm1{
width:100px;
height:100px;
background-color:orange;
margin:100px;
}
.btm2{
width:100px;
height:100px;
background-color:red;
margin:100px ;
}
</style> </head>
<body>
<div class="box"> <div class="btm1">上下100margin</div> <div class="btm2">上下100margin</div> </div>
</body>
</html>

效果图:

第一个div的下边距和第二个div的上边距发声了重叠,所以两个盒子之间距离只有100px,而不是200px。

解决方法:

  • 放在不同的BFC下

代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>外边距折叠</title>
<style>
body{
margin:0;
}
.box{
width:500px;
height:500px;
margin:0 auto;
}
.btm1{
width:100px;
height:100px;
background-color:orange;
margin:100px;
}
.btm2{
width:100px;
height:100px;
background-color:red;
margin:100px ;
}
.container{
overflow: hidden;
}
</style> </head>
<body>
<div class="box">
<div class="container">
<div class="btm1">上下100margin</div>
<div>
<div class="container">
<div class="btm2">上下100margin</div>
<div>
</div>
</body>
</html>

效果图:

这次我们可以清晰的看清两个中间是200px;并没用重叠。

2、BFC可以包含浮动的元素(清除浮动)

代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>高度塌陷</title>
<style>
body{
margin:0;
}
.box{
width:500px; margin:0 auto;
border:1px solid green;
}
.btm1{
width:100px;
height:100px;
background-color:orange;
float:left;
}
.btm2{
background-color:red; } </style> </head>
<body>
<div class="box"> <div class="btm1">浮动</div> <div class="btm2"></div> </div>
</body>
</html>

效果图:

由于容器内元素浮动,脱离了文档流,所以容器只剩下 2px 的边距高度。如果使触发容器的 BFC,那么容器将会包裹着浮动元素。

代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>高度塌陷</title>
<style>
body{
margin:0;
}
.box{
width:500px;
overflow:hidden;
margin:0 auto;
border:1px solid green;
}
.btm1{
width:100px;
height:100px;
background-color:orange;
float:left;
}
.btm2{
background-color:red; } </style> </head>
<body>
<div class="box"> <div class="btm1">浮动</div> <div class="btm2"></div> </div>
</body>
</html>

3、侵占浮动元素的问题

代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>高度塌陷</title>
<style>
body{
margin:0;
}
.box{
width:500px;
overflow:hidden;
margin:0 auto;
border:1px solid green;
}
.btm1{
width:100px;
height:100px;
background-color:orange;
float:left;
}
.btm2{
width:300px;
height:300px;
background-color:red; } </style> </head>
<body>
<div class="box"> <div class="btm1">浮动</div> <div class="btm2"> 欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看! </div> </div>
</body>
</html>

效果图:

解决方法:
通过触发btm2的BFC解决
代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>高度塌陷</title>
<style>
body{
margin:0;
}
.box{
width:500px;
overflow:hidden;
margin:0 auto;
border:1px solid green;
}
.btm1{
width:100px;
height:100px;
background-color:orange;
float:left;
}
.btm2{
width:300px;
height:300px;
background-color:red; }
.bb{
overflow:hidden
}
</style> </head>
<body>
<div class="box"> <div class="btm1">浮动</div> <div class="bb"> <div class="btm2"> 欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看!
欢迎大家观看! </div>
</div> </div>
</body>
</html>

效果图:

持续更新,欢迎大家指教!

css 块级格式化上下文(BFC)的更多相关文章

  1. css中margin重叠和一些相关概念(包含块containing block、块级格式化上下文BFC、不可替换元素 non-replaced element、匿名盒Anonymous boxes )

    平时在工作中,总是有一些元素之间的边距与设定的边距好像不一致的情况,一直没明白为什么,最近仔细研究了一下,发现里面有学问:垂直元素之间的margin有有互相重叠的情况:新建一个BFC后,会阻止元素与外 ...

  2. 块级格式化上下文(BFC)

    一.什么是BFC 具有BFC属性的元素也属于普通流定位方式,与普通容器没有什么区别,但是在功能上,具有BFC的元素可以看做是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且具有普通容 ...

  3. 详解块级格式化上下文(BFC)

    相信大家和我一样,第一次听到别人说CSS 块级格式化上下文(block formatting context,简称:BFC)的时候一头雾水,为了帮助大家弄清楚块级格式化上下文,我翻阅了W3C的CSS规 ...

  4. CSS2系列:BFC(块级格式化上下文)IFC(行级格式化上下文)

    BFC 块级格式化上下文,不好理解,我们暂且把她理解成"具有特殊的一类元素" 哪些元素会生成BFC? 根元素 float属性不为none position为absolute或fix ...

  5. BFC(Box,Formatting,Context) —— 块级格式化上下文

    Box:CSS布局的基本单位 Formatting context是页面中的一块渲染区域,最常见的是BFC和IFC,CSS3增加了GFC和FFC BFC定义:块级格式化上下文,它是一个独立的渲染区域, ...

  6. BFC块级格式化上下文简述

    做过页面编写的各位应该对定位不陌生了,这个样式表中的重头戏,也是最难把控的元素之一,今天在这里我们要讲到的就是与浮动与清除浮动相关的定位元素,对于定位有很多种,有绝对定位,还有相对定位,固定定位,静态 ...

  7. BFC块级格式化上下文

    BFC块级格式化上下文 触发条件 overflow 值不为 visible 的块元素 根元素 html 元素 浮动元素(元素的 float 不是 none) 绝对定位元素(元素的 position 为 ...

  8. BFC 详说 Block Formatting Contexts (块级格式化上下文)

    定位方案是控制元素的布局,在 CSS 2.1 中,有三种定位方案——普通流 (Normal Flow) .浮动 (Floats) 和绝对定位 (Absolute Positioning) ,下面分别对 ...

  9. 基础总结(02)--BFC(块级格式化上下文)

    BFC(块级格式化上下文)布局规则 1.元素垂直排列. 2.同一个BFC相邻两个元素的margin会重叠. 3.BFC区域不会与浮动元素重叠. 4.BFC就是页面上的一个隔离的独立容器,容器里面的子元 ...

随机推荐

  1. C#异常日志

    代码比较简单,仅提供一种思路 /// <summary> /// 将异常打印到LOG文件 /// </summary> /// <param name="ex& ...

  2. leetcode-mid-array-334 Increasing Triplet Subsequence-NO

    mycode   time limited class Solution(object): def increasingTriplet(self, nums): """ ...

  3. 在一个shell中查看管理 任务(前台和后台)/工作jobs 的命令

    在一个shell中查看管理 任务(前台和后台)/工作jobs 的命令 jobs是在同一个shell环境而言, 才有意义的. 为什么有jobs这个命令? 是因为, 如果从cmd line运行gui程序时 ...

  4. 使用Chrome逆向分析JS实战---分析google网站翻译器原文存放位置

    剧透:就是使用了一下Chrome DevTools的Memory功能,通过已知的JS变量的值查找JS内存中变量的引用 一:不分析一下现有的网页翻译方法么? 总所周知,(As is well known ...

  5. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_7_字节输出流的续写和换行

    再执行一次.内容会追加在后面 换行 不同系统下的换行符号   每次都写上换行符号,在for循环里面,循环10次

  6. jdbc步骤:

    一.注册数据库驱动 Class.forName("com.mysql.jdbc.Driver"); 二.建立连接(Connection) Connection conn = Dri ...

  7. Win10不能远程其他远程计算机的解决办法

    Win10不能远程其他远程计算机的解决办法   转自: https://blog.csdn.net/qq_38197830/article/details/69488236 首先打开控制面板——> ...

  8. Consul集群Server模式

    Consul集群Server模式 架构示意图 Consul在生产环境下运行模式分为两种:Server模式和Client模式(dev模式属于开发模式不在这里讨论),我们先用Server模式搭建一个Con ...

  9. python 二维数组转一维数组

    三种方法 比如 a = [[1, 2], [3, 4], [5, 6]] 列表推导式 [i for j in a for i in j] 库函数 from itertools import chain ...

  10. 该项目不知道如何运行配置文件 IIS Express。

    项目右键属性-->调试 -->启动改为项目即可