CSS BFC学习笔记
BFC,全称是Block Formatting Context,块级格式化上下文。
详细是什么,能够理解为页面元素的一种特性。触发了BFC的元素往往会产生一些对刚開始学习的人而言意想不到的效果。
触发BFC的方法有下面几种,满足当中随意一种就能触发BFC:
- 浮动元素(float除了none以外随意值)
- 绝对定位元素(position为absolute或fixed)
- display为inline-block或table-cell或table-caption
- overflow为除了visible以外的其它值(hidden、auto或scroll)
那么BFC有哪些特点呢,为什么要触发BFC呢? 先从几种现象说起吧。
一、外边距合并
有下面结构的html
<div>
<p>这是一个段落</p>
</div>
<div>
<p>这是一个段落</p>
</div>
CSS 例如以下
body{
margin: 0;
}
div{
background-color: #2595e5;
margin: 10px 0 10px;
}
p{
background-color: #ff9900;
margin: 10px 0 10px;
}
产生效果:
代码里给div和p都加上了上下边距,可是产生的结果来看好像p标签的上下边距并没有生效,并且在垂直方向上,div的边距仅仅有10px而不是两个10px,这事实上是由于他们产生了外边距重叠。
简单地说,外边距合并指的是,在普通文档流中,当两个垂直外边距相遇时,它们将形成一个外边距。
合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
怎样避免这样的效果的发生呢。这将引出BFC的第一个特性:
阻止和子元素发生外边距折叠
给div加上overflow:hidden属性。即触发BFC的第四个条件:
div{
background-color: #2595e5;
margin: 10px 0 10px;
/*触发BFC*/
overflow: hidden;
}
再看效果
由此可见。触发了BFC的元素,不和它的子元素发生外边距折叠。
二、高度塌陷
在使用浮动的时候,常常会出现这样的情况:
<div class="outer">
<div class="inner"></div>
</div>
CSS:
body{
margin: 0;
}
.outer{
background-color: #2595e5;
border: 1px solid #f00;
}
.inner{
background-color: #ff9900;
width: 50px;
height: 50px;
float: left;
}
效果:
能够看到outer的高度是0,并没有算上内部浮动的inner,这样的现象称之为高度塌陷。
BFC将能解决问题,这就是BFC的第二个特性:
包括浮动元素
相同的给outer加上overflow:
.outer{
background-color: #2595e5;
border: 1px solid #f00;
/*触发BFC*/
overflow: hidden;
}
产生效果:
三、元素被浮动元素覆盖
这个问题相同出如今有浮动元素的时候:
<div class="left"></div>
<div class="right"></div>
CSS:
body{
margin: 0;
}
.left{
width: 50px;
height: 50px;
background-color: #2595e5;
float: left;
}
.right{
background-color: #ff9900;
width: 100px;
height: 100px;
}
产生效果:
能够看到,浮动的元素覆盖在了其相邻元素上。解决问题将引出BFC的第三个特性:
阻止元素被浮动元素覆盖
对right加入overflow属性:
.right{
background-color: #ff9900;
width: 100px;
height: 100px;
/*触发BFC*/
overflow: hidden;
}
效果:
这个感觉跟给right也加了float: left一样,由于使用float: left相同会触发BFC(第一个条件)
当然这个情况仅仅出如今两个元素宽度之和不大于父元素宽度的时候。不然right会换行。
总结
总结一下,触发了BFC的元素将具有下面特点:
- 阻止和子元素外边距折叠
- 包括浮动元素
- 阻止元素被浮动元素覆盖
最后须要说明的是IE7下面浏览器中并不支持BFC,而是有其特有的hasLayout,它和BFC非常类似,但产生了非常多问题。
触发hasLayout的方式之中的一个是使用zoom: 1。所以使用的时候最好加上zoom: 1,保证兼容性。
CSS BFC学习笔记的更多相关文章
- css居中学习笔记
css居中学习笔记 一.水平居中 以下面的代码为例: <body> <div class="parent"> <div class="chi ...
- CSS 3 学习笔记
css 3 学习笔记 文本: word-wrap : normal | break-word取值:normal: 控制连续文本换行.break-word: 内容将在边界内换行.如果需要,词 ...
- (2)《Head First HTML与CSS》学习笔记---img与基于标准的HTML5
1.浏览器处理图像的过程: 1.服务器获取文件,显示出文本结构,以及预留默认的大小给<img>(如果该<img>有width-1值和height-1值,则根据这个值提前设好页面 ...
- 【干货】Html与CSS入门学习笔记1-3
从23号开始用了4天时间看完了<Head First Html与CSS>这本书,本书讲解方式深入浅出,便于理解,结合习题,便于记忆,是一本不错的入门书.下面是本书的学习笔记: 一.认识HT ...
- (6)《Head First HTML与CSS》学习笔记---结尾、《HTML5权威指南》读书笔记
1.内联元素的外边距.内边距与块元素稍有不同. 如果一个内联元素四周都增加外边距,只能看到左边和右边会增加空间:你也可以对内联元素的上下增加内边距,不过这个内边距不会影响包围它的其他内联元素的间距—— ...
- HTML&CSS基础学习笔记1.16-单元格间距和表格主体
上一篇讲html学习笔记,讲过了合并单元格,那么今天就来介绍下如何控制单元格的间距,以及表格主体的相关知识. 单元格间距 在上个知识点的显示结果中你可能发现了,单元格与单元格之间有一小段空白.这是由& ...
- HTML&CSS基础学习笔记—创建列表
创建一张表格 很多时候我们需要在网页上展示一些数据,使用表格可以很好的来展示数据. 在HTML中<table>标签定义 表格. <table> </table> 添 ...
- HTML&CSS基础学习笔记1.32-选择器是什么
选择器是什么 选择器是CSS样式为了定位页面上的任意元素的一种方法. 选择器主要分为:元素标签选择器.通用选择器.类选择器.ID选择器.属性选择器.组合选择器.伪类选择器.伪元素选择器. 先做个了解, ...
- HTML&CSS基础学习笔记1.31-像素和相对长度
像素和相对长度 之前的笔记中,我们提到过用属性width.height来设置图片的尺寸,它们的单元都是”px(像素)”.长度单位总结一下,目前比较常用到px(像素).em.% 百分比,要注意其实这三种 ...
随机推荐
- Java编程:切面条
/* 一根高筋拉面,中间切一刀,能够得到2根面条. 假设先对折1次.中间切一刀.能够得到3根面条. 假设连续对折2次,中间切一刀.能够得到5根面条. 那么.连续对折10次.中间切一刀.会得到多少面条呢 ...
- UVA-1335(UVALive-3177) Beijing Guards 贪心 二分
题面 题意:有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满足所有人 ...
- Java中Calendar(日历)相关API举例
Java中Calendar(日历)相关API举例,实现功能:输入一个年份和月份打印出这个月的日历. package calendarPrint; import java.util.Calendar; ...
- 实现第三方登录(QQ、微信、微博)
第三方登录,就是使用大家比较熟悉的比如QQ.微信.微博等第三方软件登录自己的网站,这可以免去注册账号.快速留住用户的目的,免去了相对复杂的注册流程.下边就给大家讲一下怎么使用PHP开发QQ登录的功能. ...
- WPF使用Winform PDFView控件
最近开发wpf项目中有一个模块需要显示PDF文件内容.由于WPF本身没有PDF加载控件(似乎有收费的我查到过类似的资料.如果有新的pdf控件也请通知我一下谢谢). 项目使用之前也是从网上获取的资料,因 ...
- 百度地图api的简单应用
百度地图api 获取经纬度(通过浏览器的) //获取经纬度 window.navigator.geolocation.getCurrentPosition(function(position) { a ...
- 利用JavaScript实现文本框改文字功能
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...
- poj1149 PIGS 最大流(神奇的建图)
一开始不看题解,建图出错了.后来发现是题目理解错了. if Mirko wants, he can redistribute the remaining pigs across the unlock ...
- 电商物流仓储WMS业务流程
电商物流仓储WMS业务流程 SKU是什么意思? 一文详解电商仓储管理中SKU的含义 从货品角度看,SKU是指单独一种商品,其货品属性已经被确定.只要货品属性有所不同,那么就是不同的SKU. PO信息 ...
- @section Scripts{}的使用
MVC视图中,Javascripts代码被放于下面的Razor代码中(@section Scripts{}). 好处:在视图进行JavaScript编程时,是一个很好的实践,在共享视图(_Layout ...