怎么在IE浏览器下出发CSS的haslayout属性?解决方法分享

我们都知道浏览器有bug , 而IE的bug似乎比大多数浏览器都多 。IE的表现与其他浏览器不同的原因之一就是 , 显示引擎使用一个称为布局(layout)的内部概念 。
因为布局是专门针对显示引擎内部工作方式的概念 , 所以一般情况下不需要了解它 。但是 , 布局问题是许多IE显示bug的根源 , 所以理解这个概念以及它如何影响CSS对修复bug是有帮助的 。

怎么在IE浏览器下出发CSS的haslayout属性?解决方法分享

文章插图
一、什么是haslayout
haslayout是Windows Internet Explorer渲染引擎的一个内部组成部分 。在Internet Explorer中 , 使用布局概念来控制元素的尺寸和定位 。在理想情况下 , 所有元素都控制自己的尺寸和定位 。但是 , 这在IE中会导致很大的性能问题 。因此 , IE开发团队决定只将布局应用于实际需要它的那些元素 , 这样就可以充分地减少性能开销 。
拥有布局(have layout)的元素负责本身及其子元素的尺寸和定位 。如果一个元素没有布局 , 那么它的尺寸和位置由最近的拥有布局的祖先元素控制 。IE显示引擎利用布局概念减少它的处理开销 。一个元素要么自己对自身的内容进行计算大小和组织 , 要么依赖于父元素来计算尺寸和组织内容 。
为了调节这两个不同的概念 , 渲染引擎采用了hasLayout的属性 , 属性值可以为true或false 。当一个元素的 hasLayout属性值为true时 , 我们说这个元素有一个布局(layout) , 当一个元素有一个布局时 , 它负责对自己和可能的子孙元素进行尺寸计算和定位 。简单来说 , 这意味着这个元素需要花更多的代价来维护自身和里面的内容 , 而不是依赖于祖先元素来完成这些工作 。因此 , 一些元素默认会有一个布局 。当我们说一个元素“拥有layout”或“得到layout” , 或者说一个元素“has layout”的时候 , 我们的意思是指它的微软专有属性 hasLayout 被设为了true。一个“layout元素”可以是一个默认就拥有layout的元素或者是一个通过设置某些CSS属性得到layout 的元素 。如果某个HTML元素拥有haslayout属性 , 那么这个元素的 haslayout的值一定只有true , haslayout为只读属性一旦被触发 , 就不可逆转 。通过IE Developer Toolbar可以查看IE下HTML元素是否拥有haslayout , 在IE Developer Toolbar下 , 拥有haslayout的元素 , 通常显示为“haslayout = -1” 。
二、默认拥有haslayout属性
,
, , ,



,