zoukankan      html  css  js  c++  java
  • IE浏览器兼容性问题解决方案

    一、CSS常见问题

    1、H5标签兼容性

      解决方案:<script src="http://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>

    2、元素浮动之后,能设置宽度的话就给元素加宽度,如果需要宽度是内容撑开的,就给它里边的块元素加上浮动float:left;

    3、第一块元素浮动,第二块元素加margin-left值等于第一块元素宽度,在IE6下会有间隙问题

      解决方案:不要用margin-left,给两个元素都加上浮动float:left;

    4、IE6下子元素超出父级宽高,会把父级宽高撑开,比如用于放置轮播的ul宽度会超出父元素

      解决方案:不要让子元素的宽高超过父级

    5、P包含块元素嵌套规则

      牢记规则:p、h标签不能嵌套块元素

    二、CSS兼容性问题

    1、margin兼容性问题

      1)margin-top传递,子元素上下margin会传递给父级

      阻止:触发BFC(如overflow:hidden;拯救标准浏览器及IE78)、触发IE的haslayout  zoom:1(拯救IE67);

      2)上下margin叠压(触发条件:同级元素,第一个元素的下与第二个元素的上会叠压在一起)

      解决方案:两个元素分开设置margin,然后尽量使用同一方向的margin,比如margin-top

    2、display:inline-block;   块元素变为内联块, IE67不兼容;内联元素变为内联块,所有浏览器都支持

      解决方案:{display:inline-block; *display:inline; *zoom:1;}

      发现问题:当然,变为内联块后,有一个特性就是如果元素换行,在页面上元素之间就会有空隙的,空隙大小为一个空格的像素大小。

    3、IE6元素最小高度为19px

      解决方案:overflow:hidden;

    4、IE67双边距,当元素浮动后,再设置margin,那么就会产生双倍边距

      解决方案:针对IE67,添加*display:inline;样式,比如页面上横向排列的几组块,会经常遇到

    5、li里元素都浮动,在IE67下方会产生4px间隙问题

      解决方案:针对IE67,添加*vertical-align:top;样式

    6、IE6下,两个浮动元素之间有注释或者内联元素并且和父级宽度相差不超过3px,会导致多复制一些文字问题

      解决方案:1)两个浮动元素之间避免出现内联元素或者注释

           2)与父级宽度相差3px或以上  

    7、IE67父级元素的overflow:hidden;子元素设置position:relative后,就包不住子元素了

       解决方案:针对IE67,给父级元素添加position:relative;

    8、IE6下绝对定位元素父级宽高是奇数,绝对定位元素的right和bottom值会有1px的偏差

       解决方案:避免父级宽度出现奇数

    9、IE6下绝对定位元素和浮动元素并列绝对定位元素消失

       解决方案:浮动元素和绝对定位元素时同级的话,定位元素就会消失,只要让它们两个不处于同级就可以避免这个bug了

    10、IE6下input的空隙

       解决方案:针对IE67,给input元素添加*float:left;

    11、IE6下输入类型表单控件背景问题,背景不固定,滚动了

      解决方案:设置background-attachment:fixed;

    12、line-height  在IE67、FF下不兼容,会有几个像素的偏差,目测只有IE8和其他标准浏览器正常

      IE6下,想给给图片设置line-height来达到垂直居中效果是实现不了的,就给img标签单独设置{float:left;postion:relative;top:...}

      当然,文本的line-height还是识别的

    13、常见文章列表布局:标题+发布日期  

      <ul>

        <li>这里是文章列表标题,我是奇葩的IE浏览器<span style="float:right">2015-07-17</span></li>

        <li>这里是文章列表标题2,我是奇葩的IE浏览器<span style="float:right">2015-07-17</span></li>

       </ul>

    假设你按照以上布局,那么恭喜你,在IE67下发布日期会掉到下一行去

      解决方案,按如下布局: 

      <ul>

        <li><span style="float:right">2015-07-17</span>这里是文章列表标题,我是奇葩的IE浏览器</li>

        <li><span style="float:right">2015-07-17</span>这里是文章列表标题2,我是奇葩的IE浏览器</li>

       </ul>

    或 

      <ul>

        <li><span style="float:left">这里是文章列表标题,我是奇葩的IE浏览器</span><span style="float:right">2015-07-17</span></li>

        <li><span style="float:left">这里是文章列表标题2,我是奇葩的IE浏览器</span><span style="float:right">2015-07-17</span></li>

       </ul>

    14、遮罩弹窗

      标准 不透明度:opacity:0~1

      IE678滤镜:filter:alpha(opacity=0~100);

    15、<a>的手形光标

      标准浏览器下,不需要设置也有

      IE6下没有,就给a{cursor:pointer;}

    16、<a>的 text-decoration:none;

      标准下,只需 a {text-decoration:none;}

      IE6下,a {text-decoration:none;}  并且 a:hover {text-decoration:none;}

    三、CSS hack

    9   IE67  8-10   例如:background:blue9;

    +*  IE67      例如:*background:yellow;  +background:yellow;

    _    IE6      例如:_background:green;

    四、png-24兼容性问题,IE6不支持

    解决方案:

      1)引用Js插件,不能处理body以上的,最好放在页面底部,这样不影响页面加载,也就是放在</body>标签上面  

        <!--[if IE 6]>

          <script src="DD_belatedPNG_0.0.8a.js" type="text/javascript"></script>

          <script>

            DD_belatedPNG.fix("*");

          </script>

        <![endif]-->

      2)原生滤镜,给背景图所在的标签加上如下样式,比如body

        body {

            _background-image:none;

            _filter:progid:DXImage Transform.Microsoft.AlphaImageLoader(src="XX.png",sizingMethod="crop");

           }

  • 相关阅读:
    中文分词技术
    布隆过滤器(Bloom Filter)详解
    真正理解Mysql的四种隔离级别
    从内核文件系统看文件读写过程
    如何评价腾讯开源的消息中间件TubeMQ?
    零拷贝(Zero-copy)及其应用详解
    深入了解RabbitMQ
    (四)下载利器aria2
    (三)轻量级文件服务器filebrowser
    log4j 2整理
  • 原文地址:https://www.cnblogs.com/qq735675958/p/7600110.html
Copyright © 2011-2022 走看看