常見IE8相容性問題及解決
1、css3媒體查詢
IE8不支援媒體查詢
解決:respond.js,在頁面中所有css檔案的引用位置之後引用Respond.js
2、HTML5新標籤
IE8不支援H5新標籤
解決:html5shiv.js,在頁面中引用html5shiv.js檔案。必須新增在頁面的<head>元素內,因為IE瀏覽器必須在元素解析前知道這個元素,所以這個js檔案不能在頁面底部引用。
3、rem不相容
rem是相對於根元素<html>的字型大小比率單位,成了目前主流的單位之一。IE9+開始支援,IE8就只能通過引入js庫來支援了
解決:在頁面中引用rem.js檔案。需要引用在頁尾,也就是<body>末尾,在所有css檔案引用和DOM元素之後
4、css3的background-size的cover和contain
backgroun-size的cover和contain是css3新引入的屬性,IE8不支援
解決:引用“background-size polyfill”庫來相容,“background-size polyfill”的程式碼檔案需要在css中引用。在所有用到這兩個“background-size”屬性值的地方,加一行“-ms-behavior”屬性
.selector { background-size: cover; /* 以下相對路徑是相對於文件,而非css檔案! */ /* 使用絕對路徑可以避免混淆 */ -ms-behavior: url(/backgroundsize.min.htc); }
5、placeholder
placeholder是h5的屬性,ie8不支援
解決:jquery-placeholder
6、last-child
last-child是css3選擇器,ie8不支援
解決:不使用last-child,而是給最後一個元素設定一個.last
的class,然後對此進行樣式設定,這樣就全部相容了
7、陣列的forEach方法
ie8的陣列物件不支援forEach方法
解決:自己實現forEach方法
if ( !Array.prototype.forEach ) { Array.prototype.forEach = function forEach( callback, thisArg ) { var T, k; if ( this == null ) { throw new TypeError( "this is null or not defined" ); } var O = Object(this); var len = O.length >>> 0; if ( typeof callback !== "function" ) { throw new TypeError( callback + " is not a function" ); } if ( arguments.length > 1 ) { T = thisArg; } k = 0; while( k < len ) { var kValue; if ( k in O ) { kValue = O[ k ]; callback.call( T, kValue, k, O ); } k++; } }; }