关于BFC的初步了解以及常见使用
在学习CSS的过程中,掌握一些常用方法或效果实现的原理对于我们的学习来说是很有帮助的。如最常见的清除浮动和取消外边距塌陷时使用overflow:hidden;,在学习初期往往只知道有这种用法,且使用时会受限,这样在学习掌握的过程中难免困惑和记错。在这里,根据查找网上学习资料和个人理解,尝试着用对BFC的一些浅见来帮助理解学习,如有错误之处,欢迎指正!
一、BFC的定义
BFC(Block formatting context),即"块级格式化上下文"
它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。
BFC元素特性表现原则:内部子元素再怎么变动,都不会影响外部元素。
BOX的解释:CSS布局的基本单位
可以理解为整个CSS布局是由各种各样的Box堆砌在一起(渲染)显示的。元素的类型和display属性,决定了Box的类型,由类型决定参与何种 Formatting Context(一个决定如何渲染文档的容器),渲染方式不同决定了元素不同的显示结果。盒子分类:
- block-level box:display 属性为 block, list-item, table 的元素,会生成 block-level box。并且参与 block fomatting context;
- inline-level box:display 属性为 inline, inline-block, inline-table 的元素,会生成 inline-level box。并且参与 inline formatting context;
Formatting context
Formatting context 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。最常见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC)。
二、BFC布局规则
- 内部的Box在垂直方向上,一个接一个地放置(由于根元素也会生成BFC,页面默认的排列方式就是从上到下)。
- 内部的Box在水平方向上,子元素margin box left紧靠父级border box left(默认从左到右格式化排列,右浮动从右向左)。
- Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠(外边距的合并现象)
- BFC的区域不会与float box重叠(浮动也会生成BFC)。
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
- 计算BFC的高度时,浮动元素也参与计算(overflow清除浮动的由来)。
三、BFC的生成和常见用法
1、根元素
2、float属性不为none
创建之初是为了实现文字环绕图片的功能,现常用于布局,浮动元素本身BFC化,然而浮动元素有破坏性和包裹性,失去了元素本身的流体自适应性,无法用来实现自动填满容器的自适应布局。错有错招,由于兼容性良好,比较符合普通人的堆砌认知,接受度比较好。
另,浮动会使行内元素以行内块级呈递,即可以设置宽高。
3、position为absolute或fixed
这两个严重脱标,默认相对于浏览器进行定位布局。当绝对定位存在非static父级时,相对父级定位(子绝父相),也是布局最常见的用法。
另,这两种定位会使行内元素以行内块级呈递,即可以设置宽高。
4、display为inline-block, table-cell, table-caption, flex, inline-flex
display:inline-block会让元素尺寸包裹收缩,由内容决定尺寸,会使元素以行级元素渲染(可成排显示),但以块级元素呈递(可以设宽高)。
display:table-cell会让元素像单元格一样,跟随内容宽度显示,但是宽度设定极大也不会超过表格容器的宽度。
5、overflow不为visible
常用于清除浮动(参见规则6)、解决外边距合并(参见规则2)
本身还是个很普通的元素,块状元素的流体特性保存相当完好,用于自适应布局非常棒,但超出边界的内容会被裁切,用于清除浮动时需要注意。
先写到这里,后面再补充。
关于BFC的初步了解以及常见使用的更多相关文章
- 转:关于BFC的初步了解以及常见使用
在学习CSS的过程中,掌握一些常用方法或效果实现的原理对于我们的学习来说是很有帮助的.如最常见的清除浮动和取消外边距塌陷时使用overflow:hidden;,在学习初期往往只知道有这种用法,且使用时 ...
- 浅谈BFC和IFC
先说说FC,FC的含义就是Fomatting Context.它是CSS2.1规范中的一个概念. 它是页面中的一块渲染区域.而且有一套渲染规则,它决定了其子元素将怎样定位.以及和其它元素的关系和相互作 ...
- css规范
1 前言 CSS 作为网页样式的描述语言,在百度一直有着广泛的应用.本文档的目标是使 CSS 代码风格保持一致,容易被理解和被维护. 虽然本文档是针对 CSS 设计的,但是在使用各种 CSS 的预编译 ...
- 百度前端代码规范:CSS
1.代码风格 1.1 文件 [建议] CSS 文件使用无 BOM 的 UTF-8 编码. 1.2 缩进 [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符. 1.3 ...
- 前端读者 | 百度前端编码规范(CSS)
本文来自:百度FEX 1 前言 CSS作为网页样式的描述语言,在百度一直有着广泛的应用.本文档的目标是使CSS代码风格保持一致,容易被理解和被维护. 虽然本文档是针对CSS设计的,但是在使用各种CSS ...
- CSS编码规范(转)
1 前言 CSS作为网页样式的描述语言,在百度一直有着广泛的应用.本文档的目标是使CSS代码风格保持一致,容易被理解和被维护. 虽然本文档是针对CSS设计的,但是在使用各种CSS的预编译器(如less ...
- 20165223《网络对抗技术》Exp 8 Web基础
目录 -- Web基础 实践说明 实践目标 基础问答 实践内容 Web前端:HTML Web前端:JavaScript Web后端:MySQL Web后端:PHP SQL注入,XSS攻击测试 实验遇到 ...
- I类HDACs是乳酸化修饰“eraser”
赖氨酸酰化修饰 (lysine acylation) 是一种广泛存在的.进化上高度保守的蛋白质翻译后修饰 (post-translational modifications, PTMs) 类型,通过表 ...
- 表格table常见的边框设置和初步的立体效果
做网页时经常会遇到表格,常见的表格如下: <style type="text/css"> .tbtest0 { width:500px; height:200px; b ...
随机推荐
- 关于addSubView需要注意的事项 -今天吃了一个大亏
addSubview: Adds a view to the end of the receiver’s list of subviews. 译:增加一个视图到接收者的子视图列表中. - (void) ...
- 当Eclipse报版本低时的处理方法
http://blog.sina.com.cn/s/blog_6f0c85e10100v6pv.html 更新到API12的时候出过问题,这一次难免又会出现了,不过我的版本还真全啊,哇咔咔~ 这里 ...
- 使用mvn archetype:generate生产maven工程,响应很慢
经常到下列时就不往下走了. 解决方案: 1.不使用interactive mode方式,直接指定DarchetypeArtifactId 2.仍使用interactive mode方式,但增加参数 - ...
- mysq l错误Table ‘./mysql/proc’ is marked as crashed and should be repaired
续上一篇,解决了上一篇中的问题后,启动成功,但是在数据库中操作会存在一些问题,一些操作报一下异常: Table './mysql/proc' is marked as crashed and shou ...
- 运行Maven工程总是报错:No goals have been specified for this build
Error info: No goals have been specified for this build. You must specify a valid lifecycle phase or ...
- Masonry和FDTemplateLayoutCell 结合使用示例Demo
我们知道,界面布局可以用Storyboard或Xib结合Autolayout实现,如果用纯代码布局,比较热门的有Masonry.SDAutoLayout,下面的简单demo,采用纯代码布局,实现不定高 ...
- python快速生成注释文档的方法
python快速生成注释文档的方法 今天将告诉大家一个简单平时只要注意的小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等.一看别人专业的大牛们写的文档多牛多羡慕,不用担 ...
- 在虚拟机中安装CentOS
1.准备工具 我当时下载的是VMware9.0.2,之后升级即可. 2.安装VMware9.0.2,按照步骤安装即可,安装成功并运行 选择创建新的虚拟机,出现下图,选择"自定义"后 ...
- 阿里云ECS服务器配置(Ubuntu+JAVA+Tomcat+Mysql)
最近购买了阿里云的ECS服务器,就服务器的安装配置做简要的说明,也方便日后查看. 1.远程操作服务器 远程操作服务器可以使用putty工具,下载地址:http://pan.baidu.com/s/1q ...
- 移动电商时代、微分销商城O2O生活圈系统开发功能分析
O2O生活圈系统的功能管理简单易用,随时随地发布新商品然后进行分类.管理,老少皆宜童叟无欺,实现多供应商多店铺经营模式的多层分润分销平台,满足企业自营商品与第三方供应商商品共存,打造京东+拍拍微店模式 ...