作为一名web开发人员,最大的希望不是自己的水平有多高,而是希望浏览器厂家能够统一标准,相信任何一个只要是接触过web程序开发的人员都有那样的感受,就是浏览器之间的兼容性问题总是让我们的工作平添诸多的麻烦,就拿一个简单的ajax来说,IE和DOM之间的获得ajax对象的方式就有很多的差别,还有就是有一些的效果在某些浏览器上面根本就得不到很好的支持,从而造成了混乱以及重复累赘的工作。下面我们要讲述的haslayout就是IE的特殊产物。

首先明确一个概念,haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分。在InternetExplorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了 hasLayout 的属性,属性值可以为true或false。当一个元素的 hasLayout属性值为true时,我们说这个元素有一个布局(layout),但是现在哦haslayout在IE8以及后面更高的版本中取消了,其只针对IE8一下的版本有效。

为什我们要提到haslayout呢?它究竟有什么作用呢?我们知道只有当一个元素有了haslayout属性之后,他才可以对自身以及对其子元素的尺寸和定位进行计算的能力,就是说如果它的其中一个子元素有自己的定位的话,这个子元素就将负责计算自己以及自己子元素的尺寸,但是这个子元素的定位将受到其父元素的影响。

还有一些元素他们拥有自己特有的长和高,即使没有定义他们的长和高,比如说button,inputs等等,这就说明他们与生俱来的haslayout属性,既然有元素是与生俱来的,那肯定与之对应的就是我们的后天形成了,这里就要提到通过我们后天设置一些特别的css样式来触发layout,当然这个就像我们的炸弹一样,一旦触发就不可能修改。这些元素包括div span等。

这里如果拥有了layout之后,这些元素就被限制在了一个独立的盒子中了,这一点和我们的bfc很像,通过这样,我们的元素就不会影响到外部的元素,而自身也不会受到外部元素的影响。这就是所谓的一旦有了layout就触发了bfc,将自己锁起来了。这样也有一个弊端,就是被锁起来之后,该元素就无法自适应了,也不会适应别的元素,于是乎就可能产生一些怪异现象,甚至影响整个的布局。

下面将介绍一些重置haslayout的方法,

  * width , height ( 设为 auto )

  * max-width , max-height ( 设为 none ) [ IE7 ]

  * position ( 设为 static )

  * float ( 设为 none )

  * overflow ( 设为 visible )

  * zoom ( 设为 normal )

通过这些的话,可以重置我们的haslayout属性。还有一些就是怎么激活这个属性,下面将罗列一些常见的:

只需要将position: absolute设置绝对定位可能会引发新的问题。float: left|rightIE下的浮动也会产生一些莫名其妙的问题。display: inline-block当一个内联元素需要haslayout属性时就需要用它,但是IE本身不支持inline-block的,只是表现得像标准里说的inline-block。width: 除'auto'外的任意值优先考虑使用该属性。height: 除'auto'外的任意值对 IE6 及更早版本来说很常用,该方法被称为霍莉破解(Holly hack),即设定这个元素的高度为 1% (height:1%;)。但是要注意,当这个元素的 overflow 属性被设置为 visible 时,这个方法就失效了。zoom: 除'normal'外的任意值又一个ie私有属性,不兼容标准。zoom:1可以在测试或者不追求标准的情况下使用,效果不错。writing-mode: tb-rlie私有属性,不推荐用。

浅析CSS中的haslayout的更多相关文章

  1. 浅析 CSS 中的边距重叠

    浅析 CSS 中的边距重叠 边距重叠是什么 在说边距重叠之前,先以正常的思维来考虑如果你现在是浏览器引擎遇到这种情况应该怎么办? 现在有两个元素 div1 和 div2 紧挨着,中间没有它元素,它们的 ...

  2. 浅析CSS中的BFC和IFC

    1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...

  3. css中的负边距

    css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...

  4. CSS中不为人知Zoom属性的使用介绍(IE私有属性)

    其实Zoom属性是IE浏览器的专有属性,Firefox等浏览器不支持.它可以设置或检索对象的缩放比例.除此之外,它还有其他一些小作用,比如触发ie的hasLayout属性,清除浮动.清除margin的 ...

  5. 浅析css布局模型1

    css是网页的外衣,好不好看全凭css样式,而布局是css中比较重要的部分,下面来分析一下常见的几种布局. 流动模型 流动模型是网页布局的默认模式,也是最常见的布局模式,他有两个特点: 1.块状元素都 ...

  6. css中zoom和transform:scale的区别

    css中zoom和transform:scale的区别 关于zoom: 以前只是看到别人的代码中用过zoom,自己从未使用过,今天在探究ie7兼容inline-block时,发现里面提到了zoom.下 ...

  7. CSS中zoom:1的作用 ,小标签大作用

    CSS中zoom:1的作用兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:触发IE浏览器的haslayout解决ie下的浮动,margin重叠等一些问题. ...

  8. css中的zoom的使用

    css中的zoom的使用  zoom : normal | number  normal : 默认值.使用对象的实际尺寸  number : 百分数 | 无符号浮点实数.浮点实数值为1.0或百分数为1 ...

  9. css中的zoom

    CSS中zoom:1的作用兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:触发IE浏览器的haslayout解决ie下的浮动,margin重叠等一些问题. ...

随机推荐

  1. 【转】怎么在Foxmail回复/转发时使用签名?

    原文网址:http://kf.qq.com/faq/120322fu63YV130422yABZRZ.html Foxmail回复/转发时使用签名,可通过在模版中设置签名.如下版本操作方法: 一.fo ...

  2. Android 布局之DrawLayout

    在刚开始学android的时候肯定会知道,android的主要的布局就是LinearLayout.RelativeLayout.FramLayout.AbsoluteLayout.以及TableLay ...

  3. Unity3d 游戏中的实时降噪-对Square Enix文档的研究与实现

    看到SE的技术文档关于降噪的决定研究一下,本次试验场景: 文章中提到了3中主要滤波方法,最后一种方法又有三种方式分别为Conventional geometry-aware filtering,Dist ...

  4. jboss as7 o.h.c.s.c.i.BroadcastGroupImpl Network is unreachable

    Question: [Server:server-one] 22:52:56,876 ERROR [org.hornetq.core.server.cluster.impl.BroadcastGrou ...

  5. Ural-1018 Binary Apple Tree(树形dp+分组背包)

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #i ...

  6. MongoDB基础知识 01

    MongoDB基础知识  1. 文档  文档是MongoDB中的数据的基本单元,类似于关系型数据库管理系统的行. 文档是键值对的一个有序集.通常包含一个或者多个键值对. 例如: {”greeting& ...

  7. struts2 最新S2-016-S2-017漏洞通杀struts2所有版本及修复方法

    详情查看http://zone.wooyun.org/content/5159 官方漏洞说明 http://struts.apache.org/release/2.3.x/docs/s2-016.ht ...

  8. CF 121E Lucky Array 【树状数组】

    这个题目的数据感觉不能更水了.从复杂度上计算,肯定有极限数据可以卡掉暴力方法的么. 总之,暴力的做法就是树状数组了,对于区间更新,就挨个更新就是了.当然,判断是否是Lucky Number的话,可以用 ...

  9. Qt 线程基础(Thread Basics的翻译,线程的五种使用情况)

    Qt 线程基础(QThread.QtConcurrent等) 转载自:http://blog.csdn.net/dbzhang800/article/details/6554104 昨晚看Qt的Man ...

  10. C#中5中timer的比较

    C#中有5个timer,它们的主要区别如下: System.Threading.Timer  在线程池启动一个后台任务.我前段时间写过一个关于timer的垃圾回收的需要注意一下,参见谁动了我的time ...