美文网首页
IE8兼容总结

IE8兼容总结

作者: stars甜 | 来源:发表于2017-06-21 12:12 被阅读0次

    1:使用meta标签调节浏览器的渲染方式(使用meta标签来强制IE8使用最新的内核渲染页面)

    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

    2:placeholder

    IE8下不支持HTML5属性placeholder,不过为解决此问题的js插件挺多的,比如:jquery-placeholder

    3:last-child

    first-child是CSS2的内容,但是last-child就不是了,推荐的做法是给最后一个元素设置一个.last的class,然后对此进行样式设置,这样就全部兼容了。

    4:HTML5

    为了IE兼容HTML5标签,加了  <!--[if lt IE8]><![endif]-->   注释,

    5:关于max-width:,

    (1)td中的max-width

    如果针对td中的img元素设置max-width: 100%,在IE和Firefox你会发现不奏效,而在Chrome中却是可以的。经查询发现需要给table设置table-layout: fixed,对此属性的具体解释见W3School

    (2)嵌套标签中的max-width

    如下的HTML结构:

    最外层元素.work-item设置了固定宽度,但是对img设置max-width为100%却无效,后来才发现需要再对a标签设置width: 100%,这样才能使最内层的img标签充满整个div。

    网页中图片的尺寸可能比较宽,我会给它设置max-width: 100%来限制其宽度最大为父容器的宽度,但是有时候却不奏效,慢慢摸索才得知IE解析max-width所遵循的规则:严格要求直接父元素的宽度是固定的

    6:html5中音视频

    <script src="http://api.html5media.info/1.1.4/html5media.min.js"></script>

    7:.把overflow设置为auto,

    IE6和火狐上显示都正常,在IE8上,她就是只显示一部分内容,其他内容其他卡掉。

    解决方法:IE8是有两种解析模式的,一种是IE8 Standard Modes :默认的最标准的模式,严格按照W3C相关规定,一种是IE7 Standards Modes :IE7现在用的解析网页的模式。IE7还算是不错的浏览器,如果让IE8浏览器自动切换到IE7,IE6模式,那我们就不用为IE8布局兼容问题烦恼了,而这个开关只有一行代码:

    或者

    其实就是比较霸道的让ie8以ie7的标准或者是以 ie6 的标准去解析整个页面!

    在网页的head里加入以上这段代码,用IE8访问时就会自动切换到IE7模式,如果你的网站在IE7下显示正常,那在IE8下也可以正常显示了。

    8.Bootstrap3中使用了大量的Media Query特性,

    但是IE8似乎无法识别,所以需要hack一下啦!Bootstrap3的官方文档中已经针对浏览器兼容性做了比较详细的说明,推荐采用Respond.js解决此问题,具体方法参见它的文档即可。

    有一个地方需要注意的是,如果对Bootstrap3 media query声明的属性(比如.container

    )进行覆盖,那在不支持media query的浏览器中Respond.js起作用后,会把你的覆盖样式再次覆盖。我的解决方案是在后面加上!important.

    9.实现CSS3的某些特性

    IE8不支持CSS3的很多新特性,不过我们可以使用一些比较成熟的hack方法,我采用的是CSS3 PIE,它支持的特性有这些:border-radius、box-shadow、border-image、multiple background images、linear-gradient等。

    官方文档给出了2种使用方式,一种是引入.htc文件,另一种则是使用PIE.js。如果使用第一种方法(官方推荐),那么需要设置.htc文件的Content-Type为text/x-component。这个也好办,如果你是通过nginx来托管此文件,只要在Nginx的配置文件中加入一条MIME规则即可。我建议使用Flask来托管它(放在static文件夹中),这样更方便,然后只需加入下面的代码:

    import mimetypesmimetypes.add_type('text/x-component', '.htc')

    10.如果你想使用background-size: cover

    设置全屏背景,很遗憾IE8办不到...但可以使用IE独有的AlphaImageLoader滤镜来实现,添加一条如下的CSS样式:

    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=Enabled, sizingMethod=Size , src=URL)

    将sizingMethod设置为scale就OK了。还没完,如果你在此背景之上放置了链接,那这个链接是无法点击的。一般情况下的解决办法是为链接或按钮添加position:relative使其相对浮动。

    11.filter blur

    CSS3中提供支持滤镜效果的属性filter,比如支持高斯模糊效果的blur(类似iOS7的效果):

    filter: blur(10px);

    -webkit-filter: blur(10px);

    -moz-filter: blur(10px);

    IE8对filter: blur(10px)的显示效果是对HTML元素进行小范围的模糊处理,这个效果并不是高斯模糊,要想支持高斯模糊,需要如下设置: filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='10');

    在实践中发现一个坑就是,所有position: relative的元素都不会生效。

    12trime()

    :js在IE8+兼容String没有trim方法,写一个兼容ie8一下的浏览器的trim()方法

    //------------------js去掉字符串的空格----------------------------//

    //去左空格;

    function ltrim(s){

    return s.replace(/(^/s*)/g, "");

    }

    //去右空格;

    function rtrim(s){

    return s.replace(/(/s*$)/g, "");

    }

    //去左右空格;

    function trim(s){

    //s.replace(/(^/s*)|(/s*$)/g, "");

    return rtrim(ltrim(s));

    }

    13:.标签最低高度设置min-height不兼容

    如果我们  要设置一个标签的最小高度200px,需要进行的设置为:{min-height:200px; height:auto !important; height:200px; overflow:visible;}

    14:.indexOf

    14-1问题

    前端代码中有多处地方使用javascript数组的indexOf方法,用于查询某数组中是否存在某元素,然而测试,在IE8不支持数组元素的indexOf()方法。如下

    var location = ['1','2','3'];

    var serverData = [‘1’ , ’4’, ‘5’];

    for( var i = 0; i < serverData.length; i++ )

    {

    if(location.indexOf( serverData[i].location ) == -1 )

    location.push( serverData[i]);

    }

    }

    上述js代码的功能是将数组serverData出现的新元素添加如location中。该方法在火狐、chrome浏览器中支持,但在IE8中并不支持。

    14-2解决办法

    方法一:

    数组元素转化为字符串后,再使用indexOf()方法。

    var location = ['1','2','3'];

    var serverData = [‘1’ , ’4’, ‘5’];

    for( var i = 0; i < serverData.length; i++ )

    {

    if(location.join().indexOf( serverData[i].location ) == -1 )

    location.push( serverData[i]);

    }

    方法二(推荐方法):

    添加如下js代码:

    if (!Array.prototype.indexOf)

    {

    Array.prototype.indexOf = function(elt /*, from*/)

    {

    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;

    from = (from < 0)

    ? Math.ceil(from)

    : Math.floor(from);

    if (from < 0)

    from += len;

    for (; from < len; from++)

    {

    if (from in this &&

    this[from] === elt)

    return from;

    }

    return -1;

    };

    }

    当浏览器对于数组不支持indexOf()方法时,就为数组添加该方法。

    该方法会在浏览器不支持数组的indexOf方法时,为其手动添加indexOf方法,实现浏览器的兼容。

    相关文章

      网友评论

          本文标题:IE8兼容总结

          本文链接:https://www.haomeiwen.com/subject/htuzqxtx.html