css 块级格式化上下文(BFC)
一、块级格式化上下文(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)的更多相关文章
- css中margin重叠和一些相关概念(包含块containing block、块级格式化上下文BFC、不可替换元素 non-replaced element、匿名盒Anonymous boxes )
平时在工作中,总是有一些元素之间的边距与设定的边距好像不一致的情况,一直没明白为什么,最近仔细研究了一下,发现里面有学问:垂直元素之间的margin有有互相重叠的情况:新建一个BFC后,会阻止元素与外 ...
- 块级格式化上下文(BFC)
一.什么是BFC 具有BFC属性的元素也属于普通流定位方式,与普通容器没有什么区别,但是在功能上,具有BFC的元素可以看做是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且具有普通容 ...
- 详解块级格式化上下文(BFC)
相信大家和我一样,第一次听到别人说CSS 块级格式化上下文(block formatting context,简称:BFC)的时候一头雾水,为了帮助大家弄清楚块级格式化上下文,我翻阅了W3C的CSS规 ...
- CSS2系列:BFC(块级格式化上下文)IFC(行级格式化上下文)
BFC 块级格式化上下文,不好理解,我们暂且把她理解成"具有特殊的一类元素" 哪些元素会生成BFC? 根元素 float属性不为none position为absolute或fix ...
- BFC(Box,Formatting,Context) —— 块级格式化上下文
Box:CSS布局的基本单位 Formatting context是页面中的一块渲染区域,最常见的是BFC和IFC,CSS3增加了GFC和FFC BFC定义:块级格式化上下文,它是一个独立的渲染区域, ...
- BFC块级格式化上下文简述
做过页面编写的各位应该对定位不陌生了,这个样式表中的重头戏,也是最难把控的元素之一,今天在这里我们要讲到的就是与浮动与清除浮动相关的定位元素,对于定位有很多种,有绝对定位,还有相对定位,固定定位,静态 ...
- BFC块级格式化上下文
BFC块级格式化上下文 触发条件 overflow 值不为 visible 的块元素 根元素 html 元素 浮动元素(元素的 float 不是 none) 绝对定位元素(元素的 position 为 ...
- BFC 详说 Block Formatting Contexts (块级格式化上下文)
定位方案是控制元素的布局,在 CSS 2.1 中,有三种定位方案——普通流 (Normal Flow) .浮动 (Floats) 和绝对定位 (Absolute Positioning) ,下面分别对 ...
- 基础总结(02)--BFC(块级格式化上下文)
BFC(块级格式化上下文)布局规则 1.元素垂直排列. 2.同一个BFC相邻两个元素的margin会重叠. 3.BFC区域不会与浮动元素重叠. 4.BFC就是页面上的一个隔离的独立容器,容器里面的子元 ...
随机推荐
- 《SQL Server 2012 T-SQL基础》读书笔记 - 5.表表达式
Chapter 5 Table Expressions 一个表表达式(table expression)是一个命名的查询表达式,代表一个有效的关系表.SQL Server包括4种表表达式:派生表(de ...
- sip/sdp/rtp/rtcp/rtsp间的关系
用一句简单的话总结:RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步. 转自该博客:http://blog.csdn.net/xdwyyan/article/detai ...
- HTML,CSS,JS个别知识点总结
<input>是自闭合标签,没有<input></input>一说,只能写作<input/>. <div>可以是行标签也可以作为块标签,作为 ...
- Hibernate入门简介
什么是Hibernate框架? Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取 ...
- sql数据库收缩
回收步骤: 1.查看日志文件大小[一般回收比较大的] --适用于RDS For SQL Server2012\2016 SELECT DB_NAME(database_id) AS [Database ...
- (转)websphere内存溢出,手动导出was的phd和javacore文件
原文:https://www.cnblogs.com/zhengbn/p/3499700.html 1:服务器-->服务器类型-->WebSphere Application Server ...
- 【运维相关】MongoDB那些坑
前言 某个早期技术债务项目线上有一个mongoDB服务,用途很简单,存一些文件而已.不过用户那边突然报个bug说上边的图片丢失了,起初没当回事认为是代码遇到错了,直到后来看了用户详细的bug复现后,登 ...
- Spring MVC 向页面传值-Map、Model和ModelMap https://www.cnblogs.com/caoyc/p/5635878.html
Spring MVC 向页面传值-Map.Model和ModelMap 除了使用ModelAndView方式外.还可以使用Map.Model和ModelMap来向前台页面创造 使用后面3种方式,都是在 ...
- debian下使用shell脚本时出现了 declare:not found 解决方法
问题:出现declare:not found的提示 解决:原来,UBUNTU用的是dash(后来证明这个其实这个不是错误的原因:从#!/bin/bash到#!/bin/dash,依旧无法运行,在这写出 ...
- 001/Node.js(Mooc)--基础知识
一.Node.js基础知识 node.js用C++语言编写. 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时 ...