CSS選擇器及優先順序 總結
阿新 • • 發佈:2018-12-25
一、優先順序
- 在屬性後面使用 !important 會覆蓋頁面內任何位置定義的元素樣式。
- 作為style屬性寫在元素內的樣式
- id選擇器
- 類選擇器
- 元素選擇器
- 萬用字元選擇器
- 瀏覽器自定義或繼承
總結排序:!important > 行內樣式 > ID選擇器 > 類選擇器 > 元素 > 萬用字元 > 繼承 > 瀏覽器預設屬性
(1) 同一級別中後寫的會覆蓋先寫的樣式
(2) 同一級別css引入方式不同,優先順序不同
總結排序:內聯(行內)樣式 > 內部樣式表 > 外部樣式表 > 匯入樣式(@import)。
對於選擇器優先順序,還可以通過計算權重值來比較。(請參見:狠狠戳我)
例1、
test.css檔案
#my{background:blue;}
html檔案
<link rel="stylesheet" type="text/css" href="./css/test.css">
<style>
/*這裡是內部樣式*/
#my{background:red;}
</style>
<span id="my">333</span>
執行結果:span最後為紅色。
說明css引入方式優先順序:內部樣式表 > 外部樣式表
例2、
<link rel="stylesheet" type="text/css" href="./css/test.css">
<style>#my{background:red;}</style>
<span id="my" style="background: yellow">333</span>
執行結果:span最後為黃色。
說明css引入方式優先順序:內聯(行內)樣式 > 內部樣式表 > 外部樣式表
二、選擇器
1、普通選擇器
選擇器 | eg | 描述 | |
---|---|---|---|
通用選擇器 | * | * | 選擇所有元素。 |
類選擇器 | .message | 選擇 class="intro" 的所有元素。 | |
id選擇器 | #id | #head | 選擇 id="firstname" 的所有元素。 |
元素選擇器 | el | p | 選擇所有 <p> 元素。 |
選擇器分組 | el,el | div,p | 選擇所有 <div> 元素和所有 <p> 元素。 |
後代選擇器 | el el | div p | 選擇 <div> 元素內部的所有 <p> 元素。 |
子元素選擇器 | el > el | div>p | 選擇 <div> 的第一子代的 所有<p> 元素。 |
相鄰兄弟選擇器 | el + el | div+p | 選擇與<div>同級且緊接在其後的第一個 <p> 元素 |
2、屬性選擇器
型別 | eg | 描述 |
---|---|---|
[target] | 選擇帶有 target 屬性所有元素 | |
[target=_blank] | 選擇 target="_blank" 的所有元素 | |
[title~=flower] | 選擇 title 屬性包含單詞 "flower" 的所有元素 | |
[lang¦=en] | 選擇 lang 屬性值以 "en" 開頭的所有元素。 | |
[attribute^=”value”] | [abc^=”def”] | 選擇 abc 屬性值以 “def” 開頭的所有元素 |
[attribute$=”value”] | [abc$=”def”] | 選擇 abc 屬性值以 “def” 結尾的所有元素 |
[attribute*=”value”] | [abc*=”def”] | 選擇 abc 屬性值中包含子串 “def” 的所有元素 |
3、偽類
型別 | eg | 描述 |
---|---|---|
:link | a:link | 選擇所有未被訪問的連結 |
a:visited | 選擇所有已被訪問的連結 | |
a:active | 選擇正在被點選的活動連結 | |
a:hover | 選擇滑鼠指標位於其上的連結 | |
input:focus | 選擇獲得焦點的 input 元素 | |
p:lang(it) | 選擇帶有以 "it" 開頭的 lang 屬性值的每個 <p> 元素 |
注:link、visited、active、hover的順序,為LoVe HAte
4、偽元素
型別 | eg | 描述 |
---|---|---|
p:before | 在每個 <p> 元素的內容之前插入內容 | |
p:after | 在每個 <p> 元素的內容之後插入內容 | |
p:first-letter | 選擇每個 <p> 元素的首字母 | |
p:first-line | 選擇每個 <p> 元素的首行 | |
p:first-child | 選擇屬於父元素的第一個子元素的每個 <p> 元素 |
p~ul | 選擇前面有 <p> 元素的每個 <ul> 元素。 | |
p:first-of-type | 選擇屬於其父元素的首個 <p> 元素的每個 <p> 元素。 | |
p:last-of-type | 選擇屬於其父元素的最後 <p> 元素的每個 <p> 元素。 | |
p:only-of-type | 選擇屬於其父元素唯一的 <p> 元素的每個 <p> 元素。 | |
p:only-child | 選擇屬於其父元素的唯一子元素的每個 <p> 元素。 | |
p:nth-child(2) | 選擇屬於其父元素的第二個子元素的每個 <p> 元素。 | |
p:nth-last-child(2) | 同上,從最後一個子元素開始計數。 | |
p:nth-of-type(2) | 選擇屬於其父元素第二個 <p> 元素的每個 <p> 元素。 | |
p:nth-last-of-type(2) | 同上,但是從最後一個子元素開始計數。 | |
p:last-child | 選擇屬於其父元素最後一個子元素每個 <p> 元素。 | |
:root | :root | 選擇文件的根元素。 |
p:empty | 選擇沒有子元素的每個 <p> 元素(包括文字節點)。 | |
#news:target | 選擇當前活動的 #news 元素。 | |
input:enabled | 選擇每個啟用的 <input> 元素。 | |
input:disabled | 選擇每個禁用的 <input> 元素 | |
input:checked | 選擇每個被選中的 <input> 元素。 | |
:not(p) | 選擇非 <p> 元素的每個元素。 | |
::selection | 選擇被使用者選取的元素部分。 |
三、一些注意
1、id選擇器
www3school中所說:“一個id選擇器 只能在一個文件中使用一次“,
但在css實踐中你會發現 兩個同樣的id都會生效。
<style>
span{margin: 5px;}
#my{background:red;}
</style>
<span id="my">666</span>
<span id="my">333</span>
執行結果為:
問:那為什麼官方文件只讓使用一次呢?
答:若使用兩次,第一影響就是不能通過W3的校驗。
在頁面顯示上,目前的瀏覽器css還都允許你犯這個錯誤,用多個相同ID“一般情況下”也能正常顯示。
但是當你需要用JavaScript通過id來控制這個div,那就會出現錯誤。因為js裡獲取DOM是通過getElementById,而如果頁面出現同一個id幾次,這樣就獲取不到了。所以id要有唯一性。
2、多類選擇器
類選擇器很簡單,那多類選擇器呢?好好看下面的例子及註釋。
www3school
例1:2個類
<style type="text/css">
.important {font-weight:bold;}
.warning {font-style:italic;}
/*.important和.warning之間不能有空格*/
/*.warning.important {background:silver;}顛倒順序執行結果不變*/
.important.warning {background:silver;}
</style>
<p class="important">This paragraph is very important.</p>
<p class="warning">This is a warning.</p>
<p class="important warning">This paragraph is a very important warning.</p>
執行結果:
例2:3個類
注:如果一個多類選擇器包含類名列表中沒有的一個類名,匹配就會失敗。
<style>
.important {font-weight:bold;}
.warning {font-style:italic;}
/*.important和.warning之間不能有空格*/
/*.warning.important {background:silver;}顛倒順序執行結果不變*/
.important.warning {background:silver;}
</style>
<p class="important">This paragraph is very important.</p>
<p class="warning">This is a warning.</p>
<p class="important urgent warning">This paragraph is a very important warning.</p>
執行結果:同上