第140天:前端開發中瀏覽器相容性問題總結(一)

半指溫柔樂發表於2018-01-09

我們在開發的時候會明確專案要相容哪些瀏覽器的最低版本,我之前的專案要求相容IE8.0以上的版本,Chrome 48以上,FireFox 44以上。有了這些最基本的要求,在開發中就是要考慮到CSS樣式和JavaScript的在這些瀏覽器的相容性了
一、html部分

1.H5新標籤在IE9以下的瀏覽器識別 

<!–[if lt IE 9]>

 <script type=”text/javascript” src=”js/html5shiv.js”></script>

<![endif]–>

 html5shiv.js下載地址

https://github.com/aFarkas/html5shiv/releases

2.ul標籤內外邊距問題

ul標籤在IE6IE7中,有個預設的外邊距,但是在IE8以上及其他瀏覽器中有個預設的內邊距。

解決方法:統一設定ul的內外邊距為0
二、CSS樣式的相容性      
1.csshack問題:主要針對IE的不同版本,不同的瀏覽器的寫法不同       
 IE的條件註釋hack       
 <!–[if IE 6]>此處內容只有IE6.0可見<![endif]–>          
 <!–[if IE 7]>此處內容只有IE7.0可見<![endif]–>

2.IE6雙邊距問題IE6在浮動後,又有橫向的margin,此時,該元素的外邊距是其值的2       
 解決辦法display:block;

3.IE6下圖片的下方有空隙      
 解決方法:給img設定display:block;

4.IE6下兩個float之間會有個3pxbug       
 解決辦法:給右邊的元素也設定float:left;

5.IE6下沒有min-width的概念,其預設的width就是min-width

6.IE6下在使用margin:0 auto;無法使其居中       
 解決辦法:為其父容器設定text-align:center;

7.被點選過後的超連結不再具有hoveractive屬性       
 解決辦法:lvha的順序書寫css樣式,
 “:link“: a標籤還未被訪問的狀態;
 “:visited“: a標籤已被訪問過的狀態;
 “:hover“: 滑鼠懸停在a標籤上的狀態;
 “:active“: a標籤被滑鼠按著時的狀態;

8.在使用絕對定位或者相對定位後,IE中設定z-index失效,原因是因為其元素依賴於父元素的z-index,但是父元素預設為0, 子高父低,所以不會改變顯示的順序

9.IE6下無法設定1px的行高,原因是由其預設行高引起的       
 解決辦法:為期設定overflow:hidden;或者line-height:1px;

三、JavaScript的相容性

1.標準的事件繫結方法函式addEventListener,但IE下是attachEvent

2.事件的捕獲方式不一致,標準瀏覽器是由外至內,而IE是由內到外,但是最後的結果是將IE的標準定為標準

3.window.event獲取的。並且獲取目標元素的方法也不同,標準瀏覽器是event.target,而IE下是event.srcElement

4.在低版本的IE中獲取的日期處理函式的值不是與1900的差值,但是在高版本的IE中和標準瀏覽器保持了一致,獲取的值也是與1900的差值。          
 比如:var year= new Date().getYear();

5.ajax的實現方式不同,這個我所理解的是獲取XMLHttpRequest的不同,IE下是activeXObject

6.IE中不能操作trinnerHtml

 

7.獲得DOM節點的父節點、子節點的方式不同
其他瀏覽器:parentNode  parentNode.childNodes       
IEparentElement parentElement.children

8、常見CSS屬性相容

  • inline-block: >=ie8
  • min-width/min-height: >=ie7
  • :before,:after: >=ie8
  • div:hover: >=ie7
  • inline-block: >=ie8
  • background-size: >=ie9
  • 圓角: >= ie9
  • 陰影: >= ie9
  • 動畫/漸變: >= ie10


相關文章