我对BFC的理解与总结
来源:互联网 发布:php转node.js 编辑:程序博客网 时间:2024/04/20 09:14
在css中存在盒式模型概念,所以对一个元素设置css样式时,首先需要知道这个元素是block类型还是inline类型。而BFC就是用来格式化块级盒子。
1. BFC概念的理解
BFC(Block formatting context) “块级格式化上下文”,指一个独立的块级渲染区域,只有Block-level BOX参与,该区域拥有一套渲染规则来约束块级盒子的布局,与区域外部无关。
2.生成BFC的元素
(1) 根元素
(2) float:不为none
(3) overflow:不为visible
(4) display:为inline-block table-cell table-caption flex inline-flex
(5) position:为absolute fixed
3.BFC的约束规则
(1) 内部的BOX会在垂直方向上一个接一个的放置。
(2) 垂直方向上的距离由margin决定。属于同一个BFC的两个相邻的BOX的margin会发生重叠,与方向无关。
(3) 每个BOX的左外边距与包含块的左边界相接触(对于从左到右的格式化,否则相反),即使浮动元素也是如此。
(4) BFC的区域不会与float元素的区域重叠。
(5) 计算BFC的高度时,浮动子元素也要参与计算。
(6) BFC就是页面上的一个隔离的独立容器,容器里的子元素不会影响到外面的元素。
css的几条规则:
(1) block元素会扩展到父元素同宽,所以block元素会垂直排列。
(2) 垂直方向上的两个相邻的div的margin会重叠,而水平方向上不会。
(3) 浮动元素会尽量往左上方(右上方)。
4.BFC在布局上的应用
(1) 防止margin重叠
<style> p{ width:200px; height:100px; line-height:100px; text-align:center; background:#fcc; margin:50px; } </style><body><p>aaaaaa</p><p>bbbbbb</p></body>
两个p之间的距离为50px,出现了margin重叠。
符合上面BFC约束规则的第(2)条:垂直方向上的两个相邻BOX的margin会发生重叠,与方向无关。
修改方案:
在p外层包裹一层容器,overflow:hidden触发生成一个BFC。两个p不属于同一个BFC,不会发生margin重叠。
<style> .wrap { overflow:hidden; } p{ width:200px; height:100px; line-height:100px; text-align:center; background:#fcc; margin:50px; } </style><body><p>aaaaaa</p><div class="wrap"> <p>bbbbbb</p></div></body>
两个p之间的距离为100px。
(2) 清除内部浮动
<style> .wrap{ border:5px solid #fee; width:300px; } .child{ float:left; border:5px solid #faa; width:100px; height:100px; } </style><body><div class="wrap"> <div class="child"></div> <div class="child"></div></div></body>
修改方案:
为达到内部清除浮动,可以通过overflow:hidden触发生成一个BFC,在计算wrap高度时,wrap内部的浮动元素也会参与计算。
.wrap{ border:5px solid #fee; width:300px; overflow:hidden; }
符合上面BFC约束规则的第(5)条:计算BFC的高度时,浮动子元素也要参与计算。
(3) 自适应两栏布局
<style> .wrap{ width:300px; } .aside{ float:left; width:100px; height:150px; background:#fcc; } .main{ height:200px; background:#f77; } </style><body><div class="wrap"> <div class="aside"></div> <div class="main"></div></div>
符合BFC约束规则第(3)条:每个BOX的左外边距与包含块的左边界重叠。即使浮动元素也不例外。
修改方案:
通过overflow:hidden触发main生成BFC,实现自适应两栏式布局
.main{ height:200px; background:#f77; overflow:hidden; }
当通过overflow:hidden触发main生成BFC时,这个BFC不会与浮动的aside重叠。
符合BFC约束规则的第(4)条:BFC的区域不会与float元素的区域重叠。
补充:(4) 自适应多栏布局
<style> .wrap{ width:400px; } .left{ float:left; width:100px; height:150px; background:#f11; } .content{ height:180px; background:#a11; } .right{ float:right; width:100px; height:150px; background:#f0f; } </style><body><div class="wrap"> <div class="left"></div> <div class="right"></div> <div class="content"></div></div>
修改方式:
.content{ overflow:hidden; height:180px; background:#a11; }
注意html代码的布局
- 我对BFC的理解与总结
- 谈谈我对bfc的理解
- 一些对BFC的理解
- 对BFC规范的理解?
- 我所理解的BFC
- BFC的理解与应用
- 谈谈对CSS中BFC的理解
- 谈对BFC布局的理解
- 我对cocos2dx的理解和总结
- 理解css的BFC
- 关于BFC的理解
- BFC的理解
- BFC的理解
- 关于BFC的理解
- 我对implement与abstract的理解
- 我对委托与事件的理解
- 我对委托与事件的理解
- 我对特征值与特征向量的理解
- NOIP2013 Day2 VP
- 游戏编程之DirectX的修炼:三(DirectX的初始化:上)
- Qt学习之路(27): 渐变填充
- hdu XYZZY-(floyd判联通+spfa判正环+点权||纯spfa边权)
- iOS中图片处理之马赛克算法
- 我对BFC的理解与总结
- HDU 4686 Arc of Dream(构造矩阵 多个式子联系起来)
- hdu1757 A Simple Math Problem 矩阵快速幂 水题
- FileUriExposedException,android7.0
- 在Linux下检查内存泄露
- maven配置jdk1.8版本
- Bootstrapvalidator 前端自定义验证和ajax远程访问后端验证
- jinja2多重继承时的block嵌套
- Qt 界面刷新崩溃、异常