首頁  >  文章  >  web前端  >  CSS樣式的覆蓋規則

CSS樣式的覆蓋規則

不言
不言原創
2018-06-12 15:51:042510瀏覽

下面為大家帶來一篇CSS樣式覆蓋規則全面了解。內容還挺不錯的,現在就分享給大家,也給大家做個參考。

大家都知道CSS的全名叫做“層疊樣式表”,但估計很多人都不知道“層疊”二字的意思。其實,「層疊」指的就是樣式的覆蓋,當一個元素被運用上多種樣式,並且出現重名的樣式屬性時,瀏覽器必須從中選擇一個屬性值,這個過程就叫「層疊」。樣式覆蓋(這種叫法更大眾化些)遵循一定的規則,之前我對這個規則一直似懂非懂的,直到這幾天看了”CSS: The Missing Manual”,才豁然開朗。以下是我的一些學習筆記。

首先要先明確的是,很多情況都會導致一個元素被運用上多種樣式,樣式所覆蓋的規則也需要依照不同的情況來定,具體規則如下。

規則一:由於繼承而發生樣式衝突時,最近祖先獲勝。

CSS的繼承機制使得元素可以從包含它的祖先元素中繼承樣式,考慮下面這種情況:

<html>
<head>
<title>rule 1</title>
<style>
body {color:black;}   
p {color:blue;}   
</style>
</head>
<body>
    <p>welcome to <strong>gaodayue的网络日志</strong></p>
</body>
</html>

strong分別從body和p中繼承了color屬性,但由於p在繼承樹上離strong更近,因此strong中的文字最終繼承p的藍色。

規則二:當繼承的樣式和直接指定的樣式衝突時,直接指定的樣式獲勝。

在上面的例子中,假如也指定了strong元素的樣式,如:

strong {color:red;}

那麼根據規則二,strong中的文字最終顯示為紅色。

規則三:直接指定的樣式發生衝突時,樣式權值高者獲勝。

樣式的權值取決於樣式的選擇器,權值定義如下表。

CSS選擇器權值

#標籤選擇器1
類別選擇器10
ID選擇器100
內嵌樣式1000
偽元素(:first-child等) 1
偽類(:link等) 10

#可以看到,內聯樣式的權值>>ID選擇器>>類選擇器>>標籤選擇器,除此以外,後代選擇器的權值為每項權值之和,例如”#nav .current a”的權值為100 10 1 = 111。

規則四:樣式權值相同時,後者獲勝。

考慮下面這種情況

<p
class="byline">Written   
 by <a
class="email"
href="mailto:jean@cosmofarmer.   
 com">Jean   
 Graine de Pomme</a></p>
12 .byline   
 a {color:red;}p   
 .email {color:blue;}

「.byline a」與」p .email」都直接指定了上面的a元素,且權值都為11 ,依照規則四,最終顯示藍色。

由於樣式表可以是外部的,也可以是內部的,規則四提醒我們要注意外部樣式表引入的順序(及2cdf5bf648cf2f33323966d7f58a7f3f元素的順序),以及外部樣式表與內部樣式表的出現位置。一般來說,內部樣式表出現在所有外部樣式表的引入之後,一般是在9c3bca370b5104690d9ef395f2c5f8d1之前。

規則五:!important的樣式屬性不被覆寫。

!important可以看做是萬不得已的時候,打破上述四個規則的」金手指」。如果你一定要採用某個樣式屬性,而不讓它被覆蓋的,可以在屬性值後面加上!important,以規則四的例子為例,”.byline a {color:red !important;}”可以強行使連結顯示紅色。大多數情況下都可以透過其他方式來控制樣式的覆蓋,不能濫用!important。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

CSS如何實現垂直水平居中

#CSS的變數variable的解析

#

以上是CSS樣式的覆蓋規則的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn