瀏覽器兼容

什么是 CSS hack

  • 由于不同廠商的瀏覽器巷波,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等私沮,或者是同一廠商的瀏覽器的不同版本蟆盐,如IE6和IE7法梯,對CSS的解析認識不完全一樣厦瓢,因此會導致生成的頁面效果不一樣揍障,得不到我們所需要的頁面效果脉课。 這個時候我們就需要針對不同的瀏覽器去寫不同的CSS救军,讓它能夠同時兼容不同的瀏覽器,能在不同的瀏覽器中也能得到我們想要的頁面效果倘零,我們把這個針對不同的瀏覽器/不同版本寫相應的CSS code的過程唱遭,叫做CSS hack!
  • 原理:
    • 由于不同的瀏覽器對CSS的支持及解析結(jié)果不一樣,還由于CSS中的優(yōu)先級的關(guān)系呈驶。我們就可以根據(jù)這個來針對不同的瀏覽器來寫不同的CSS拷泽。
  • 分類:
    • CSS Hack大致有3種表現(xiàn)形式,CSS類內(nèi)部Hack袖瞻、選擇器Hack以及HTML頭部引用(if IE)Hack司致。

    • 屬性前綴法(即類內(nèi)部Hack):例如 IE6能識別下劃線""和星號" * ",IE7能識別星號" * "聋迎,但不能識別下劃線""脂矫,IE6~IE10都認識"\9",但firefox前述三個都不能認識霉晕。
      如: .class { *color: blue; } /* ie6/7 */

    • 選擇器前綴法(即選擇器Hack):例如 IE6能識別*html .class{}庭再,IE7能識別*+html .class{}或者*:first-child+html .class{}。

    • IE條件注釋法(即HTML條件注釋Hack):針對所有IE(注:IE10+已經(jīng)不再支持條件注釋): 牺堰,針對IE6及以下版本: 佩微。這類Hack不僅對CSS生效,對寫在判斷語句里面的所有代碼都會生效萌焰。
      如:以下代碼只在IE下生效

瀏覽器兼容的思路

  • 1.要不要做
    • 從產(chǎn)品的角度:產(chǎn)品受眾哺眯、受眾的瀏覽器比例、效果優(yōu)先還是基本功能優(yōu)先
    • 從成本的角度:有無必要付出過高的成本
    1. 做到什么程度
    • 讓哪些瀏覽器做到哪些效果
  • 3.如何做
    • 根據(jù)兼容需求選擇框架/庫(jQeury)
    • 根據(jù)兼容需求選擇兼容工具扒俯,如:html5shiv奶卓、respond一疯、css reset、normalize夺姑、modernizr墩邀,等等(可自行搜索了解)
    • css hack、條件注釋盏浙、使用js做一些瀏覽器檢測眉睹,等等

一些瀏覽器兼容的寫法

  • IE 6的CSS Hack:

        .css-hack {   
          background-color: red; /* 其他瀏覽器上顯示為紅色 */  
          _background-color: blue; /* 只有IE 6瀏覽器上顯示為藍色 */  
        }  
    
  • IE 7的CSS Hack:

      .css-hack {   
        color: red; /* 其他瀏覽器上顯示為紅色 */  
        +color: blue; /* 只有 IE 6、IE 7 瀏覽器上顯示為藍色 */  
        _color: red; /* 讓 IE 6 復原為之前設置的顏色 */  
      }
    
  • IE 8的CSS Hack

      有IE8支持嵌套如下@media類型查詢語句:@media \0screen废膘。
      .css-hack {   
        color: red; /* 其他瀏覽器顯示紅色 */  
      }   
      @media \0screen {   
        .css-hack { color: blue; } /* 只有IE 8顯示藍色 */  
      }
    
  • HTML頭部引用hack

      在小于IE9的版本下去調(diào)用html5shiv.js和respond.js他們的作用是使瀏覽器支持h5的新標簽和媒體功能竹海。
      <!--[if lt IE 9]>
          <script src="js/html5shiv.min.js"></script>
          <script src="js/respond.min.js"></script>
      <![endif]-->    
    
  • 選擇器hack

      /* IE 6 */
      * html .selector { 樣式代碼放這里} 
      /* IE 7 */
      *+html .selector { 樣式代碼放這里} 
    
  • JS Hack

      /* 檢測瀏覽器是否為IE 8 */
      (checkIE = document.createElement("b")).innerHTML = "<!--[if IE 8]><i></i><![endif]-->"; 
        var isIE = checkIE.getElementsByTagName("i").length == 1;
    

一些工具/名詞的解釋

  • 條件注釋:條件注釋是一種安全的區(qū)分IE瀏覽器版本的語法,且被認為是取代針對IE css hack的首選辦法丐黄。
  • IE Hack:IE hack就是針對IE瀏覽器不同版本去寫不同的CSS代碼斋配,從而讓我們的頁面在IE瀏覽器上能正常顯示。
  • js 能力檢測:指利用JS去檢測瀏覽器能否實現(xiàn)某些功能灌闺,目標是識別瀏覽器的能力而不是識別特定的瀏覽器艰争。只需根據(jù)瀏覽器支持的功能給出解決方案。
  • html5shiv.js:一種使低版本IE瀏覽器能夠識別H5新標簽的解決方案桂对,只需引入一個js腳本即可生效甩卓。
  • respond.js:一種使低版本IE瀏覽器能夠識別CSS3媒體查詢解決方案,只需引入一個js腳本即可生效蕉斜。
  • css reset:css reset就是重置樣式猛频,因為早期的瀏覽器支持和理解的CSS規(guī)范不同,導致渲染頁面時效果不一致蛛勉,會出現(xiàn)很多兼容性問題鹿寻。為了解決這個問題出現(xiàn)了css reset。
  • normalize.css:CSS Reset的泛濫使它逐漸淡出前端的視野诽凌,取而代之就是Normalize.css毡熏,Normalize.css是@necolas@jon_neal 兩位大牛花了幾百個小時來研究不同瀏覽器的默認樣式的差異而得出的結(jié)晶侣诵,Normalize.css 只是一個很小的CSS文件痢法,但它在默認的HTML元素樣式上提供了跨瀏覽器的高度一致性。
  • Modernizr:Modernizr 是一套JavaScript 函式庫杜顺,用來偵測瀏覽器是否支持次世代的網(wǎng)站技術(shù)财搁,這些新的網(wǎng)站技術(shù)是來自仍在持續(xù)發(fā)展的HTML5 與 CSS3 規(guī)格。
  • PostCSS: PostCSS 是一個使用 JS 插件來轉(zhuǎn)換 CSS 的工具躬络。這些插件可以支持使用變量尖奔,混入(mixin),轉(zhuǎn)換未來的 CSS 語法,內(nèi)聯(lián)圖片等操作提茁。
  • 查詢屬性兼容性:https://caniuse.com/#home
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淹禾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子茴扁,更是在濱河造成了極大的恐慌铃岔,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峭火,死亡現(xiàn)場離奇詭異毁习,居然都是意外死亡,警方通過查閱死者的電腦和手機卖丸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門纺且,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坯苹,你說我怎么就攤上這事∫√欤” “怎么了粹湃?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泉坐。 經(jīng)常有香客問我为鳄,道長,這世上最難降的妖魔是什么腕让? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任孤钦,我火速辦了婚禮,結(jié)果婚禮上纯丸,老公的妹妹穿的比我還像新娘偏形。我一直安慰自己,他們只是感情好觉鼻,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布俊扭。 她就那樣靜靜地躺著,像睡著了一般坠陈。 火紅的嫁衣襯著肌膚如雪萨惑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天仇矾,我揣著相機與錄音庸蔼,去河邊找鬼。 笑死贮匕,一個胖子當著我的面吹牛姐仅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼萍嬉,長吁一口氣:“原來是場噩夢啊……” “哼乌昔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起壤追,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤磕道,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后行冰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溺蕉,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年悼做,在試婚紗的時候發(fā)現(xiàn)自己被綠了疯特。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡肛走,死狀恐怖漓雅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情朽色,我是刑警寧澤邻吞,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站葫男,受9級特大地震影響抱冷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梢褐,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一旺遮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盈咳,春花似錦耿眉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至热押,卻和暖如春西傀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桶癣。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工拥褂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牙寞。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓饺鹃,卻偏偏與公主長得像莫秆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子悔详,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 一镊屎、如何調(diào)試 IE 瀏覽器 IE7以上版本自帶的開發(fā)者工具,IE6可以用border的方法茄螃;例:IE11的開發(fā)者工...
    __Qiao閱讀 1,128評論 2 17
  • 一缝驳、問答部分 1. 如何調(diào)試 IE 瀏覽器 IE7及以上版本有調(diào)試臺,可以按F12啟動归苍。Paste_Image.p...
    _hello__world_閱讀 472評論 0 1
  • 一用狱、如何調(diào)試 IE 瀏覽器? 在IE7以上的版本中可以通過按快捷鍵F12調(diào)出開發(fā)人員調(diào)試框拼弃,如下圖IE7以上調(diào)試工...
    dengpan閱讀 552評論 0 2
  • CSS Hack 不同的瀏覽器對某些CSS代碼解析會存在一定的差異夏伊,因此就會導致不同瀏覽器下給用戶展示的頁面效果不...
    zx9426閱讀 388評論 0 0
  • 5.20,從秋千的微信開始吻氧,從和秋千的聊天結(jié)束今天LJH事件刷爆票圈溺忧。說好了7點半起床,兩個勞累的人兒(我和傅郁婷...
    dq920813閱讀 302評論 0 0