BFC与hasLayout之间的故事
刚拒绝了一个很有诱惑的公司,不是不想去,而是对现在的能力还不确定,希望能够进一步提高自己的技能,所有想写博客了,监督自己的学习进度·········现在还没有开放博客,希望成熟一些后再开放吧!
进入正题啦啦啦!
一、什么是BFC(Block Formatting Content)?
IE用的是hasLayout而非IE浏览器用的即是BFC(块格式化上下文)
1、BFC是W3C CSS2.1中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素之间的关系和相互作用。在创建了BFC的元素中,其子元素会一个挨着一个的放置,垂直方向上他们的起点是一个包含块的顶部,两个相邻元素的垂直距离取决于margin值,但是呢,相邻的块级元素的垂直边距会折叠(collpase)(我是这么理解的:就是设置margin:10px,但是显示是5px,不知正确否?)
2、在BFC中,每一个元素的左外边与包含块的左边相接触(对于从右到左的格式化,右外边接触右边),即使存在浮动也会如此(尽管一个元素的内容区域会因为浮动而压缩)(不是很理解这个)。除非这个元素也创建了新的BFC。
3、在CSS3中对BFC有了新的定义:http://www.w3.org/TR/css3-box/#block-level0,CSS3中将BFC 叫做 flow root。
二、怎么才能触发BFC呢?只要满足下面其中之一的要求即可
1、float不能为none; 2、overflow(不能为visibile); 3、display:(table-cell\table-caption\inline-block);4、position:(任何值除了static\relative)
Tips:我们有时会用overflow:hidden去清楚浮动。就是因为它可以触发元素的块格式化上下文(IE6,7要申明zoom:1),这个方法确实简单,但是相当粗暴。
三、什么是hasLayout?
这个属性是IE特有的,与其他浏览器没有一毛线的关系,霸道吧。说起IE就是痛啊!
1、Layout是IE浏览器渲染引擎的一个内部组成部分。在IE中,一个元素要么对自己的自身内容进行组织和计算要么就是依赖其包含块来计算和组织内容。为了协调这两种方式的矛盾,渲染引擎采用了'hasLayout'属性,属性值可以为true或者flase,当一个元素的hasLayout为true时,我们就说这个元素有一个布局(Layout),或者拥有布局,这个时候就不用依赖其包含块了而是靠自身内容。
2、在IE中,我们可以通过'hasLayout'属性可以判断一个元素是否拥有Layout。如object.currentStyle.hasLayout。
3、很多IE6下的bug都是因为没有触发hasLayout而造成的。所有我们在解决bug时候就是去触发元素的布局。
四、怎么触发元素hasLayout呢?
1、有些元素因为默认就拥有布局所以就不用触发了,如(html,body,table,th,tr,td,img,hr,input,button,select,textarea,fileldset,legend,iframe,embed,object,applet,marquee)
2、而其他元素就没有了,没有的话怎么触发呢?当然是用css去触发了,如下属性。
display:inline-block, height(除auto以外的所有值), widht(除auto以外的所有值), float:right或left, position:absolute, writing-mode:tb-rl; zoom:(除normal外的任何值)
IE7还有一些额外的元素,如下:请看!

1、如果父元素的子元素有浮动,父元素的高度塌陷怎么解决?那么在父元素上激活hasLayout和BFC就可以清楚浮动了,最常见的是zoom:1(IE6下),overflow:hidden(激活标准浏览器下的MFC)
2、浮动元素和常规元素的重叠问题
当浮动元素右边跟随的是常规流元素会重叠

设置常规流元素.bfc{overflow:hidden; zoom:1}激活hasLayout和BFC便可解决问题,如下图:


BFC与hasLayout之间的故事的更多相关文章
- BFC and Haslayout
一.BFC(Block Formatting Context) 相关网址:http://www.cnblogs.com/dolphinX/p/3508869.html 1. 怎样才能形成BFC flo ...
- 文本溢出、垂直外边距合并、BFC、hasLayout
今天学习文本溢出,又遇到了一些小问题,先上图: 关于文本溢出推荐:http://www.cnblogs.com/yzg1/p/5089534.html 从里面学习到单行文本和多行文本溢出, overf ...
- 谈BFC和haslayout
今天提到BFC和haslayout,就顺带在网上查查资料,总结一下它们. CSS2我们再熟悉不过,当然它里面我们需要掌握的,就是CSS2的选择器和布局,选择器总共31种.避开这个不说,我们说布局. 布 ...
- BFC与hasLayout
BFC与hasLayout都是CSS布局上的概念. 几个月前在微博上才了解什么是BFC,算是对布局有点初步的了解. hasLayout则是IE6.7产生许多bug的根源. 一.BFC Floats, ...
- BFC和haslayout
待补充 参考链接:http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html 标准浏览器: BFC(block formatt ...
- CSS的BFC和hasLayout及其应用场景
前端精选文摘:BFC 神奇背后的原理 一.BFC是什么? 先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观 ...
- BFC和haslayout(IE6-7)(待总结。。。)
支持BFC的浏览器(IE8+,firefox,chrome,safari) Block Formatting Context(块格式化上下文)是W3C CSS2.1规范中的一个慨念,在CSS3中被修改 ...
- BFC 和 haslayout
在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很 ...
- BFC与HasLayout的理解
1.(Block Formatting Contexts)BFC 定义 BFC(Block formatting context)直译为"块级格式化上下文".它是一个独立的渲染区域 ...
随机推荐
- Unity手游之路<六>游戏摇杆之Easy Touch 3教程
之前已经介绍过Unity自带的摇杆Joystick,它用起来很简单.但是它也存在很多局限,不能全部满足普通mmo手游的一些需求,例如:要能方便地更好素材:能指定在某个区域显示,或者只有在该区域触摸时才 ...
- The TCP three-way handshake (connect)/four wave (closed)
TCP, relative to the SOCKET developers create process and link remove process consists of the TCP/IP ...
- 收集磁盘分区信息(总量、可用、已用、百分比)导出到csv
#############################脚本功能及说明##################################################该脚本用来收集磁盘分区总大小 ...
- Redis与MySQL的结合
Redis与MySQL的结合 目前大部分互联网公司使用MySQL作为数据的主要持久化存储,那么如何让Redis与MySQL很好的结合在一起呢?我们主要使用了一种基于MySQL作为主库,Redis作为高 ...
- [Webpack 2] Optimize React size and performance with Webpack production plugins
You can fine tune several webpack plugins to make your bundle as small as it can be for your specifi ...
- Android开发之处理崩溃异常
众所周知,android的设备千差万别,难免会发生崩溃异常等现象,这个时候就需要捕获哪些崩溃异常了,也就是捕获崩溃异常的相关信息,并记录下来,这样一来方便开发人员和测试人员的分析与调试. 1.首先我们 ...
- AIDL通信原理
AIDL (Android Interface Definition Language),通过定义通信接口来实现进程间通信.这是Google提供的一种在安卓应用进程间通信的工具.所以要了解AIDL的通 ...
- 一个不错的flash 模板
听到好听的背景音乐,而且效果也挺不错的,忽然感觉flash好强大呀 1.模板浏览地址:http://www.cssmoban.com/cssthemes/5229.shtml 2.模板演示地址:htt ...
- js事件3
一.loading——(用来加载位于网页中的文件,而非本地的) 例子: <!doctype html> <html lang="en"> <head& ...
- 最全的ASP.NET开源CMS汇总
转载:http://www.cnblogs.com/cxd4321/archive/2011/11/16/2250707.html 国内: 1.SiteServer CMS SiteServer CM ...