瀏覽器兼容

1. CSS hack

1. 什么是css hack?

針對 不同瀏覽器/不同版本寫相應的CSS code的過程,叫做css hack
出現問題: 由于不同廠商的瀏覽器 或 某瀏覽器的不同版本,對CSS的支持, 解析不一樣,導致在不同瀏覽器的環境中呈現出不一致的頁面展現效果。
解決方案: 為了獲得統一的頁面效果,就需要針對不同的瀏覽器或不同版本寫特定的CSS樣式 我們針對不同瀏覽器、不同版本寫相應的CSS code

2. CSS hack分類

CSS Hack 大致有三種表現形式

  • css屬性前綴法(即內部Hack)
  • 選擇器前綴法
  • IE條件注釋法
    1.屬性前綴法(即類內部Hack)
    例如 IE6 能識別下劃線_和星號,IE7 能識別星號,但不能識別下劃線_, IE6~IE10都認識\9,但firefox前面描述的都不認識
    選擇器前綴法(即選擇器HACK)
    例如IE6能識別html .class{},IE7能識別 +html .class{} 獲取* :first-child+html .class{}.
    IE條件注釋法(即HTML條件注釋Hack)
    針對所有IE(注: ie10+已經不再支持條建注釋):, 針對ie6 及以下版本。 這類Hack不僅對css生效, 對寫在判斷語句里面的所有代碼都會生效

CSS hack 常用的方式有三種,CSS 內部hack、選擇器hack、HTML 頭部引用,其中 CSS 內部hack 最常用。而CSS hack書寫順序,一般是將適用范圍廣、被識別能力強的CSS定義在前面比如,firefox寫在IE7前面,而IE7寫在IE6前面以此類推

2.談一談 瀏覽器兼容的思路

  1. 首先考慮要不要做瀏覽器兼容。
  2. 從產品角度出發,產品面向的客戶、客戶使用瀏覽器的比例(參照瀏覽器市場份額統計——百度統計),產品需要著重效果還是保障基本功能優先。
  • 比如客戶群體主要是年輕人,則主要考慮手機端以及chrome等,頁面是不是需要更人性化一些,
  • 如果是面向政府、銀行等傳統企業,則考慮他們使用的大多是xp系統,則應該兼容IE低版本,并且頁面應該以基本功能、穩定性、安全性優先等。
  1. 從產品成本出發考慮,如果客戶使用IE低版本的比例不大,那還需要費時費力的去做低版本兼容嗎?
  2. 需要做到什么程度
  3. 如果需要兼容瀏覽器,那么需要兼容的瀏覽器作出什么樣的效果。
  • 比如在chrome文本有陰影效果,那我的文本在IE6/7上的效果還需要陰影嗎,
  • 比如采用下劃線的顯示效果。
  • 如果實現這種效果特別復雜,在不影響基本功能的情況下,是不是可以省略這些效果。
  1. 如何去兼容
  2. 根據兼容的需求選擇框架或者庫
    (1)Bootstrap (>=ie8)
    (2)jQuery 1.~ (>=ie6), jQuery 2.~ (>=ie9)
    (3)Vue (>= ie9)
  • 根據兼容需求選擇兼容工具(html5shiv.js、respond.js、css reset、normalize.css、Modernizr、postCSS)
  • 條件注釋、CSS hack、js能力檢測做一些修補
  • 漸進增強(progressive enhancement): 針對低版本瀏覽器進行構建頁面,保證最基本的功能,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗。
  • 優雅降級 (graceful degradation): 一開始就構建完整的功能,然后再針對低版本瀏覽器進行兼容。

3. 列舉5種以上瀏覽器兼容的寫法

  1. 條件注釋
    條件注釋(condition comment)是于HTML源碼中被IE有條件解釋的語句。條件注釋可被用來向IE提供及隱藏代碼。使用了條件注釋的頁面在 windows Internet Explorer9 中可以正常工作,IE10 中無法運行
<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->
<!--[if !IE]><!-->
<script>alert(1);</script>
<!--<![endif]-->
<!--[if IE 8]>
<link href="ie8only.css" rel="stylesheet">
<![endif]-->
  1. 選擇器前綴
content: '';
display: block;
clear: both;
}
.clearfix{
*zoom: 1; /* 僅對ie67有效 */
}
兼容IE67的清除浮動
  1. 條件注釋設置樣式
<!–-[if IE 7]>
<link rel="stylesheet" href="ie7.css" type="text/css" />
<![endif]–->
  1. 條件注釋引用JS
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>——支持HTML5的標簽
  <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>——支持媒體查詢
<![endif]-->
  1. 條件注釋增加css樣式處理兼容
<!DOCTYPE html>
<!--[if IEMobile 7 ]> <html dir="ltr" lang="en-US"class="no-js iem7"> <![endif]-->
<!--[if lt IE 7 ]> <html dir="ltr" lang="en-US" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7 ]>    <html dir="ltr" lang="en-US" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8 ]>    <html dir="ltr" lang="en-US" class="no-js ie8 oldie"> <![endif]-->
<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html dir="ltr" lang="en-US" class="no-js"><!--<![endif]-->

4. 以下工具/名詞是做什么的

條件注釋條件注釋 (conditional comment) 是HTML源碼中被IE有條件解釋的語句。條件注釋可被用來向IE提供及隱藏代碼。只有IE6,7,8,9才識別,其他瀏覽器就認為是個注釋。

IE Hack使用CSS Hack解決IE瀏覽器不同版本之間CSS樣式的兼容問題,CSS Hack大部分是針對IE瀏覽器不同版本之間的表現差異而引入的。

js 能力檢測看瀏覽器是否支持當前對象的屬性或是方法,先通過獲得頁面文本內容的方式來了解兼容性,并封裝函數或對象以解決此類問題。

html5shiv.js通過引用js,來模擬HTML5標簽,使瀏覽器支持HTML5的標簽

respond.js通過引用js,來使不支持的CSS3的媒體查詢的瀏覽器也能使用該功能;

css reset用于將瀏覽器默認樣式重置的css代碼

normalize.css解決不同瀏覽器默認樣式兼容性的css代碼,相比粗暴的css reset,有以下幾點:

  • 保護有用的瀏覽器默認樣式而不是完全去掉它們
  • 為大部分元素提供一般化的樣式
  • 修復瀏覽器自身的bug并保證各瀏覽器的一致性
  • 優化CSS可用性:用一些小技巧
  • 解釋代碼:用注釋和詳細的文檔

Modernizr檢測瀏覽器HTML5和CSS的特性可用性的JS庫,根據支持或者不支持,在htmL標簽上增加相應的class,然后在css中對各class進行樣式設置

postCSS移植CSS樣式的工具,通過使用該工具,可以將標準的CSS樣式寫法,通過自動添加前綴等,轉換成瀏覽器支持的寫法

5.一般在哪個網站查詢屬性兼容性
caniuse.com可以用來查詢不同廠家、不同版本的瀏覽器對css樣式的支持情況
browserhacks.com因為Hugo GiraudelTim Pietrusky將各瀏覽器下的hack寫整理放在了Browserhacks.com之上

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 一、問答部分 1. 如何調試 IE 瀏覽器 IE7及以上版本有調試臺,可以按F12啟動。Paste_Image.p...
    _hello__world_閱讀 480評論 0 1
  • 一、如何調試 IE 瀏覽器 IE7以上版本自帶的開發者工具,IE6可以用border的方法;例:IE11的開發者工...
    __Qiao閱讀 1,133評論 2 17
  • CSS Hack 不同的瀏覽器對某些CSS代碼解析會存在一定的差異,因此就會導致不同瀏覽器下給用戶展示的頁面效果不...
    zx9426閱讀 400評論 0 0
  • 什么是 CSS hack CSS hack是通過在CSS樣式中加入一些特殊的符號,讓不同的瀏覽器識別不同的符號(什...
    怎么昵稱閱讀 400評論 0 1
  • 從某種意義上來說,復利效應節點爆發前那漫長的、令人絕望無數次的累積過程就是一個找到最適合自己節奏的階段,而什么是自...
    塵世知行者閱讀 311評論 0 2