刚拒绝了一个很有诱惑的公司,不是不想去,而是对现在的能力还不确定,希望能够进一步提高自己的技能,所有想写博客了,监督自己的学习进度·········现在还没有开放博客,希望成熟一些后再开放吧!

进入正题啦啦啦!

一、什么是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还有一些额外的元素,如下:请看!

五、hasLayout和BFC的作用?很重要哟,因为要用到起····
 
一、解决内部元素浮动问题

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

2、浮动元素和常规元素的重叠问题

当浮动元素右边跟随的是常规流元素会重叠

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

3、解决相邻元素margin边距重叠问题
我们先要知道怎么才会产生margin边距重叠的情况:两个或多个毗邻的普通流中的块元素垂直方向上的margin会折叠,这里毗邻指的是没有被非空内容、padding、border、clear隔开。看看重叠的情况是这样的。
 既然问题出来了,我们就要去解决它呀,怎么清除边距重叠呢?

1、浮动元素、inline-block、绝对定位元素的margin值不会和垂直方向上的margin值产生折叠。
2、创建了BFC块格式化上下文的元素,不会和他的子元素产生margin折叠
 
我想说我现在的技术在瓶颈期,怎么突破啊?现在对js和响应式布局的研究兴趣又来了,可是感觉这基础的还不咋个扎实,不要丢了西瓜去捡芝麻·····慢慢走吧!

BFC与hasLayout之间的故事的更多相关文章

  1. BFC and Haslayout

    一.BFC(Block Formatting Context) 相关网址:http://www.cnblogs.com/dolphinX/p/3508869.html 1. 怎样才能形成BFC flo ...

  2. 文本溢出、垂直外边距合并、BFC、hasLayout

    今天学习文本溢出,又遇到了一些小问题,先上图: 关于文本溢出推荐:http://www.cnblogs.com/yzg1/p/5089534.html 从里面学习到单行文本和多行文本溢出, overf ...

  3. 谈BFC和haslayout

    今天提到BFC和haslayout,就顺带在网上查查资料,总结一下它们. CSS2我们再熟悉不过,当然它里面我们需要掌握的,就是CSS2的选择器和布局,选择器总共31种.避开这个不说,我们说布局. 布 ...

  4. BFC与hasLayout

    BFC与hasLayout都是CSS布局上的概念. 几个月前在微博上才了解什么是BFC,算是对布局有点初步的了解. hasLayout则是IE6.7产生许多bug的根源. 一.BFC Floats, ...

  5. BFC和haslayout

    待补充 参考链接:http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html 标准浏览器: BFC(block formatt ...

  6. CSS的BFC和hasLayout及其应用场景

    前端精选文摘:BFC 神奇背后的原理 一.BFC是什么? 先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观 ...

  7. BFC和haslayout(IE6-7)(待总结。。。)

    支持BFC的浏览器(IE8+,firefox,chrome,safari) Block Formatting Context(块格式化上下文)是W3C CSS2.1规范中的一个慨念,在CSS3中被修改 ...

  8. BFC 和 haslayout

    在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很 ...

  9. BFC与HasLayout的理解

    1.(Block Formatting Contexts)BFC 定义 BFC(Block formatting context)直译为"块级格式化上下文".它是一个独立的渲染区域 ...

随机推荐

  1. 使用AFNetworking 报错提示

    使用AFNetworking 框架 解析数据 报错提示数据请求失败Error Domain=NSCocoaErrorDomain Code=3840 "The operation could ...

  2. codeforces 721C (拓扑+dp)

    题意就是某个人去游览,起点是1点,终点是n点,他总的游览时间不能超过t,第一行给你3个数字,点的个数n,边的个数m,时间t,然后底下m行数据,每行代表一条边,边的起点,终点和权值(走过去花的时间),然 ...

  3. C#- 控制台Timer

    很少在控制台上用定时器,最近要用到,百度了一遍文章.很不错,摘下来,作备忘 关于C#中timer类 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在Sys ...

  4. 网络爬虫之Windows环境Heritrix3.0配置指南

    一.引言: 最近在忙某个商业银行的项目,需要引入外部互联网数据作为参考,作为技术选型阶段的工作,之前已经确定了中文分词工具,下一个话题就是网络爬虫的选择,目标很明确,需要下载一些财经网站的新闻信息,然 ...

  5. Kinect for Windows SDK开发入门(一):开发环境配置

    [译]Kinect for Windows SDK开发入门(一):开发环境配置 前几天无意中看到微软发布了Kinect for windows sensor,进去看了一下Kinect应用的例子,发现K ...

  6. centos6.6 虚拟机集群搭建

    1.centosos6.6下载 windows 64位: thunder://QUFodHRwOi8vbGludXguemh1YW5neGl0b25nLmNvbTo4MDgvMjAxNTAxL0Nlb ...

  7. Spring AOP切面

    在软件开发中,分布于应用多出的功能被称为和横切关注点. 通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(可是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离正是面向切面编成( ...

  8. Java解惑五:类之谜

    本文是依据JAVA解惑这本书,做的笔记.电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题46 函数重载的问题. JAVA重载解析过程 ...

  9. KindEditor 修改多图片上传显示限制大小和张数

    在使用KindEditor的时候用到多图片上传时,提示有最多上传20张图片,单张图片容量不超过1MB: 修改的文件的地方在:kindeditor\plugins\multiimage\multiima ...

  10. C# 反射的简单用法

    新建两个项目:类库(Model)和控制台应用程序(ReflectTest). 在[Model]中添加一个类[User]: namespace Model { public class User { p ...