瀏覽器兼容

  • 什么是CSS hack汇荐?

不同廠商的瀏覽器日熬,或同一廠商不同版本的瀏覽器铃在,對(duì)css的解析識(shí)別是不一樣的,因此同樣的一份css代碼碍遍,在不同瀏覽器下會(huì)有不一樣的表現(xiàn)定铜。這時(shí)為了達(dá)到我們想要頁(yè)面效果,就要為不同的瀏覽器寫(xiě)不一樣的css代碼怕敬,讓它能兼容不同的瀏覽器揣炕,在不同的瀏覽器上得到我們想要的效果,這就是CSS hack东跪。
簡(jiǎn)單的說(shuō)畸陡,CSS hack的目的就是使你的CSS代碼兼容不同的瀏覽器。

  • 談一談瀏覽器兼容的思路虽填。

1.要不要做兼容丁恭?
對(duì)于一個(gè)網(wǎng)站,我們要大致了解它的受眾人群斋日,受眾的瀏覽器牲览,要確定這個(gè)網(wǎng)站是效果優(yōu)先還是基本功能優(yōu)先,里面的有些效果是否有必要實(shí)現(xiàn)等等恶守,通過(guò)這些來(lái)確定瀏覽器是否要做兼容第献。
2.做到什么程度贡必?
兼容IE6?兼容IE7庸毫?還是都兼容仔拟?
3.選擇合適的工具進(jìn)行開(kāi)發(fā)
根據(jù)兼容需求選擇技術(shù)框架/庫(kù)(jquery等);
根據(jù)兼容需求選擇兼容工具(html5shiv.js飒赃、respond.js利花、css reset、normalize.css载佳、Modernizr
postCSS)晋被;
條件注釋、CSS Hack刚盈、js 能力檢測(cè)做一些修補(bǔ)。

總結(jié):
漸進(jìn)增強(qiáng)(progressive enhancement): 針對(duì)低版本瀏覽器進(jìn)行構(gòu)建頁(yè)面挂脑,保證最基本的功能藕漱,然后再針對(duì)高級(jí)瀏覽器進(jìn)行效果、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗(yàn)崭闲;
優(yōu)雅降級(jí) (graceful degradation): 一開(kāi)始就構(gòu)建完整的功能肋联,然后再針對(duì)低版本瀏覽器進(jìn)行兼容。

  • 列舉5種以上瀏覽器兼容的寫(xiě)法刁俭。

1.條件注釋
條件注釋是在HTML源碼中被IE有條件解釋的語(yǔ)句橄仍。條件注釋可被用來(lái)向IE提供及隱藏代碼棕洋。
條件注釋對(duì)IE的版本和IE非IE有優(yōu)秀的區(qū)分能力法褥,是web設(shè)計(jì)中常用的hack方法包吝。

    <!--[if IE 6]> /*如果是IE6脓魏,則<p>生效*/
    <p>You are using Internet Explorer 6.</p>
    <![endif]-->
    <!--[if !IE]><!--> /*如果是非IE瘪阁,則<script>生效*/
    <script>alert(1);</script>
    <!--<![endif]-->
    <!--[if IE 8]> /*如果是IE8操禀,則<link>生效*/
    <link href="ie8only.css" rel="stylesheet">
    <![endif]-->

注意:IE10以后不再支持條件注釋隧枫。

項(xiàng)目 示例 說(shuō)明
纬乍! <if !IE> 非IE
lt <if lt IE6> 小于IE6
lte <if lte IE6> 小于等于IE6
gt <if gt IE6> 大于IE6
gte <if gte IE6> 大于等于IE6

2.css屬性前綴法
IE6能識(shí)別下劃線""和星號(hào)" * "第晰,IE7能識(shí)別星號(hào)" * "锁孟,但不能識(shí)別下劃線"",IE6~IE10都認(rèn)識(shí)"\9"茁瘦,但firefox前述三個(gè)都不能認(rèn)識(shí)品抽。因此我們可以利用這些特性,針對(duì)不同瀏覽器添加只有該瀏覽器能識(shí)別的css代碼甜熔,完成hack
示例:

/*在不同瀏覽器下有不一樣的顏色表現(xiàn)*/
.box{
  color: red;
  _color: blue; /*ie6*/
  *color: pink; /*ie67*/
  color: yellow\9;  /*ie/edge 6-8*/
}
/*在firefox總是綠色的圆恤,IE6總是紅色的*/
div{
background:green;/*forfirefox*/
*background:red;/*forIE6*/(bothIE6&&IE7)
}

3.選擇器前綴法
與屬性前綴法類似,針對(duì)一些頁(yè)面表現(xiàn)不一致或者需要特殊對(duì)待的瀏覽器腔稀,在CSS選擇器前加上一些只有某些特定瀏覽器才能識(shí)別的前綴進(jìn)行hack哑了。

/*常見(jiàn)的選擇器hack*/
*html * /*前綴只對(duì)IE6生效*/
*+html /* *+前綴只對(duì)IE7生效*/
@media screen\9{...}  /*只對(duì)IE6/7生效*/
@media \0screen {body { background: red; }} /*只對(duì)IE8有效*/
@media \0screen\,screen\9{body { background: blue; }} /*只對(duì)IE6/7/8有效*/
@media screen\0 {body { background: green; }} /*只對(duì)IE8/9/10有效*/
@media screen and (min-width:0\0) {body { background: gray; }} /*只對(duì)IE9/10有效*/
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} /*只對(duì)IE10有效*/

4.使用Mordernizr.js
Modernizr 是一個(gè)用來(lái)檢測(cè)瀏覽器功能支持情況的 JavaScript 庫(kù)赘方,運(yùn)行的時(shí)候它會(huì)在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">

它顯示了chrom瀏覽器下支持和不支持的特性拆火。
下面是它的一個(gè)運(yùn)用示例跳夭,在支持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;
}

如果瀏覽器支持boxshadow们镜,Modernizr就會(huì)在html上添加class=boxshadow币叹,對(duì)應(yīng)到css中生成陰影,如果不支持模狭,則生成class=no-boxshadow颈抚,對(duì)應(yīng)到css中生成邊框。

  • 以下工具/名詞是做什么的嚼鹉?

條件注釋

條件注釋是在HTML源碼中被IE有條件解釋的語(yǔ)句贩汉。條件注釋可被用來(lái)向IE提供及隱藏代碼。
條件注釋對(duì)IE的版本和IE非IE有優(yōu)秀的區(qū)分能力锚赤,是web設(shè)計(jì)中常用的hack方法匹舞。

    <!--[if IE 6]> /*如果是IE6,則<p>生效*/
    <p>You are using Internet Explorer 6.</p>
    <![endif]-->
    <!--[if !IE]><!--> /*如果是非IE线脚,則<script>生效*/
    <script>alert(1);</script>
    <!--<![endif]-->
    <!--[if IE 8]> /*如果是IE8赐稽,則<link>生效*/
    <link href="ie8only.css" rel="stylesheet">
    <![endif]-->

IE hack

針對(duì)IE,對(duì)css進(jìn)行hack浑侥,保證css能在IE下被正常解析識(shí)別姊舵。

JS 能力檢測(cè)

用JS對(duì)瀏覽器支持什么特性進(jìn)行檢測(cè),針對(duì)某些特性寓落,給出特定的解決方案蠢莺,這是解決瀏覽器兼容的一種檢測(cè)。

html5shiv.js

IE瀏覽器由于對(duì)html5不能很好的支持(IE9以上部分支持零如,IE6/IE7/IE8不支持)躏将,導(dǎo)致許多用html5編寫(xiě)的網(wǎng)站不能用IE正常訪問(wèn)。html5shiv.js是一個(gè)js庫(kù)考蕾,它通過(guò)模擬的方式祸憋,使IE可以正常訪問(wèn)html5編寫(xiě)的頁(yè)面。

respond.js

IE6-IE8不支持媒體查詢肖卧,使用respond.js可以使IE6-IE8支持媒體查詢蚯窥。

css reset

對(duì)瀏覽器的默認(rèn)樣式進(jìn)行重置

normalize.css

normalize.css是css reset發(fā)展的產(chǎn)物,如果說(shuō)reset是把瀏覽器的一切默認(rèn)樣式都進(jìn)行重置,那么normalize.css的理念則是盡量保留瀏覽器的默認(rèn)樣式拦赠,不進(jìn)行太多的重置巍沙。

Normalize.css 只是一個(gè)很小的CSS文件,但它在默認(rèn)的HTML元素樣式上提供了跨瀏覽器的高度一致性荷鼠。相比于傳統(tǒng)的CSS Reset句携,Normalize.css是一種現(xiàn)代的、為HTML5準(zhǔn)備的優(yōu)質(zhì)替代方案允乐。Normalize.css現(xiàn)在已經(jīng)被用于Twitter Bootstrap矮嫉、HTML5 Boilerplate、GOV.UK牍疏、Rdio蠢笋、CSS Tricks 以及許許多多其他框架、工具和網(wǎng)站上鳞陨。

Modernizr

Modernizr 是一個(gè)用來(lái)檢測(cè)瀏覽器功能支持情況的 JavaScript 庫(kù)昨寞,運(yùn)行的時(shí)候它會(huì)在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">

postCSS

postCSS可以理解為后編譯器馁害,它提供了一個(gè)平臺(tái),在平臺(tái)上我們可以用js開(kāi)發(fā)一些插件(如autoprefixer)來(lái)處理我們的css文件蹂匹,我們只要正常的編寫(xiě)css碘菜,postcss就可以幫我們自動(dòng)生成具有兼容性的css。

  • 一般在哪個(gè)網(wǎng)站查詢屬性兼容性限寞?

caniuse.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忍啸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子履植,更是在濱河造成了極大的恐慌计雌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玫霎,死亡現(xiàn)場(chǎng)離奇詭異凿滤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)庶近,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)翁脆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鼻种,你說(shuō)我怎么就攤上這事反番。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵罢缸,是天一觀的道長(zhǎng)篙贸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)枫疆,這世上最難降的妖魔是什么爵川? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮养铸,結(jié)果婚禮上雁芙,老公的妹妹穿的比我還像新娘。我一直安慰自己钞螟,他們只是感情好兔甘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鳞滨,像睡著了一般洞焙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拯啦,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天澡匪,我揣著相機(jī)與錄音,去河邊找鬼褒链。 笑死唁情,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甫匹。 我是一名探鬼主播甸鸟,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼兵迅!你這毒婦竟也來(lái)了抢韭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恍箭,失蹤者是張志新(化名)和其女友劉穎刻恭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扯夭,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳍贾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了交洗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贾漏。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖藕筋,靈堂內(nèi)的尸體忽然破棺而出纵散,到底是詐尸還是另有隱情梳码,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布伍掀,位于F島的核電站掰茶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蜜笤。R本人自食惡果不足惜濒蒋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望把兔。 院中可真熱鬧沪伙,春花似錦、人聲如沸县好。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缕贡。三九已至翁授,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晾咪,已是汗流浹背收擦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谍倦,地道東北人塞赂。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像昼蛀,于是被迫代替她去往敵國(guó)和親宴猾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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

  • 什么是 CSS hack CSS hack是通過(guò)在CSS樣式中加入一些特殊的符號(hào)曹洽,讓不同的瀏覽器識(shí)別不同的符號(hào)(什...
    怎么昵稱閱讀 387評(píng)論 0 1
  • CSS Hack 不同的瀏覽器對(duì)某些CSS代碼解析會(huì)存在一定的差異鳍置,因此就會(huì)導(dǎo)致不同瀏覽器下給用戶展示的頁(yè)面效果不...
    zx9426閱讀 386評(píng)論 0 0
  • 一辽剧、如何調(diào)試 IE 瀏覽器送淆? 在IE7以上的版本中可以通過(guò)按快捷鍵F12調(diào)出開(kāi)發(fā)人員調(diào)試框,如下圖IE7以上調(diào)試工...
    dengpan閱讀 548評(píng)論 0 2
  • 一怕轿、問(wèn)答部分: 1. 如何調(diào)試 IE 瀏覽器? 如果是IE7版本以上可以使用自帶的開(kāi)發(fā)者工具偷崩,按F12,即可打開(kāi):...
    小木子2016閱讀 532評(píng)論 0 0
  • 扶欄遙望雙亭撞羽,千帆始渡粼波里阐斜。 兩河交匯,商旅云聚诀紊,盛唐景氣谒出。 詩(shī)圣揮情,岷山雪照,東吳蹤跡笤喳。 卻道迎送往为居,陸翁所...
    冰熙舍人閱讀 767評(píng)論 4 12