IE8兼容总结

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

2:placeholder

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

3:last-child

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

4:HTML5

为了IE兼容HTML5标签,加了     注释,

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中音视频

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兼容总结)