對CSS選擇器的一些學習總結
1.選擇器的分組和繼承
分組
你可以對選擇器進行分組,這樣,被分組的選擇器就可以分享相同的宣告。用逗號將需要分組的選擇器分開。在下面的例子中,我們對所有的標題元素進行了分組。所有的標題元素都是綠色的。
h1,h2,h3,h4,h5,h6 {
color: green;
}
繼承
根據 CSS,子元素從父元素繼承屬性。但是當你不希望子元素繼承父元素的屬性時該怎麼做呢?例如,在下方程式碼片段中你不希望 “Verdana, sans-serif” 字型被所有的子元素繼承,又該怎麼做呢?比方說,你希望段落的字型是 Times。沒問題。建立一個針對 p 的特殊規則,這樣它就會擺脫父元素的規則:
body {
font-family: Verdana, sans-serif;
}
td, ul, ol, ul, li, dl, dt, dd {
font-family: Verdana, sans-serif;
}
p {
font-family: Times, "Times New Roman", serif;
}
2.派生選擇器
通過依據元素在其位置的上下文關係來定義樣式,你可以使標記更加簡潔。
在 CSS1 中,通過這種方式來應用規則的選擇器被稱為上下文選擇器 (contextual selectors),這是由於它們依賴於上下文關係來應用或者避免某項規則。在 CSS2 中,它們稱為派生選擇器,但是無論你如何稱呼它們,它們的作用都是相同的。
派生選擇器允許你根據文件的上下文關係來確定某個標籤的樣式。通過合理地使用派生選擇器,我們可以使 HTML 程式碼變得更加整潔。
比方說,你希望列表中的 strong 元素變為斜體字,而不是通常的粗體字,可以這樣定義一個派生選擇器:
li strong {
font-style: italic;
font-weight: normal;
}
<p><strong>我是粗體字,不是斜體字,因為我不在列表當中,所以這個規則對我不起作用</strong></p>
<ol>
<li><strong>我是斜體字。這是因為 strong 元素位於 li 元素內。</strong></li>
<li>我是正常的字型。</li>
</ol>
3.偽類選擇器
一個 CSS 偽類(pseudo-class) 是一個以冒號(:)作為字首,被新增到一個選擇器末尾的關鍵字,當你希望樣式在特定狀態下才被呈現到指定的元素時,你可以往元素的選擇器後面加上對應的偽類(pseudo-class)。你可能希望某個元素在處於某種狀態下呈現另一種樣式,例如當滑鼠懸停在元素上面時,或者當一個複選框被禁用或被勾選時,又或者當一個元素是它在 DOM 樹中父元素的第一個子元素時。例如,指定連結被訪問過後的顏色:
a{
color:blue;
}
a:visited{
color:red;
}
4.組合選擇器
選擇器組 A,B 匹配滿足A(和/或)B的任意元素(參見下方 同一規則集上的多個選擇器).
後代選擇器 A B 匹配B元素,滿足條件:B是A的後代結點(B是A的子節點,或者A的子節點的子節點)
子選擇器 A > B 匹配B元素,滿足條件:B是A的直接子節點
相鄰兄弟選擇器 A + B 匹配B元素,滿足條件:B是A的下一個兄弟節點(AB有相同的父結點,並且B緊跟在A的後面)
通用兄弟選擇器 A ~ B 匹配B元素,滿足條件:B是A之後的兄弟節點中的任意一個(AB有相同的父節點,B在A之後,但不一定是緊挨著A)
參考資料:MDN選擇器