1. 程式人生 > 實用技巧 >一、(7)CSS常用樣式

一、(7)CSS常用樣式

CSS常用樣式

CSS hack

  由於不同廠商的流覽器或某瀏覽器的不同版本,對CSS的支援、解析不一樣,導致在不同瀏覽器的環境中呈現出不一致的頁面展現效果。這時,我們為了獲得統一的頁面效果,就需要針對不同的瀏覽器或不同版本寫特定的CSS樣式,我們把這個針對不同的瀏覽器/不同版本寫相應的CSS code的過程,叫做CSS hack。

CSS hack的原理

  由於不同的瀏覽器和瀏覽器各版本對CSS的支援及解析結果不一樣,以及CSS優先順序對瀏覽器展現效果的影響,我們可以據此針對不同的瀏覽器情景來應用不同的CSS。

CSS hack分類

屬性字首法(即類內部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 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]-->

CSS hack方式二:CSS屬性字首法

  屬性字首法是在CSS樣式屬性名前加上一些只有特定瀏覽器才能識別的hack字首,以達到預期的頁面展現效果。
IE瀏覽器各版本 CSS hack 對照表

其中,S表示Standards Mode,即標準模式;Q表示Quirks Mode,即相容模式。
說明:在標準模式中

  • “-″減號是IE6專有的hack
  • “\9″ IE6/IE7/IE8/IE9/IE10都生效
  • “\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack
  • “\9\0″ 只對IE9/IE10生效,是IE9/10的hack

例項:

    <style type="text/css"> 
    body:nth-of-type(1) .iehack{ 
    color: #F00;/* 對Windows IE9/Firefox 7+/Opera 10+/所有Chrome/Safari的CSS hack ,選擇器也適用幾乎全部Mobile/Linux/Mac browser*/ 
    } 
    .demo1,.demo2,.demo3,.demo4{ 
    width:100px; 
    height:100px; 
    } 
    .hack{ 
    /*demo1 注意順序,否則IE6/7下可能無法正確顯示,導致結果顯示為白色背景*/ 
    background-color:red; /* All browsers */ 
    background-color:blue !important;/* All browsers but IE6 */ 
    *background-color:black; /* IE6, IE7 */ 
    +background-color:yellow;/* IE6, IE7*/ 
    background-color:gray\9; /* IE6, IE7, IE8, IE9, IE10 */ 
    background-color:purple\0; /* IE8, IE9, IE10 */ 
    background-color:orange\9\0;/*IE9, IE10*/ 
    _background-color:green; /* Only works in IE6 */ 
    *+background-color:pink;
    }
        /*可以通過javascript檢測IE10,然後給IE10的<html>標籤加上class=”ie10″ 這個類 */
    .ie10 #hack{ 
    color:red; /* Only works in IE10 */ 
    } 
    
    /*demo2*/ 
    .iehack{ 
    /*該demo例項是用於區分標準模式下ie6~ie9和Firefox/Chrome的hack,注意順序 
    IE6顯示為:綠色, 
    IE7顯示為:黑色, 
    IE8顯示為:紅色, 
    IE9顯示為:藍色, 
    Firefox/Chrome顯示為:橘色, 
    (本例IE10效果同IE9,Opera最新版效果同IE8) 
    */ 
    background-color:orange; /* all - for Firefox/Chrome */ 
    background-color:red\0; /* ie 8/9/10/Opera - for ie8/ie10/Opera */ 
    background-color:blue\9\0; /* ie 9/10 - for ie9/10 */ 
    *background-color:black; /* ie 6/7 - for ie7 */ 
    _background-color:green; /* ie 6 - for ie6 */ 
    } 
    
    /*demo3 
    例項是用於區分標準模式下ie6~ie9和Firefox/Chrome的hack,注意順序 
    IE6顯示為:紅色, 
    IE7顯示為:藍色, 
    IE8顯示為:綠色, 
    IE9顯示為:粉色, 
    Firefox/Chrome顯示為:橘色, 
    (本例IE10效果同IE9,Opera最新版效果也同IE9為粉色) 
    */ 
    .element { 
    background-color:orange; /* all IE/FF/CH/OP*/ 
    } 
    .element { 
    *background-color: blue; /* IE6+7, doesn't work in IE8/9 as IE7 */ 
    } 
    .element { 
    _background-color: red; /* IE6 */ 
    } 
    .element { 
    background-color: green\0; /* IE8+9+10 */ 
    } 
    :root .element { background-color:pink\0; } /* IE9+10 */ 
    
    /*demo4*/ 
    /* 
     
    該例項是用於區分標準模式下ie6~ie10和Opera/Firefox/Chrome的hack,本例特別要注意順序 
    IE6顯示為:橘色, 
    IE7顯示為:粉色, 
    IE8顯示為:黃色, 
    IE9顯示為:紫色, 
    IE10顯示為:綠色, 
    Firefox顯示為:藍色, 
    Opera顯示為:黑色, 
    Safari/Chrome顯示為:灰色, 
     
    */ 
    .hacktest{ 
    background-color:blue; /* 都識別,此處針對firefox */ 
    background-color:red\9; /*all ie*/ 
    background-color:yellow\0; /*for IE8/IE9/10 最新版opera也認識*/ 
    +background-color:pink; /*for ie6/7*/ 
    _background-color:orange; /*for ie6*/ 
    } 
       @media screen and (min-width:0){ 
    .hacktest {background-color:black\0;} /*opera*/ 
    } 
    @media screen and (min-width:0) {     .hacktest { background-color:purple\9; }/* for IE9/IE10 PS:國外有些習慣常寫作\0,根本沒考慮Opera也認識\0的實際 */ 
    } 
    @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { 
    .hacktest { background-color:green; } /* for IE10+ 此寫法可以適配到高對比度和預設模式,故可覆蓋所有ie10的模式 */ 
    } 
    @media screen and (-webkit-min-device-pixel-ratio:0){ .hacktest {background-color:gray;} } /*for Chrome/Safari*/ 
   /* #963棕色 :root is for IE9/IE10, 優先順序高於@media, 慎用!如果二者合用,必要時在@media樣式加入 !important 才能區分IE9和IE10 */ 
/* 
:root .hacktest { background-color:#963\9; } 
*/ 
</style>

CSS hack方式三:選擇器字首法

  選擇器字首法是針對一些頁面表現不一致或者需要特殊對待的瀏覽器,在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; }}

常用CSS樣式

  • 1. CSS製作三角符號
  • 2. CSS 精靈(sprites)
  • 3. CSS製作彈出提示框及背景遮罩層
  • 4. CSS的定位技巧(子絕父相)
  • 5. CSS佈局(兩列,三列)
  • 6. CSS2實現圓角矩形

CSS常見事項

  • 1) ul 標籤在 Mozilla 中預設是有 padding 值的,而在 IE 中只有 margin 值。
  • 2) 同一個的 class 選擇符可以在一個文件中重複出現,而 id 選擇符卻只能出現一次;對一個標籤同時使用 class和 id 進行 CSS 定義,如果定義有重複,id 選擇符做的定義有效。
  • 3) 如果一組要巢狀的標籤之間需要些間距的話,那就外面標籤的 padding 屬性,而不要去定義位於裡面的標籤的 margin
  • 4) li 標籤前面的圖示推薦使用 background-image 而不是 list-style-image
  • 5) 在給你的標籤瘋狂加選擇符的時候,別忘了在 CSS 裡給選擇符加上註釋。 等你以後修改你的 CSS 的時候才知道每個選擇符代表的意思。
  • 6) 如果你給一個標籤設定了一個深色調的背景圖片和亮色調的文字效果。建議這個時候給你的標籤再設定一個深色調的背景顏色。
  • 7) 定義連結的四種狀態要注意先後順序: Link Visited Hover Active
  • 8) 與內容無關的圖片請使用 background
  • 9) 定義顏色可以縮寫 #8899FF = #89F
  • 10) table 在某些方面比其它標籤表現的要好的多。通常在需要列對齊的地方用它。
  • 11) 完美的單象素外框線表格 table {border-collapse:collapse;} td {border:#000 solid 1px;}
  • 12) margin 取負值可以在標籤使用絕對定位的時候起到相對定位的作用,在頁面居中顯示時,使用絕對定位的層可使用 left:50% 這個屬性。 再使用 margin 的負值來實現。
  • 13) 固定寬度漢字截斷:overflow:hidden;text-overflow:ellipsis;white-space:nowrap;(不過只能處理文字在一行上的截斷,不能處理多行。)
  • 14) 固定寬度漢字(詞)折行:table-layout:fixed; word-break:break-all;
  • 15) <div style="cursor: help" title="輸入要提示的文字">文字</div> 用滑鼠放在前面的文字上看效果。這個效果在國外的很多網站都可以看到,而國內的少又少。
  • 16) 圖片設為半透明:.halfalpha { background:rgba(0,0,0,0.5); filter: Alpha(Opacity=50); opacity:0.5;}
  • 17) FLASH透明: 在 <object>標籤結束前輸入 <param name="wmode" value="transparent">
  • 18) 我們在做網頁時常用到把滑鼠放在圖片上會出現圖片變亮的效果,可以用圖片替換的技巧,也可以用如下的濾鏡。

程式碼:

.pictures img { filter: alpha(opacity=50); opacity:0.5;}
.pictures img:hover { filter: alpha(opacity=100); opacity:1;}

CSS常用命名

css常用命名 頁面結構常用命名 導航命名 功能命名
頭部:header
內容:content/container
尾:footer
導航:nav
側欄:sidebar
欄目:column
頁面外圍控制整體佈局寬度:wrapper
左右中:left right center
登入條:loginbar
標誌:logo
廣告:banner
頁面主體:main
熱點:hot
新聞:news
下載:download
子導航:subnav
選單:menu
子選單:submenu
搜尋:search
友情連結:friendlink
頁尾:footer
版權:copyright
滾動:scroll
標籤頁:tab
文章列表:list
提示資訊:msg
小技巧:tips
欄目標題:title
加入:joinus
指南:guild
服務:service
註冊:regsiter
狀態態:status
投票:vote
合作伙伴:partner
容器: container
頁頭:header
內容:content/container
頁面主體:main
頁尾:footer
導航:nav
側欄:sidebar
欄目:column
頁面外圍控制整體佈局寬度:wrapper
左右中:left right center
導航:nav
主導航:mainbav
子導航:subnav
頂導航:topnav
邊導航:sidebar
左導航:leftsidebar
右導航:rightsidebar
選單:menu
子選單:submenu
標題: title
摘要: summary
標誌:logo
廣告:banner
登陸:login
登入條:loginbar
註冊:regsiter
搜尋:search
功能區:shop
標題:title
加入:joinus
關於我們:aboutus
狀態:status
按鈕:btn
滾動:scroll
標籤頁:tab
文章列表:list
提示資訊:msg
當前的: current
小技巧:tips
圖示: icon
註釋:note
指南:guild
服務:service
熱點:hot
新聞:news
下載:download
投票:vote
合作伙伴:partner
友情連結:link
版權:copyright

命名注意事項

  • 1)一律小寫;
  • 2)儘量用英文;
  • 3)不加中槓和下劃線;
  • 4)儘量不縮寫,除非一看就明白的單詞。