• IE浏览器bug罪魁祸首--hasLayout


    IE浏览器一直都是前端程序员最头疼的,IE的表现与其他浏览器不同的原因之一就是,显示引擎使用一个称为布局(layout)的内部概念。

    认识hasLayout--haslayout是Windows Internet Explorer渲染引擎的一个内部组成部分。在Internet Explorer中,使用布局概念来控制元素的尺寸和定位。在理想情况下,所有元素都控制自己的尺寸和定位。但是,这在IE中会导致很大的性能问题。因此,IE开发团队决定只将布局应用于实际需要它的那些元素,这样就可以充分地减少性能开销。

     拥有布局(have layout)的元素负责本身及其子元素的尺寸和定位。如果一个元素没有布局,那么它的尺寸和位置由最近的拥有布局的祖先元素控制。IE显示引擎利用布局概念减少它的处理开销。一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。

    当一个元素的 hasLayout属性值为true时,我们说这个元素有一个布局(layout),当一个元素有一个布局时,它负责对自己和可能的子孙元素进行尺寸计算和定位。
    默认拥有hasLayout属性
    <html>, <body>
    <table>, <tr>, <th>, <td>
    <img>
    <hr>
    <input>, <button>, <select>, <textarea>, <fieldset>, <legend>
    <iframe>, <embed>, <object>, <applet>
    <marquee>

     很多情况下,我们把 hasLayout的状态改成true 就可以解决很大部分ie下显示的bug。 
    hasLayout属性不能直接设定,你只能通过设定一些特定的css属性来触发并改变 hasLayout 状态。

    下面列出可以触发hasLayout的一些CSS属性值。

    display 

    启动haslayout的值:inline-block 

    取消hasLayout的值:其他值 

     -------------------------------------- 

     width/height 

     启动hasLayout的值:除了auto以外的值

     取消hasLayout的值:auto

     ( 对 IE6 及更早版本来说很常用,该方法被称为霍莉破解(Holly hack),即设定这个元素的高度为 1% (height:1%;)。但是要注意,当这个元素的 overflow 属性被设置为 visible 时,这个方法就失效了。)

     --------------------------------------- 

     position 

     启动hasLayout的值:absolute 

     取消hasLayout的值:static 

     ---------------------------------------- 

     float 

     启动hasLayout的值:left或right 

     取消hasLayout的值:none 

     --------------------------------------- 

     zoom 

     启动hasLayout的值:有值 
    取消hasLayout的值:narmal或者空值 
    (zoom是微软IE专有属性,可以触发hasLayout但不会影响页面的显示效果。zoom: 1常用来除错,不过 ie 5 对这个属性不支持。)

     ie7还有一些额外的属性可以触发该属性(不完全列表): 

     min-height: (任何值) 

     max-height: (任何值除了none) 

     min- (任何值) 

     max- (任何值除了none) 

     overflow: (任何值除了visible) 

     overflow-x: (任何值除了visible) 

     overflow-y: (任何值除了visible)

     position: fixed 

     * 元素hasLayout而导致的问题其实一般都很容易发现:往往是内容出现错位甚至完全不可见。
     
  • 相关阅读:
    【转载】一键安装maven脚本
    secureCRT的自动登录设置
    vi相关内容
    windows上的命令telnet
    【转载】bash: ifconfig: command not found 解决办法
    【转载】Linux中profile、bashrc、bash_profile之间的区别和联系
    virgo-tomcat没有任务错误日志的停掉的解决办法
    【转载】Linux kill, killall, kill -9
    #!bin/sh是啥
    Mysql 查找表中的多组前n大元素
  • 原文地址:https://www.cnblogs.com/hsprout/p/5228884.html
Copyright © 2020-2023  润新知