Feb 16, 2009

弄懂IE的haslayout(一)

haslayout到底是什么?

haslayout是IE的私有概念,HTML部分元素默认拥有haslayout,而通过部分的CSS,可以给haslayout不为true的HTML元素触发为true。也就是说,如果某个HTML元素拥有haslayout属性,那么这个元素的haslayout的值一定只有true,否则,这个元素就没有haslayout,haslayout一旦被触发,就不可以逆转,haslayout为只读属性。

查看haslayout的值

通过IE Developer Toolbar可以查看IE下HTML元素是否拥有haslayout,在IE Developer Toolbar下,拥有haslayout的元素,通常显示为“haslayout = -1”。

那些HTML元素默认拥有haslayout?

<html>, <body>
<table>, <tr>, <th>, <td>
<img>
<hr>
<input>, <select>, <textarea>, <button>
<iframe>, <embed>, <object>, <applet>
<marquee>

在IE下,哪些CSS属性可以触发haslayout为true?

IE6:
position: absolute, float: left|right, display: inline-block, width: 任意值, height: 任意值, zoom: 任意值
IE7:
overflow: hidden|scroll|auto, position: fixed, min-width: 任意值, max-width: 除 none 之外的任意值, min-height: 任意值, max-height: 除 none 之外的任意值

那么,了解haslayout有何意义呢?haslayout可以解决IE很多奇怪的bug和渲染bug,通常通过触发haslayout为true来解决。接下来,就了解下因为haslayout的临床表现:

  • 负边框问题,下载这个demo然后去掉IE6注释,对比标准浏览器和IE6下不同的表现,并且用IE develop toolbar查看不同表现的HTML元素的haslayout。
  • 滤镜,IE的私有滤镜只有在元素被触发haslayout后,滤镜才会被执行。

未完待续。。。

No comments:

Post a Comment