CSS 創(chuàng)建
當讀到一個樣式表時,瀏覽器會根據(jù)它來格式化 HTML 文檔。
如何插入樣式表
插入樣式表的方法有三種:
外部樣式表
內部樣式表
內聯(lián)樣式
外部樣式表
當樣式需要應用于很多頁面時,外部樣式表將是理想的選擇。在使用外部樣式表的情況下,你可以通過改變一個文件來改變整個站點的外觀。每個頁面使用 <link> 標簽鏈接到樣式表。 <link> 標簽在(文檔的)頭部:
<head> <link rel="stylesheet" type="text/css" href="mystyle.css"> </head
瀏覽器會從文件 mystyle.css 中讀到樣式聲明,并根據(jù)它來格式文檔。
外部樣式表可以在任何文本編輯器中進行編輯。文件不能包含任何的 html 標簽。樣式表應該以 .css 擴展名進行保存。下面是一個樣式表文件的例子:
hr {color:sienna;} p {margin-left:20px;} body {background-image:url("../style/images/back40.gif");
不要在屬性值與單位之間留有空格。假如你使用 "margin-left: 20 px" 而不是 "margin-left: 20px" ,它僅在 IE 6 中有效,但是在 Mozilla/Firefox 或 Netscape 中卻無法正常工作。
內部樣式表
當單個文檔需要特殊的樣式時,就應該使用內部樣式表。你可以使用 <style> 標簽在文檔頭部定義內部樣式表,就像這樣:
<head> <style> hr {color:sienna;} p {margin-left:20px;} body {background-image:url("../style/images/back40.gif");} </style> </head
內聯(lián)樣式
由于要將表現(xiàn)和內容混雜在一起,內聯(lián)樣式會損失掉樣式表的許多優(yōu)勢。請慎用這種方法,例如當樣式僅需要在一個元素上應用一次時。
要使用內聯(lián)樣式,你需要在相關的標簽內使用樣式(style)屬性。Style 屬性可以包含任何 CSS 屬性。本例展示如何改變段落的顏色和左外邊距:
<p style="color:sienna;margin-left:20px">This is a paragraph.</p
多重樣式
如果某些屬性在不同的樣式表中被同樣的選擇器定義,那么屬性值將從更具體的樣式表中被繼承過來。
例如,外部樣式表擁有針對 h3 選擇器的三個屬性:
h3{ color:red; text-align:left; font-size:8pt; }
而內部樣式表擁有針對 h3 選擇器的兩個屬性:
h3{ text-align:right; font-size:20pt; }
假如擁有內部樣式表的這個頁面同時與外部樣式表鏈接,那么 h3 得到的樣式是:
color:red; text-align:right; font-size:20pt
即顏色屬性將被繼承于外部樣式表,而文字排列(text-alignment)和字體尺寸(font-size)會被內部樣式表中的規(guī)則取代。
多重樣式將層疊為一個
樣式表允許以多種方式規(guī)定樣式信息。樣式可以規(guī)定在單個的 HTML 元素中,在 HTML 頁的頭元素中,或在一個外部的 CSS 文件中。甚至可以在同一個 HTML 文檔內部引用多個外部樣式表。
層疊次序
當同一個 HTML 元素被不止一個樣式定義時,會使用哪個樣式呢?
一般而言,所有的樣式會根據(jù)下面的規(guī)則層疊于一個新的虛擬樣式表中,其中數(shù)字 4 擁有最高的優(yōu)先權。
瀏覽器缺省設置
外部樣式表
內部樣式表(位于 <head> 標簽內部)
內聯(lián)樣式(在 HTML 元素內部)
因此,內聯(lián)樣式(在 HTML 元素內部)擁有最高的優(yōu)先權,這意味著它將優(yōu)先于以下的樣式聲明: 標簽中的樣式聲明,外部樣式表中的樣式聲明,或者瀏覽器中的樣式聲明(缺省值)。
提示:如果你使用了外部文件的樣式在 <head>中也定義了該樣式,則內部樣式表會取代外部文件的樣式。
多重樣式優(yōu)先級深入理解
優(yōu)先級用于瀏覽器是通過判斷哪些屬性值與元素最相關以決定并應用到該元素上的。
優(yōu)先級僅由選擇器組成的匹配規(guī)則決定的。
優(yōu)先級就是分配給指定的CSS聲明的一個權重,它由匹配的選擇器中的每一種選擇器類型的數(shù)值決定。
多重樣式優(yōu)先級順序
下列是一份優(yōu)先級逐級增加的選擇器列表,其中數(shù)字 7 擁有最高的優(yōu)先權:
通用選擇器(*)
元素(類型)選擇器
類選擇器
屬性選擇器
偽類
ID 選擇器
內聯(lián)樣式
!important 規(guī)則例外
當 !important 規(guī)則被應用在一個樣式聲明中時,該樣式聲明會覆蓋CSS中任何其他的聲明,無論它處在聲明列表中的哪里。盡管如此,!important規(guī)則還是與優(yōu)先級毫無關系。使用 !important 不是一個好習慣,因為它改變了你樣式表本來的級聯(lián)規(guī)則,從而使其難以調試。
一些經(jīng)驗法則:
Always 要優(yōu)化考慮使用樣式規(guī)則的優(yōu)先級來解決問題而不是 !important
Only 只在需要覆蓋全站或外部 css(例如引用的 ExtJs 或者 YUI )的特定頁面中使用 !important
Never 永遠不要在全站范圍的 css 上使用 !important
Never 永遠不要在你的插件中使用 !important
權重計算:
以下是對于上圖的解釋:
內聯(lián)樣式表的權值最高 1000ID 選擇器的權值為 100Class 類選擇器的權值為 10HTML 標簽選擇器的權值為 1
利用選擇器的權值進行計算比較,em 顯示藍色,我們提供了詳細的代碼參考:
實例
<html> <head> <style type="text/css"> #redP p { /* 權值 = 100+1=101 */ color:#F00; /* 紅色 */ } #redP .red em { /* 權值 = 100+10+1=111 */ color:#00F; /* 藍色 */ } #redP p span em { /* 權值 = 100+1+1+1=103 */ color:#FF0;/*黃色*/ } </style> </head> <body> <div id="redP"> <p class="red">red <span><em>em red</em></span> </p> <p>red</p> </div> </body> </html>
運行實例 ?
點擊 "運行實例" 按鈕查看在線實例
CSS 優(yōu)先級法則:
選擇器都有一個權值,權值越大越優(yōu)先;
當權值相等時,后出現(xiàn)的樣式表設置要優(yōu)于先出現(xiàn)的樣式表設置;
創(chuàng)作者的規(guī)則高于瀏覽者:即網(wǎng)頁編寫者設置的CSS 樣式的優(yōu)先權高于瀏覽器所設置的樣式;
繼承的CSS 樣式不如后來指定的CSS 樣式;
在同一組屬性設置中標有"!important"規(guī)則的優(yōu)先級最大;
實例
<html> <head> <style type="text/css"> #redP p{ /*兩個color屬性在同一組*/ color:#00f !important; /* 優(yōu)先級最大 */ color:#f00; } </style> </head> <body> <div id="redP"> <p>color</p> <p>color</p> </div> </body> </html>
運行實例 ?點擊 "運行實例" 按鈕查看在線實例
結果:在Firefox 下顯示為藍色;在IE 6 下顯示為紅色;
這里引入一張流行的CSS權重關系圖: