详解IE浏览器的haslayout属性及相关兼容性问题解决
IE,这个令所有网站设计人员讨厌,但又不得不为它工作的浏览器。不论是6、7还是8,它们都有一个共同的渲染标准haslayout,所以haslayout 是一个非常有必要彻底弄清除的概念。大多 数IE下的显示错误,就是源于它。
什么是Layout呢?
Layout 是 IE 的一个私有属性,并不是W3C标准。它决定了一个对象(就是一个标签div、li等)在内容中如何显示、与周围对象的位置关系、以及怎样响应程序或用户产生的事件。
这个属性可以被一些css强制激活。一些HTML标签默认具有haslayout。
PS:一个对象的layout属性被激活,它的具体表现就是haslayout=true。我们可以用IE Developer Toolbar工具看到被激活的对象带有haslayout = -1的属性。
下面这些标签默认拥有haslayout属性:
XML/HTML Code复制内容到剪贴板 html,body table,tr,th,td img hr input,button,select,textarea,fieldset,legend iframe,embed,object,applet marquee你可能就问:微软干嘛要设layout这个东西呢?当一个对象的layout被激活时,它以及它的子对象的定位和尺寸计算将独立进行,不受附近对象 的干扰。也就是说它拥有一个独立的布局(layout)。因此浏览器要花费更多的代价来处理拥有haslayout的对象。为了提高性能,微软增加了 layout这个IE私有的概念。
怎样激活layout?
下面列出的css属性可以激活对象的layout:
设置绝对定位可能会引发新的问题。
CSS Code复制内容到剪贴板 float:left|rightrightIE下的浮动也会产生一些莫名其妙的问题。
CSS Code复制内容到剪贴板 display:inline-block当一个内联元素需要haslayout属性时就需要用它,但是IE本身不支持inline-block的,只是表现得像标准里说的inline-block。
1.width: 除’auto’外的任意值
优先考虑使用该属性。
2.height: 除’auto’外的任意值
对 IE6 及更早版本来说很常用,该方法被称为霍莉破解(Holly hack),即设定这个元素的高度为 1% (height:1%;)。但是要注意,当这个元素的 overflow 属性被设置为 visible 时,这个方法就失效了。
3.zoom: 除’normal’外的任意值
又一个ie私有属性,不兼容标准。zoom:1可以在测试或者不追求标准的情况下使用,效果不错。
ie私有属性,不推荐用。
IE7 还有一些额外的属性:
1.min-height: (任意值)
2.max-height: (除 none 外任意值)
3.min-width: (任意值)
4.max-width: (除 none 外任意值)
5.overflow: (除 visible 外任意值)
6.overflow-x: (除 visible 外任意值)
7.overflow-y: (除 visible 外任意值)
8.position: fixed
重置haslayout
在没有其它属性激活layout的情况下,使用下面的css可以重置haslayout属性:
1.width, height (设为 auto)
2.max-width, max-height (设为 none)(在 IE 7 中)
3.position (设为 static)
4.float (设为 none)
5.overflow (设为 visible) (在 IE 7 中)
6.zoom (设为 normal)
7.writing-mode (从 tb-rl 设为 lr-t)
display 属性的不同:当用inline-block激活了haslayout 属性时,就算在一条独立的规则中覆盖这个属性为block或inline,haslayout 这个标志位也不会被重置为 false。
把 mid-width, mid-height 设为它们的默认值0仍然会赋予 hasLayout,但是 IE 7 却可以接受一个不合法的属性auto来重置 hasLayout。
触发 hasLayout 清除浮动
样例:
或
CSS Code复制内容到剪贴板 .haslayout-clear-float:{height:1px}或
CSS Code复制内容到剪贴板 .haslayout-clear-float:{zoom:1}’Layout’ 是 IE 的专有概念,它决定了元素如何对其内容进行定位和尺寸计算,与其他元素的关系和相互作用,以及对应用还有使用者的影响。
’Layout’ 可以被某些 CSS property(特性)不可逆的触发,而某些 HTML 元素本身就具有 layout 。
’Layout’ 在 IE 中可以通过 hasLayout 属性来判断一个元素是否拥有 layout ,如 object.currentStyle.hasLayout 。
’Layout’ 是 IE 浏览器渲染引擎的一个内部组成部分。在 IE 浏览器中,一个元素要么自己对自身的内容进行组织和计算大小, 要么依赖于包含块来计算尺寸和组织内容。为了协调这两种方式的矛盾,渲染引擎采用了 ’hasLayout’ 属性,属性值可以为 true 或 false。 当一个元素的 ’hasLayout’ 属性值为 true 时,我们说这个元素有一个布局(layout),或拥有布局。
相关内容
-
怎么用ie浏览器打开网页(IE浏览器常用快捷键)
怎么用ie浏览器打开网页(IE浏览器常用快捷键),标签,快捷键,标...
-
IE浏览器单独写CSS样式的几种方法
IE浏览器单独写CSS样式的几种方法,浏览器,条件,维护,复制,注...
-
教你通过命令行完美完全的卸载IE浏览器(IE9、IE
教你通过命令行完美完全的卸载IE浏览器(IE9、IE10、IE11),卸...
-
浅析IE10兼容性问题(frameset的cols属性)
浅析IE10兼容性问题(frameset的cols属性),属性,兼容性问题,浏...
-
把Windows 系统中的IE8浏览器降为IE6的方法
把Windows 系统中的IE8浏览器降为IE6的方法,方法,版本号,版本...
-
如何彻底优化IE浏览器 六种设置方法轻松优化你
如何彻底优化IE浏览器 六种设置方法轻松优化你的IE浏览器,方...
-
取消IE 已限制此网页运行可以访问计算机的脚本
取消IE 已限制此网页运行可以访问计算机的脚本,脚本,网页,运...
-
div层调整z-index属性在IE中无效原因分析及解决
div层调整z-index属性在IE中无效原因分析及解决方法,无效,原...
-
重装windowsXP系统中IE浏览器2步搞定
重装windowsXP系统中IE浏览器2步搞定,浏览器,用户,注册表,步...
-
Ubuntu 上安装IE浏览器的方法
Ubuntu 上安装IE浏览器的方法,方法,安装,浏览器,下载,终端,更...
-
让ie浏览器支持RGBA颜色标准实现代码
让ie浏览器支持RGBA颜色标准实现代码,支持,浏览器,参数,透明...
-
css padding属性兼容ie6,ie8,firefox实例详解
css padding属性兼容ie6,ie8,firefox实例详解,属性,兼容,边距...
-
ie placeholder属性的兼容性问题解决方法
ie placeholder属性的兼容性问题解决方法,解决方法,属性,失去...
-
远离IE浏览器漏洞 避免遭受黑客攻击的一些小结
远离IE浏览器漏洞 避免遭受黑客攻击的一些小结,卸载,输入,运...
-
修改IE浏览器参数 增强上网安全性
修改IE浏览器参数 增强上网安全性,浏览器,参数,修改,上网,安...