史上最全的CSShack方式一覽
做前端多年,雖然不是經常需要hack,但是我們經常會遇到各瀏覽器表現不一致的情況。基於此,某些情況我們會極不情願的使用這個不太友好的方式來達到大家要求的頁面表現。我個人是不太推薦使用hack的,要知道一名好的前端,要儘可能不使用hack的情況下實現需求,做到較好的使用者體驗。可是啊,現實太殘酷,瀏覽器廠商之間歷史遺留的問題讓我們在目標需求下不得不向hack妥協,雖然這只是個別情況。今天,結合自己的經驗和理解,做了幾個demo把IE6~IE10和其他標準瀏覽器的CSS hack做一個總結,也許本文應該是目前最全面的hack總結了吧。
什麼是CSS hack
由於不同廠商的流覽器或某瀏覽器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),對CSS的支援、解析不一樣,導致在不同瀏覽器的環境中呈現出不一致的頁面展現效果。這時,我們為了獲得統一的頁面效果,就需要針對不同的瀏覽器或不同版本寫特定的CSS樣式,我們把這個針對不同的瀏覽器/不同版本寫相應的CSS code的過程,叫做CSS hack!
CSS hack的原理
由於不同的瀏覽器和瀏覽器各版本對CSS的支援及解析結果不一樣,以及CSS優先順序對瀏覽器展現效果的影響,我們可以據此針對不同的瀏覽器情景來應用不同的CSS。
CSS hack分類
CSS Hack大致有3種表現形式,CSS屬性字首法、選擇器字首法以及IE條件註釋法(即HTML頭部引用if IE)Hack,實際專案中CSS Hack大部分是針對IE瀏覽器不同版本之間的表現差異而引入的。
-
屬性字首法(即類內部Hack):例如 IE6能識別下劃線”_”和星號” * “,IE7能識別星號” * “,但不能識別下劃線”_”,IE6~IE10都認識”9″,但firefox前述三個都不能認識。
-
選擇器字首法(即選擇器Hack):例如 IE6能識別*html .class{},IE7能識別*+html .class{}或者*:first-child+html .class{}。
-
IE條件註釋法(即HTML條件註釋Hack):針對所有IE(注:IE10+已經不再支援條件註釋): <!–[if IE]>IE瀏覽器顯示的內容 <![endif]–>,針對IE6及以下版本: <!–[if lt IE 6]>只在IE6-顯示的內容 <![endif]–>。這類Hack不僅對CSS生效,對寫在判斷語句裡面的所有程式碼都會生效。
CSS hack書寫順序,一般是將適用範圍廣、被識別能力強的CSS定義在前面。
CSS hack方式一:條件註釋法
這種方式是IE瀏覽器專有的Hack方式,微軟官方推薦使用的hack方式。舉例如下
只在IE下生效 <!--[if IE]> 這段文字只在IE瀏覽器顯示 <![endif]--> 只在IE6下生效 <!--[if IE 6]> 這段文字只在IE6瀏覽器顯示 <![endif]--> 只在IE6以上版本生效 <!--[if gte IE 6]> 這段文字只在IE6以上(包括)版本IE瀏覽器顯示 <![endif]--> 只在IE8上不生效 <!--[if ! IE 8]> 這段文字在非IE8瀏覽器顯示 <![endif]--> 非IE瀏覽器生效 <!--[if !IE]> 這段文字只在非IE瀏覽器顯示 <![endif]-->
CSS hack方式二:類內屬性字首法
屬性字首法是在CSS樣式屬性名前加上一些只有特定瀏覽器才能識別的hack字首,以達到預期的頁面展現效果。
IE瀏覽器各版本 CSS hack 對照表
hack | 寫法 | 例項 | IE6(S) | IE6(Q) | IE7(S) | IE7(Q) | IE8(S) | IE8(Q) | IE9(S) | IE9(Q) | IE10(S) | IE10(Q) |
* | *color | 青色 | Y | Y | Y | Y | N | Y | N | Y | N | Y |
+ | +color | 綠色 | Y | Y | Y | Y | N | Y | N | Y | N | Y |
– | -color | 黃色 | Y | Y | N | N | N | N | N | N | N | N |
_ | _color | 藍色 | Y | Y | N | Y | N | Y | N | Y | N | N |
# | #color | 紫色 | Y | Y | Y | Y | N | Y | N | Y | N | Y |
相關文章
- 史上最全的CSS hack方式一覽CSS
- [轉]史上最全的CSS hack方式一覽CSS
- CSShack瀏覽器相容一覽表CSS瀏覽器
- 各種瀏覽器csshack瀏覽器CSS
- Edge瀏覽器的前世今生 史上最全Edge瀏覽器介紹瀏覽器
- 史上最全的SQL Server複習筆記一SQLServer筆記
- CSS實現水平垂直居中的1010種方式(史上最全)CSS
- 史上最全的Websocket入門教程Web
- 史上最全的WebSettings說明Web
- 史上最全的MYSQL備份方法MySql
- 史上最全webview詳解WebView
- 史上最全遊戲策劃入門乾貨(一)遊戲
- 史上最全的微服務知識科普微服務
- 史上最全的Vue開發規範Vue
- 史上最全的IntelliJIdea快捷鍵IntelliJIdea
- 史上最全的Chrome使用技巧集錦Chrome
- 史上最全的谷歌公司那些黑科技谷歌
- 史上最全SQL優化方案SQL優化
- 史上最全的ASP.NET MVC路由配置ASP.NETMVC路由
- 史上最全的 Java 新手問題彙總Java
- 史上最全SQL最佳化方案SQL
- Android史上最全面試題Android面試題
- 演算法排序:史上最全2演算法排序
- 史上最全WebView使用,附送Html5Activity一份WebViewHTML
- 史上最全的Rxjava2講解(使用篇)RxJava
- 驚!史上最全的select加鎖分析(Mysql)MySql
- 史上最全的Java進階書籍推薦Java
- 4種實現WordPress表格的方法,史上最全!
- 史上總結最全的Linux家族家譜Linux
- 史上最全中文分詞工具整理中文分詞
- 史上最全 XMind Mac/win快捷鍵大全Mac
- 史上最全網站降權原因解析網站
- CSSHack 選擇器CSS
- 吐血總結|史上最全的MySQL學習資料!!MySql
- 史上最全的邊緣計算應用場景
- 史上最全的 Python 3 型別轉換指南Python型別
- 史上最全的大廠Mysql面試題在這裡!MySql面試題
- 史上最全、最詳細的 kafka 學習筆記!Kafka筆記