所謂css的繼承是指被包在內部的標籤將擁有外部標籤的樣式性質。繼承特性最典型的
應用通常發揮在整個網頁的樣式預設,需要指定為其它樣式的部份設定在個別元素裡即
可。這項特性可以給網頁設計者提供更理想的發揮空間。但同時繼承也有很多規則,應
用的時候容易讓人迷惑。
css是層疊樣式表(cascading style sheets)的簡稱,它的規範代表了網際網路歷史上一
個獨特的發展階段。現在對於從事網頁製作的朋友來說,很少沒有聽說過css了吧,因
為在製作網頁過程中我們經常需要用到。
css允許我們為文件設定更為豐富且便於修改的外觀,可以減輕網頁設計者的工作負
擔。這裡我們主要想和朋友們一起對css的繼承性和特殊性進行一點深入的**。
一、繼承
css的乙個主要特徵就是繼承,它是依賴於祖先-後代的關係的。繼承是一種機制,它允
許樣式不僅可以應用於某個特定的元素,還可以應用於它的後代。例如乙個body定義
了的顏色值也會應用到段落的文字中。下面舉例說明:
樣式定義:
body
應用舉例**:
css的層疊和繼承深入**
這段**的應用結果是:「css的層疊和繼承深入**」這段話是紅顏色的,「層疊和
繼承」由於應用了strong元素,所以是粗體。這很符合製作者的意圖,也是為什麼繼承
是css的一部分的原因。
二、css繼承的侷限性
在css中,繼承是一種非常自然的行為,我們甚至不需要考慮是否能夠這樣去做,但是
繼承也有其侷限性。
首先,有些屬性是不能繼承的。這沒有任何原因,只是因為它就是這麼設定的。舉個例
承性。多數邊框類屬性,比如象padding(補白),margin(邊界),背景和邊框的屬性都
是不能繼承的。
三、繼承中容易引起的錯誤
有時候繼承也會帶來些錯誤,比如說下面這條css定義:
body
在有些瀏覽器中這句定義會使除**之外的文字變成藍色。從技術上來說,這是不正確
的,但是它確實存在。所以我們經常需要借助於某些技巧,比如將css定義成這樣:
body,table,th,td
這樣**內的文字也會變成藍色。
四、多種樣式混合應用
既然有了繼承性,那麼在樣式表中的應用上可能會有些讀者搞不清,多個樣式表同時應
用到乙個物件上會發生什麼情形呢?先舉個簡單的例子:
樣式定義:
h1應用舉例**:
的是紅色。這是因為兩條規則的特殊性不一樣,css規則必須這樣進行處理。
樣式表中的特殊性描述了不同規則的相對權重,它的基本規則是:
統計選擇符中的id屬性個數。
統計選擇符中的class屬性個數。
統計選擇符中的html標記名格式。
最後,按正確的順序寫出三個數字,不要加空格或逗號,得到乙個三位數。( 注意,你需
要將數字轉換成乙個以三個數字結尾的更大的數)。相應於選擇符的最終數字列表可以很
容易確定較高數字特性凌駕於較低數字的。
以下是乙個按特性分類的選擇符的列表:
h1 特性值為:1p em 特性值為:2
p.bright 特性值為:11
p.bright em.dark 特性值為:22
#id316 特性值為:100
從上表我們可以看出#id316具有更高的特殊性,因而它有更高的權重。當有多個規則都
能應用於同乙個元素時,權重越高的樣式將被優先採用。
五、css繼承的優先順序問題
上面我們討論了css的繼承性和特殊性,在特殊性的框架下,被繼承的特性值為0,這就
意味著任何顯示宣告的規則將會覆蓋其繼承樣式。因此,不管一條規則具有多高的權
重,如果沒有其他規則能應用於這個繼承元素,那麼它也只是個被繼承的規則而已,舉
例說明。
樣式定義:
bodyli ul.white
應用舉例**:
有些讀者可能認為除包含.white類的列表項顯示為白色外,其餘所有的列表項都應該是
灰色的。然而情況並非如此。
為什麼會出現這樣的情況呢?因為帶選擇符li的顯式宣告的權值比從ul.white規則那裡
繼承過來的權值要大,所以每個列表項都是灰色的。
可能有些地方不是很好理解,大家多思考一下就會明白,平時在應用樣式表的時候多留
意思考一下。
下面我們再來看乙個例子,若給定如下所示的標記,則em強調文字將會是灰色的,而非
黑色,因為em規則的權值要大於從h1元素繼承來的權值:
樣式定義:
h1#id316 特性值為:101em 特性值為:1
應用舉例**:
這是因為第二條em規則的特性值(1)要比被繼承的特性值(0)要大,事實上規定
h1#id316的原始特性值(101)對其繼承值沒有影響,仍舊為0。
小技巧:
如果想讓h1始終為黑色,而em文字在其他情況下紅色,那麼下面的樣式表設定就是乙個
很好的方法:
h1,h1 em 特性值為:1,2em 特性值為:1
給定這個規則後,除在h1元素內的任何em文字就都是紅色,而h1內的em文字仍舊為黑
色,由於其選擇符分組,在第一條規則中就有兩條有效的規則(一條是對h1的,另一條是
對h1 em的)也就有兩個特性值--每條規則乙個。
上面我們討論了多個樣式規則同時應用於同一物件時,哪個規則會被最終應用的一些情
況,可能有些細心的讀者會說,那style元素呢?對啊,html**中可以直接應用內聯樣
式style的嘛。那麼它的特性值如何呢?
回答是這樣的:帶有style的元素在css1下其特性值為100,儘管類似於#id316這樣的
id選擇符的特性值也為100,但在實際應用中,style這一權值會更高一些,因為style元
素的值看起來要比多數普通規則的權值大。所以我們可以看出內聯樣式具有高的特性
值,具體的例子我們就不舉了,大家可以自己試試。
六、人為定義css繼承優先順序
在製作網頁的過程中,我們可能想要設定某個規則比其他的規則更重要,css中允許這
樣設定,它們被稱為重要規則(important rule)。這是根據其宣告的方式和它們的自然
屬性來命名的。通過在一條規則的分號前插入!important這樣乙個短語來標記一條重要
規則,比如說:
顏色值red被標記為!important,而背景色white未被標記,如果需要二條規則都是重要
的話,那麼每條規則都需要標上!important。
正確地放置!important的位置是很重要的,否則整條規則將為無效。!important總是放
在規則宣告的最後,在分號之前。
標記為!important的規則具有最高的權值,也就是說他沒有具體的特性值,但是比其他
的權值都要大。需要注意的是,雖然製作者定義的樣式比使用者定義的樣式具有更高權值
時,但!important規則恰恰相反:重要的使用者定義規則要比製作者定義的樣式具有更高
權值,即使是標記為!important的重要規則也是如此。
看了這麼多文字介紹後,我們來舉個例子看一下:
樣式定義:
h1
應用舉例**:
應用舉例效果:!important規則會覆蓋內聯style屬性的內容,所以結果文字是灰色的而
不是黑色的。
還有最後一種需要考慮的情況:繼承值總是具有特性值0的特點,即使是從帶有!
important的規則繼承的值也是如此,在匹配重要規則的元素之外,重要性也會隨之消
失,這點是需要我們特別注意的
css的繼承性
一 css的繼承性 1 文字屬性 屬性 說明vertical align 垂直文字對齊 text decoration 規定新增到文字的裝飾 text shadow 文字陰影效果 white space 空白符的處理 unicode bidi 設定文字的方向 2 盒子模型的屬性 屬性 說明width...
CSS的繼承性
css的某些樣式是具有繼承性的,那麼什麼是繼承呢?繼承是一種規則,它允許樣式不僅應用於某個特定 html 標籤元素,而且應用於其後代。所有的css語句都是基於各個標籤的繼承關係的。但是並不是所有的屬性都能被繼承,一般的字型屬性都是能繼承的,不能繼承的例如邊框屬性 注意 孩子能繼承父親屬性,但是父親不...
css的繼承性
在物件導向語言都會存在繼承的概念,在物件導向語言中,繼承的特點 繼承了父類的屬性和方法。那麼我們現在主要研究css,css就是在設定屬性的。不會牽扯到方法的層面。css的繼承 就是給父級設定一些屬性,子級繼承了父級的該屬性,這就是我們的css中的繼承。官方解釋,繼承是一種規則,它允許樣式不僅應用於特...