一、块级格式化上下文(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. 手机H5设计尺寸

    手机型号 导航栏和状态栏的高度 宽度 高度 可视区域高度 iPhone 4 (4, 4S) 64px 320px 480px 416px iPhone 5 (5c, 5s) 64px 320px 56 ...

  2. 转: Github上关于iOS的各种开源项目集合

    https://blog.csdn.net/jiashaoying/article/details/79079500 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. ...

  3. MySQL慢日志分析之pt-query-digest

    http://www.php.cn/mysql-tutorials-357655.html 监控慢日志: pt-query-digest 切割分析慢日志 anemometer 删掉垃圾查询 pt-ki ...

  4. ORACLE表空间offline谈起,表空间备份恢复

    从ORACLE表空间offline谈起,表空间备份恢复将表空间置为offline,可能的原因包括维护.备份恢复等目的:表空间处于offline状态,那么Oracle不会允许任何对该表空间中对象的SQL ...

  5. 认识DOM(上)

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...

  6. nw打包vue项目exe

    首先需要下载nw,然后解压打开,如图: 在以上新建一个同级项目文件夹,然后把把项目打包,将dist中的static文件夹与index.html放入,并新建一个package.json(可使用npm i ...

  7. SpringMVC学习01——HelloSpringMvc Demo

    HelloWorldController.java文件 package com.su.controller; import org.springframework.stereotype.Control ...

  8. Centos 下更改MySQL源数据存放目录(datadir)

    MySQL在安装完成之后,其源数据默认存放在 /var/lib/mysql/ 目录下,一般情况下,该目录在根目录下,由于Linux系统默认  根目录所在挂载的磁盘容量有限,随着生产数据的不断产生,该目 ...

  9. 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class

    另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...

  10. 安全运维 - Windows系统攻击回溯

    Windows应急事件 病毒.木马.蠕虫 Web服务器入侵事件或第三方服务入侵事件 系统入侵事件 网络攻击事件(DDOS.ARP.DNS劫持等) 通用排查思路 获知异常事件基本情况 发现主机异常现象的 ...