CSS hack的原理:css
因爲不一樣的瀏覽器和瀏覽器各版本對CSS的支持及解析結果不同,以及CSS優先級對瀏覽器展示效果的影響,咱們能夠據此針對不一樣的瀏覽器情景來應用不一樣的CSS。html
條件註釋法:css3
只在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]-->
類內屬性前綴法:瀏覽器
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 |
_ | _colorcss3動畫 |
藍色 | Y | Y | N | Y | N | Y | N | Y | N | N |
# | #color | 紫色 | Y | Y | Y | Y | N | Y | N | Y | N | Y |
\0 | color:red\0 | 紅色 | N | N | N | N | Y | N | Y | N | Y | N |
\9\0 | color:red\9\0 | 粉色 | N | N | N | N | N | N | Y | N | Y | N |
!important | color:blue !important;color:green; | 棕色 | N | N | Y | N | Y | N | Y | N | Y | Y |
說明:在標準模式中佈局
選擇器前綴法:字體
選擇器前綴法是針對一些頁面表現不一致或者須要特殊對待的瀏覽器,在CSS選擇器前加上一些只有某些特定瀏覽器才能識別的前綴進行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有效
CSS hack利弊spa
通常狀況下,咱們儘可能避免使用CSS hack,可是有些狀況爲了顧及用戶體驗實現向下兼容,不得已才使用hack。好比因爲IE8及如下版本不支持CSS3,而咱們的項目頁面使用了大量 CSS3新屬性在IE9/Firefox/Chrome下正常渲染,這種狀況下若是不使用css3pie或htc或條件註釋等方法時,可能就得讓IE8- 的專屬hack出馬了。使用hack雖然對頁面表現的一致性有好處,但過多的濫用會形成html文檔混亂不堪,增長管理和維護的負擔。相信只要你們一塊兒努 力,少用、慎用hack,將來必定會促使瀏覽器廠商的標準愈來愈趨於統一,順利過渡到標準瀏覽器的主流時代。拋棄那些陳舊的IE hack,必將減輕咱們編碼的複雜度,少作無用功。
盒狀模型是CSS中重要的概念。盒狀模型中最重要的是內容,它是必備的,其餘的幾項都是可選的。 如上圖,盒狀模型有內至外的順序是:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>css盒子模型</title> <style> *{margin: 0;padding: 0;} /*清除瀏覽器默認的邊距*/ .block{width:300px;height:200px;padding:10px;border:10px solid red;background: #000;margin:20px 0 0 20px;} .box{height:100px;width: 200px;background: yellow;color: #ff4a00;border:5px solid green;} </style> </head> <body> <div class="block"> <div class="box">內容</div> </div> </body> </html>
我承認的理解:層疊指的是上級標籤的樣式會自動繼承到其全部下級標籤,如針對<body>設置的標籤選擇器所設的字體樣式會自動應用到<body>下的<p>中,除非<p>重寫了相關樣式將其覆蓋。
CSS語義化的命名是指用易於理解的名稱對html標籤附加的class或id命名,如對於頁面上方的<div>,可將其id設爲header;頁面下方的<div>設爲footer,能夠加強CSS的可維護性。
基本上層疊的意思就是「繼承」、「權重」、「覆蓋」,經過良好的層級命名更好的實現效果,更少的代碼,更多的功能。
問題1:不一樣瀏覽器的標籤默認的外邊距(margin)和內邊距(padding)不一樣
解決方案:*{margin:0;padding:0;}
備註:不建議通配符*,css遍歷也是有代價的(雖然說現代瀏覽器能夠忽略)。能夠寫全body,p,html,h1,h2,h3...{margin:0;padding:0;}
問題2:塊屬性標籤float後,又有橫行的margin狀況下,在IE6顯示margin比設置的大
解決方案:在float的標籤樣式控制中加入 display:inline;將其轉化爲行內屬性
備註:咱們最經常使用的就是div+CSS佈局了,而div就是一個典型的塊屬性標籤,橫向佈局的時候咱們一般都是用div+float實現的,橫向的間距設置若是用margin實現,這就是一個必然會碰到的兼容性問題。
問題3:圖片默認有間距
解決方案:使用float屬性爲img佈局,上下間距能夠設置vertical-align: middle;或者設置成display:block。
備註:由於img標籤是行內屬性標籤,因此只要不超出容器寬度,img標籤都會排在一行裏,可是部分瀏覽器的img標籤之間會有個間距。去掉這個間距使用float是正道。
問題4:CSS透明問題
解決方案:
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:opacity:0.6。
備註:最好兩個都寫,並將opacity屬性放在下面。
問題5:CSS圓角問題
解決方案:ie7如下版本不支持圓角,其餘瀏覽器都是加前綴例:FF(-moz-)
備註:隨着瀏覽器更新換代,圓角屬性都會被支持的;ie6-7,能夠用三角形實現(有興趣的能夠研究研究)
css3邊框:
css3背景:
css3文本效果:
css3字體:
css32D轉換:
css33D轉換:
css3過渡:
css3動畫:
animation:動畫設置
@keyframes:建立動畫規則
css3多列:
css3用戶界面: