想用 CSS 替元素更改樣式,得先要"選"到目標,才能套用我們所撰寫的規則,而其中"怎麼選",就是使用到 CSS Selector(選擇器 or 選取器) 來幫我們找到特定的元素!
.article {
    color: #cdcdcd;
    background: black;
}
其中
.article 為 Selectorcolor: #cdcdcd; 為宣告的一項規則
color 為屬性#cdcdcd 為屬性值Selector 會在頁面上遍歷所有的元素,並找出 class 為 article 的元素
CSS 提供非常非常多的方式讓我們可以選取元素,大致分成兩類:Simple selectors 和 Complex selectors
最直觀的寫法,包含以下:
* 選擇所有元素section、h1
[],尋找具有特定屬性或是特定屬性值的元素* 補充:class 或是 id 的命名不能以數字開頭
Attribute selector 用法範例:
<div data-type="primary"></div>
/* 尋找具有 data-type 屬性且屬性值為 primary 的元素 */
[data-type='primary'] {
  color: red;
}
/* 尋找具有 data-type 屬性的元素 */
[data-type] {
  color: red;
}
/* 在 [] 中加上 s 或 i,用來表示屬性值的比對是否要區分大小寫 */
/* s 代表要區分大小寫,會尋找具有 data-type 屬性且屬性值為 Primary 的元素 */
[data-type='Primary' s] {
  color: red;
}
| 語法 | 解釋 | 
|---|---|
| [attr] | 元素的屬性名稱需為 attr | 
| [attr=value] | 元素的屬性名稱需為 attr 且值為 value | 
| [attr~=value] | 元素的屬性名稱需為 attr 且將值以空白做區隔,其中有包含 value 的單詞 | 
| [attr^=value] | 元素的屬性名稱需為 attr 且值以 value 作為開頭 | 
| [attr$=value] | 元素的屬性名稱需為 attr 且值以 value 作為結尾 | 
| [attr*=value] | 元素的屬性名稱需為 attr 且值有出現 value | 
/* 可以寫多組 attr 規則,例如:要找出以 https:// 開頭,並以 .org 結尾的連結 */
a[href^="https://"][href$=".org"]
{
  color: green;
}
如果以上的 selector 沒辦法達到需求,可以再使用 complex selectors 做到更精準的選擇
p > strong 中的 >
空白 來遍歷其下所有的子元素+ 來找緊鄰的第一個元素 (必須屬於同一個父元素)~ 來找屬於同一個父層的元素> 來找下一層的子元素 (不會一直往下遍歷)pseudo-class 也是一個 selector,可以根據元素的狀態做選擇,使用: 開頭來表示,例如:
p:first-of-type:第一個 p 元素button:hover:被 Hover 的 Button 元素最直觀可以根據位置、順序、個數來選擇,像是 :last-child、:only-child
另一種則是和使用者操作行為相關的 pseudo classes,例如 :hover、:focus
*位置、次序、是否被 hover 都是浮動的狀態,可能隨時都會改變,屬於 Pseudo classes
類似加入一段 HTML 元素到 markup 中,使用 :: 開頭表示,例如:
::before:和 ::after 一樣,使用 content 來插入新的內容::first-line:針對某一個段落,只選擇第一行 (類似將第一行幫我們用看不到的元素包起來)::marker:list 項目前方的符號或是數字::selection:被使用者反白選取的內容*類似於一段用 CSS 產生的虛擬元素,不存在於 HTML Markup 中
Selectors Explained,這個是 web.dev 所附的參考,可以貼上 selectors 做解釋,幫助熟悉 selector 的用法
隨便瀏覽一個網頁,打開 DevTools 選擇要 selector 的元素,右鍵選擇 Copy -> Copy Selector,如下圖
會得到一串很長很長的 selector (純練習用)#gc-wrapper > main > devsite-content > article > div.devsite-article-body.clearfix > p:nth-child(156)
貼到 Selectors Explained
MDN Web Docs - Pseudo-classes and pseudo-elements