IE bug兼容问题二——hasLayout
haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分。可以理解为一个专有的属性。很多的ie下的css bug都与其息息相关,因此我们需要取消hasLayout或者触发hasLayout来调节在InternetExplorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了 hasLayout 的属性,属性值可以为true或false。当一个元素的 hasLayout属性值为true时,我们说这个元素有一个布局(layout)。这意味着这个元素需要花更多的代价来维护自身和里面的内容,而不是依赖于祖先元素来完成这些工作。
①默认触发hasLayout的html元素
-
body , html
-
table, tr, th, td
-
img
-
hr
-
input, button, file, select, textarea, fieldset
-
marquee
-
frameset, frame, iframe
-
objects, applets, embed
②触发hasLayout的条件
1 | display: inline-block |
IE7特有的触发Layout的属性
1 | min-height: (任意值) |
当网页在 IE 中有异常表现时,可以尝试激发 haslayout 来看看是不是问题所在。常用的方法是给某元素 css 设定 zoom:1。使用 zoom:1 是因为大多数情况下,它能在不影响现有环境的条件下激发元素的 haslayout。而一旦问题消失,那基本上就可以判断是haslayout 的原因。然后就可以通过设定相应的 css 属性来对这个问题进行修正了。建议首先要考虑的是设定元素的width/height 属性,其次再考虑其他属性。