1. 程式人生 > >CSS HACK技術以及如何解決瀏覽器相容性

CSS HACK技術以及如何解決瀏覽器相容性

一、處理相容性?:針對不同的瀏覽器編寫不同的css。
二、標準模式與混雜模式

  • IE6之前,不同瀏覽器之間沒有相容性而言
  • 瀏覽器執行模式
    • 混雜
    • 標準
    • 非標準
  • 觸發混雜模式
    不宣告DOCTYPE
    • 會預設使用IE5.5來薰染頁面
  • 不同模式下,瀏覽器對CSS 和JS解析效果不同

三、什麼是CSS HACK?
瀏覽器的型別及版本的不同會造成CSS效果渲染不同。
四、瀏覽器相容性
1、瀏覽器的型別及版本不同,會造成CSS效果解析不同,通過CSS HACK來解決。
2、相容性問題

  • body的margin和padding
    • IE的預設margin和padding大
    • 解決方案:統一設定body 的margin和padding
  • 居中佈局
    • 在IE低版本中,對父元素設定text-align:center可以控制所有元素居中;其他瀏覽器中,塊級元素居中要使用margin:0 auto;
    • 解決方案:統一通過設定margin:0 auto;實現居中
  • 元素的高度和內容
    • 在IE低版本中,元素的高度至少包含內容;其他瀏覽器中,內容超出高度後,溢位顯示
    • 解決方案:設定overflow:hidden;
  • 子元素設定上外邊距時,其實是設定在了父元素上
    • 解決方案:
      • 設定父元素邊框
      • 通過父元素的padding-top來解決
      • 內容生成(IE低版本除外)
        3、CSS HACK解決瀏覽器相容性問題
        (1)CSS HACK原理:通過CSS的優先順序解決
        (2)CSS HACK方式:
        ① CSS類內部HACK:對選擇器內部的屬性或者值,增加字首或字尾的方式
hack 寫法 IE6 IE7 IE8 IE9 IE10
* *color
+ +color
- -color
_ _color
# color
\0 color\0
\9\0 color\9\0
!important color:blue!important;
background-color:red;      //通用
background-color: yellow\0;//8 9 10 --->8
background-color: pink\9\0;//9 10
*background-color: green; //6 7 -->7
_background-color: blue;  //6

②選擇器HACK:為選擇器新增字首,去匹配不同的瀏覽器

  • *字首:IE6
  • *+字首:IE7
  • @media screen\9{……} 對IE6 IE7有效

③HTML頭部引入HACK:IE條件註釋
IE根據if條件來判斷是否解析條件註釋裡面的內容

  • gt:greater than 選擇條件版本以上版本,不包括條件版本
  • lt:less than 選擇條件版本以下版本,不包括條件版本
    • eg:gt IE6:選擇大於IE6以上的瀏覽器
  • gte:greater than equal 選擇條件版本以上版本,包括條件版本
  • lte:less than equal 選擇條件版本以下版本,包括條件版本
  • ! 選擇條件版本以外的所有版本,無論高低。
// 條件註釋語法
<!--[if gt IE6]>
//該段內容只被IE6以上的瀏覽器解析
<![endif] -->

五、如何解決瀏覽器相容性(面試題)?
1、html,css,js程式碼,全部為標準模式
2、針對不支援的屬性,需要通過瀏覽器字首來解決

  • -webkit- : chrome、Safari
  • -moz- : Firefox
  • -o- : opera
  • -ms- : Microsoft IE

3、針對微軟IE的低版本瀏覽器,通過CSS HACK方式
(1)CSS類內部Hack

 - IE8、9、10:\0
 - IE9、10:\9\0
 - IE7:* , + , #
 - IE6:_ , -
 - 

(2)選擇器Hack

  • *字首
  • *+字首
  • @media screen{}

(3)頭部引入Hack

  • 通過IE的條件註釋引入不同的CSS檔案

4、主流瀏覽器的主流版本

  • 通過響應的CSS框架來解決。(bootstrap等)