CSS兼容性

1松忍、什么是CSS hack

不同廠商的瀏覽器攀芯,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一廠商的瀏覽器的不同版本萎馅,如IE6和IE7坑填,對CSS的解析認識不完全一樣抛人,因此會導(dǎo)致生成的頁面效果不一樣,得不到我們所需要的頁面效果脐瑰。于是我們就需要針對不同的瀏覽器去寫不同的CSS妖枚,讓它能在不同的瀏覽器中也能得到我們想要的頁面效果。簡單來說苍在,就是利用不同瀏覽器對不同css的識別不同這個bug绝页,在css中加入兼容各個瀏覽器的css寫法。
CSS hack大致有表現(xiàn)形式:CSS屬性前綴法寂恬、選擇器前綴法與IE條件注釋法续誉。

2、瀏覽器兼容的思路

a)首先判斷是否需要做瀏覽器兼容初肉,分別從產(chǎn)品的角度(受眾酷鸦、受眾的瀏覽器比例、效果優(yōu)先還是功能優(yōu)先等等)與成本的角度進行判斷
b)然后確定兼容的范圍牙咏,比如需要瀏覽器支持哪些效果臼隔,選擇漸進增強或者是優(yōu)雅降級;
c)最后確定兼容的方法:1.根據(jù)兼容需求選擇技術(shù)框架/庫(jQuery)眠寿;2.根據(jù)兼容需求選擇兼容工具(html5shiv.js躬翁、respond.js、css reset盯拱、nomarlize.css盒发、Modernizr)例嘱;3.使用postcss;4.使用條件注釋宁舰、CSS hack拼卵、js能力檢測做一些修補。
一般來說優(yōu)雅降級與漸進增強的原則是:如果比較難兼容的蛮艰,就保持漸進增強的原則腋腮,先維持正常的可用功能實現(xiàn),再針對其他瀏覽器兼容做更優(yōu)秀的改動壤蚜。如果是比較容易的兼容即寡,就保持優(yōu)雅降級的原則,先構(gòu)建完整版本袜刷,再去兼容其他不好解決的兼容聪富。

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

CSS屬性前綴hack
.target{
  display: inline-block;
  *display: inline; /* 對于ie6著蟹、7不兼容inline-block墩蔓,所以需要加上下面這兩句才生效*/
  *zoom: 1;   /*這個順序是不能變得*/
}
條件注釋
<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->
<!--[if !IE]><!-->
<script>alert(1);</script>
<!--<![endif]-->
  項目    范例  說明
  ! [if !IE]    非IE
  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
  | [if (IE 6)|(IE 7)]  IE6或者IE7
條件注釋結(jié)合類選擇器
<!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]-->
選擇器前綴hack
*html       *前綴只對IE 6生效
*+html     *+前綴只對IE 7生效
@media screen\9{...}   \9只對IE 6/7生效
利用Modernizr.js等工具
?運行的時候它會在html元素上添加一批CSS的class名稱萧豆,這些class名稱標記當(dāng)前瀏覽器支持哪些特性和不支持哪些特性奸披,支持的特性就直接顯示該天特性的名稱作為一個class(例:canvas,websockets),不支持的特性顯示的class是“no-特性名稱”涮雷。以下是IE9下生成的特征類型阵面。可以直接使用Modernizr在元素里生成的class名稱份殿,在你的css文件里定義相應(yīng)的屬性以便支持當(dāng)前瀏覽器膜钓。例如嗽交,下面的代碼可以屬性卿嘲,在支持shadow陰影的瀏覽器顯示shadow,不支持的瀏覽器顯示標準的邊框:
.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;
}

4夫壁、常用工具/名詞

a)條件注釋: 條件注釋是于HTML源碼中被 IE 有條件解釋的語句拾枣。條件注釋可被用來向 IE提供及隱藏代碼。 條件注釋最初于微軟的 Internet Explorer 5瀏覽器中出現(xiàn)盒让,并且直至 Internet Explorer 9 均支持梅肤。微軟已宣布于IE10停止支持。
b)IE Hack: 針對IE瀏覽器編寫不同的CSS的讓IE能夠正常渲染的過程
c)js 能力檢測: 使用JS的語法檢測瀏覽器支持的屬性邑茄,以便展示效果
d)html5shiv.js: 用于解決IE9以下版本瀏覽器對HTML5新增標簽不識別姨蝴,并導(dǎo)致CSS不起作用的問題。
e)respond.js: 讓不支持css3 Media Query的瀏覽器包括IE6-IE8等其他瀏覽器支持查詢肺缕。
f)css reset: 覆蓋瀏覽器默認的css屬性
g)normalize.css: Normalize.css 是一個可以定制的CSS文件左医,它讓不同的瀏覽器在渲染網(wǎng)頁元素的時候形式更統(tǒng)一授帕。相比于傳統(tǒng)的CSS reset,Normalize.css是一種現(xiàn)代的浮梢、為HTML5準備的優(yōu)質(zhì)替代方案跛十。
h)Modernizr: 是一套 JavaScript 庫 ,用來偵測瀏覽器是否支持 HTML5 與 CSS3 等規(guī)格秕硝。如果瀏覽器不支持芥映,Modernizr會使用其他的解決方法來進行模擬。
i)postCSS: PostCSS是一個JS插件轉(zhuǎn)換樣式表的工具远豺。這些插件能夠檢驗?zāi)愕腃SS奈偏、支持變量和混合,轉(zhuǎn)化css3的新特性語法躯护、行內(nèi)圖片等霎苗。
j)css屬性兼容性查詢
兼容hack寫法查詢

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市榛做,隨后出現(xiàn)的幾起案子唁盏,更是在濱河造成了極大的恐慌,老刑警劉巖检眯,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厘擂,死亡現(xiàn)場離奇詭異,居然都是意外死亡锰瘸,警方通過查閱死者的電腦和手機刽严,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來避凝,“玉大人舞萄,你說我怎么就攤上這事」芟鳎” “怎么了倒脓?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長含思。 經(jīng)常有香客問我崎弃,道長,這世上最難降的妖魔是什么含潘? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任饲做,我火速辦了婚禮,結(jié)果婚禮上遏弱,老公的妹妹穿的比我還像新娘盆均。我一直安慰自己,他們只是感情好漱逸,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布泪姨。 她就那樣靜靜地躺著居砖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驴娃。 梳的紋絲不亂的頭發(fā)上奏候,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音唇敞,去河邊找鬼蔗草。 笑死,一個胖子當(dāng)著我的面吹牛疆柔,可吹牛的內(nèi)容都是我干的咒精。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼旷档,長吁一口氣:“原來是場噩夢啊……” “哼模叙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鞋屈,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤范咨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厂庇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渠啊,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年权旷,在試婚紗的時候發(fā)現(xiàn)自己被綠了替蛉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拄氯,死狀恐怖躲查,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情译柏,我是刑警寧澤镣煮,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站艇纺,受9級特大地震影響怎静,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜黔衡,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腌乡。 院中可真熱鬧盟劫,春花似錦、人聲如沸与纽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至影所,卻和暖如春蹦肴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猴娩。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工阴幌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卷中。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓矛双,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蟆豫。 傳聞我的和親對象是個殘疾皇子议忽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

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

  • 定義瀏覽器對于技術(shù)支持的標準不同造成兼容性的差異 兼容不同類型瀏覽器的基本方法 解決瀏覽器兼容問題的方法,這些方法...
    簡不簡單_都好閱讀 606評論 0 2
  • CSS對瀏覽器的兼容性有時讓人很頭疼,或許當(dāng)你了解當(dāng)中的技巧跟原理,就會覺得也不是難事,從網(wǎng)上收集了IE7,6與F...
    年輕人多學(xué)點閱讀 356評論 0 7
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案十减? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,737評論 1 92
  • 二零一五年夏天,五月十五日問禪帮辟,相示恰逢星期五侦镇,千年一遇續(xù)古緣。 原創(chuàng)作品 (Original Article)
    一詩一境界閱讀 156評論 0 0
  • 上次說了關(guān)于這本書劇情走的方向织阅,這次我們就來聊聊文藝復(fù)興的故事吧 在圣多瑪斯的時代過后不久壳繁,原本團結(jié)一致的天主教...
    嘉愛佐鳴唯愛鼬神閱讀 363評論 0 1