入門12 瀏覽器兼容

CSS hack

不同廠商的流覽器或某瀏覽器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),對CSS的支持检号、解析不一樣腌歉,導(dǎo)致在不同瀏覽器的環(huán)境中呈現(xiàn)出不一致的頁面展現(xiàn)效果。為了獲得統(tǒng)一的頁面效果齐苛,需要針對不同的瀏覽器或不同版本寫特定的CSS樣式翘盖,我們把這個(gè)針對不同的瀏覽器/不同版本寫相應(yīng)的CSS code的過程,叫做CSS hack

瀏覽器兼容的思路

  • 要不要做
  • 產(chǎn)品的角度(產(chǎn)品的受眾凹蜂、受眾的瀏覽器比例馍驯、效果優(yōu)先還是基本功能優(yōu)先)
  • 成本的角度 (有無必要做某件事)
  • 做到什么程度
  • 讓哪些瀏覽器支持哪些效果
  • 如何做
  • 根據(jù)兼容需求選擇技術(shù)框架/庫(jquery)
  • 根據(jù)兼容需求選擇兼容工具(html5shiv.js、respond.js玛痊、css reset汰瘫、normalize.css、Modernizr)
  • postCSS
  • 條件注釋擂煞、CSS Hack混弥、js 能力檢測做一些修補(bǔ)

瀏覽器兼容的寫法(5種以上)

  • 條件注釋
項(xiàng)目 說明 范例
! [if !IE],非IE
[if (IE 6)|(IE 7)]对省,IE6或者IE7
lt 小于 [if lt IE 5.5]蝗拿,小于IE 5.5
lte 小于等于 [if lte IE 6]晾捏,小于等于IE6
gt 大于 [if gt IE 5],大于 IE5
gte 大于等于 [if gte IE 7]哀托,大于等于IE7
  • 屬性前綴法
    IE6能識別 * _
    IE7能識別 *
    “-″減號是IE6專有的hack
    “\9”IE6~IE10都生效
    “\0” IE8/IE9/IE10都生效惦辛,是IE8/9/10的hack
    “\9\0” 只對IE9/IE10生效,是IE9/10的hack
    示例:
.box {
   color: red;
   _color: blue;  /*ie6*/
   *color: green; /*ie6 7*/
   color: yellow/9; /*ie6-10*/
}
  • 選擇器前綴法
    選擇器前綴法是針對一些頁面表現(xiàn)不一致或者需要特殊對待的瀏覽器仓手,在CSS選擇器前加上一些只有某些特定瀏覽器才能識別的前綴進(jìn)行hack胖齐。
*html *前綴只對IE6生效 
*+html *+前綴只對IE7生效 
@media screen\9{...}只對IE6/7生效 
@media \0screen {body { background: red; }}只對IE8有效 
@media \0screen\,screen\9{body { background: blue; }}只對IE6/7/8有效 
@media screen\0 {body { background: green; }} 只對IE8/9/10有效 
@media screen and (min-width:0\0) {body { background: gray; }} 只對IE9/10有效 
@media screen and (-ms-high-contrast: active),
 (-ms-high-contrast: none) {body { background: orange; }} 只對IE10有效
  • 條件注釋結(jié)合類選擇器整體優(yōu)化
<!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]-->

優(yōu)點(diǎn):不用在CSS代碼的屬性前加入令人費(fèi)解的前綴(*_

  • Modernizr工具
    首先下載自定義的腳本,像引用普通js文件一樣引用它
    <script src="Scripts/Modernizr.js" type="text/javascript"></script>
    添加完Modernizr引用以后,它就立即生效了俗或。運(yùn)行的時(shí)候它會在html元素上添加一批CSS的class名稱市怎,這些class名稱標(biāo)記當(dāng)前瀏覽器支持哪些特性和不支持哪些特性,支持的特性就直接顯示該天特性的名稱作為一個(gè)class(例如:canvas,websockets)辛慰,不支持的特性顯示的class是“no-特性名稱”(例如:no-flexbox)。下面這段代碼是運(yùn)行在Chrome下的效果:
<html class=" js flexbox canvas canvastext webgl no-touch geolocation 
postmessage websqldatabase indexeddb hashchange history draganddrop websockets
rgba hsla multiplebgs backgroundsize borderimage borderradius boxshadow 
textshadow opacity cssanimations csscolumns cssgradients cssreflections csstransforms 
csstransforms3d csstransitions fontface generatedcontent video audio localstorage
sessionstorage webworkers applicationcache svg inlinesvg smil svgclippaths">

下面這段代碼是運(yùn)行在IE9下的效果:

<html class=" js no-flexbox canvas canvastext no-webgl no-touch geolocation 
               postmessage no-websqldatabase no-indexeddb hashchange no-history 
        
draganddrop no-websockets rgba hsla multiplebgs backgroundsize 
        no-borderimage borderradius boxshadow no-textshadow opacity 
        no-cssanimations no-csscolumns no-cssgradients no-cssreflections
        csstransforms no-csstransforms3d no-csstransitions fontface 
        generatedcontent video audio localstorage sessionstorage 
        no-webworkers no-applicationcache svg inlinesvg smil svgclippaths">

也可結(jié)合HTML5/CSS3特性一起使用
可以直接使用Modernizr在<html>元素里生成的class名稱干像,在你的css文件里定義相應(yīng)的屬性以便支持當(dāng)前瀏覽器帅腌。例如,下面的代碼可以屬性麻汰,在支持shadow陰影的瀏覽器顯示shadow速客,不支持的瀏覽器顯示標(biāo)準(zhǔn)的邊框:

.boxshadow #MyContainer {
    border: none;
    -webkit-box-shadow: #666 1px 1px 1px;
    -moz-box-shadow: #666 1px 1px 1px;
}
.no-boxshadow #MyContainer {
    border: 2px solid black;
}

因?yàn)槿绻麨g覽器支持box-shadows的話,Modernizr就會將boxshadow class添加到<html>元素五鲫,然后你可以將它管理到一個(gè)相應(yīng)的divid上溺职。如果不支持,Modernizr就會將no-boxshadow class添加到<html>元素位喂,這樣顯示的就是一個(gè)標(biāo)準(zhǔn)的邊框浪耘。這樣我們就可以很方便地在支持CSS3特性的瀏覽器上使用CSS3新功能,不支持的瀏覽器上繼續(xù)使用以前的方式塑崖。

各種工具/名詞

  • 條件注釋
    是于HTML源碼中被 IE 有條件解釋的語句七冲。條件注釋可被用來向 IE提供及隱藏代碼。 條件注釋最初于微軟的 Internet Explorer 5瀏覽器中出現(xiàn)规婆,并且直至 Internet Explorer 9 均支持澜躺。IE10+不再支持條件注釋。

  • IE Hack
    針對不同版本的IE瀏覽器寫的css抒蚜,從而使各個(gè)版本IE能夠順利渲染頁面掘鄙。

  • js 能力檢測
    瀏覽器的能力檢測目標(biāo)不是檢測特定的瀏覽器,而是檢測瀏覽器的能力嗡髓。這樣操漠,只需要檢測瀏覽器是否支持特定的能力,就可以給出特定的解決方案器贩。這一部分檢測是解決瀏覽器兼容問題的主要檢測颅夺。

  • html5shiv.js
    通過模擬標(biāo)簽解決不支持HTML5新標(biāo)簽朋截,新特性的瀏覽器的兼容問題。IE9以下的IE版本不支持HTML5

  • respond.js
    用于為 IE6-8 以及其它不支持 CSS3 媒體查詢功能的瀏覽器提供媒體查詢的 min-width 和 max-width 特性吧黄,實(shí)現(xiàn)響應(yīng)式網(wǎng)頁設(shè)計(jì)

  • css reset
    將所有的瀏覽器的自帶樣式重置掉部服,這樣更易于保持各瀏覽器渲染的一致性參考文章

  • normalize.css
    Normalize.css 是一個(gè)可以定制的CSS文件,它讓不同的瀏覽器在渲染網(wǎng)頁元素的時(shí)候形式更統(tǒng)一拗慨,在默認(rèn)的HTML元素樣式上提供了跨瀏覽器的高度一致性

    • Preserves useful defaults, unlike many CSS resets.
      保護(hù)有用的瀏覽器默認(rèn)樣式而不是完全去掉它們
    • Normalizes styles for a wide range of elements
      一般化的樣式:為大部分HTML元素提供
    • Corrects bugs and common browser inconsistencies
      修復(fù)瀏覽器自身的bug并保證各瀏覽器的一致性
    • Improves usability with subtle improvements
      優(yōu)化CSS可用性:用一些小技巧
    • Explains what code does using detailed comments
      解釋代碼:用注釋和詳細(xì)的文檔來
  • Modernizr
    odernizr 是一個(gè) JavaScript 庫廓八,用于檢測用戶瀏覽器的 HTML5 與 CSS3 特性。Modernizr 使你可以方便地為各種情況編寫 JavaScript 和 CSS赵抢,無論瀏覽器是否支持這些特性剧蹂。這是處理漸進(jìn)增強(qiáng)的完美方案。
    工作原理:
    Modernizr 會在頁面加載后立即檢測特性烦却;然后創(chuàng)建一個(gè)包含檢測結(jié)果的 JavaScript 對象宠叼,同時(shí)在 html 元素加入方便你調(diào)整 CSS 的 class 名。

  • postCSS
    是一個(gè)JS插件轉(zhuǎn)換樣式表的工具其爵。這些插件能夠檢驗(yàn)?zāi)愕腃SS冒冬、支持變量和混合,轉(zhuǎn)化css3的新特性語法摩渺、行內(nèi)圖片等灵临。

查詢屬性兼容性的網(wǎng)站胡桨?

常用網(wǎng)站

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子精堕,更是在濱河造成了極大的恐慌悍引,老刑警劉巖凰慈,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件官紫,死亡現(xiàn)場離奇詭異,居然都是意外死亡龙宏,警方通過查閱死者的電腦和手機(jī)棵逊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來银酗,“玉大人辆影,你說我怎么就攤上這事∈蛱兀” “怎么了蛙讥?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灭衷。 經(jīng)常有香客問我次慢,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任迫像,我火速辦了婚禮劈愚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闻妓。我一直安慰自己菌羽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布由缆。 她就那樣靜靜地躺著注祖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪均唉。 梳的紋絲不亂的頭發(fā)上是晨,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機(jī)與錄音舔箭,去河邊找鬼罩缴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛限嫌,可吹牛的內(nèi)容都是我干的靴庆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼怒医,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奢讨?” 一聲冷哼從身側(cè)響起稚叹,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拿诸,沒想到半個(gè)月后扒袖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亩码,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年季率,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片描沟。...
    茶點(diǎn)故事閱讀 38,625評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡飒泻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吏廉,到底是詐尸還是另有隱情泞遗,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布席覆,位于F島的核電站史辙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜聊倔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一晦毙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耙蔑,春花似錦见妒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至邀层,卻和暖如春返敬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寥院。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工劲赠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秸谢。 一個(gè)月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓凛澎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親估蹄。 傳聞我的和親對象是個(gè)殘疾皇子塑煎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評論 2 348

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

  • 什么是 CSS hack? CSS hank由于不同廠商的瀏覽器臭蚁,比如IE,Safari最铁,Chrome等,或者同一...
    饑人谷_tonya閱讀 644評論 0 0
  • 什么是 CSS hack CSS hack是通過在CSS樣式中加入一些特殊的符號垮兑,讓不同的瀏覽器識別不同的符號(什...
    怎么昵稱閱讀 384評論 0 1
  • 1. 什么是 CSS hack 由于不同廠商的瀏覽器冷尉,比如Internet Explorer,Safari,Moz...
    QQQQQCY閱讀 232評論 0 0
  • 9月的初秋雀哨,在先鋒書店參加程璧為新專輯辦的詩歌音樂分享會。 那天私爷,程璧來的時(shí)候雾棺,穿了一身素色的棉麻衫,戴著一頂草編...
    南木瑾閱讀 8,817評論 1 11
  • 北加州的優(yōu)勝美地國家公園当犯,與想象中的秀麗景色差距頗遠(yuǎn)垢村。從洛杉磯一路往上,先是望不到邊令人絕望的山脈嚎卫,基本是沙漠的土...
    XinSuting閱讀 353評論 0 0