作为一名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. [LeetCode#256] Paint House

    Problem: There are a row of n houses, each house can be painted with one of the three colors: red, b ...

  2. bzoj1334

    ..] of boolean;     a:..] of longint;     i,n,s,j,ans:longint; procedure sort(l,r: longint);   var i ...

  3. 深入浅出Node.js (附录A) - 安装Node

    A.1 Windows系统下的Node安装 A.2 Mac系统下Node的安装 A.3 Linux系统下Node的安装 A.4 总结 A.5 参考资源

  4. Drools引擎学习

    首先上一段话: 为提高效率,管理流程必须自动化,即使现代商业规则异常复杂.市场要求业务规则经常变化,系统必须依据业务规则的变化快速.低成本的更新.为了快速.低成本的更新,业务人员应能直接管系统中的规则 ...

  5. 新图形API为unity5 带来了什么&下一代新图形API的好处

    西瓜的演讲ppt翻译+解释+其他: wolf96 在最基本的层面上,这些新api是为了改进CPU性能和效率,通过:减少CPU渲染瓶颈的情况,提供更多可预测和稳定的驱动的行为,给应用程序更多控制,就像在 ...

  6. mac svn命令

    转载:Mac下svn command命令 svn help command  获取子命令说明 svn info $URL 查看工作空间信息 svn list   显示当前目录下svn记录文件列表,不访 ...

  7. git问题 next fetch will store in remotes/origin

    项目在git的下无法查找到需要的Branch

  8. linux下配置固定ip

    今天在VM上装linux6.3,装的时候没有配置ip,虚拟机连接方式选的NAT方式,可以直接上网.我装这几次虚拟机系统只有这次虚拟机上去网了,挺爽.但是问题又出来了,就是我本机Windows远程不上虚 ...

  9. eclipse运行项目特别慢,出现Java heap space溢出

    在eclipse中可用为JVM设置参数:Window-->Preferences-->Java-->Installed JREs然后选中你安装的jre-->Edit--> ...

  10. 《Linux设备驱动开发详解(第2版)》配套视频登录51cto教育频道

    http://edu.51cto.com/course/course_id-379-page-1.html http://edu.51cto.com/course/course_id-379-page ...