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属性
【IE浏览器下出发CSS的haslayout属性是什么?】,
, , ,



,