天天看點

學習《CSS選擇器Level-4》不完全版

1 概述

1.1 前言

選擇器是CSS的核心元件。本文依據W3C的Selectors Level 4規範,概括總結了Level1-Level4中絕大多數的選擇器,并做了簡單的文法說明及示例示範。希望對程式員有所助益。

2 元素選擇器

2.1 類型選擇器-h1

類型選擇器也可以稱為标簽名選擇器,會選中文檔中該類型元素的執行個體。

h1 {
    color: red;
}           

将文檔中元素類型為h1的顔色設定成紅色。

檢視示例程式

2.2 通配選擇器-*

通用選擇器是一種特殊類型選擇器,表示任何元素類型的元素。

* {
    color: red;
}           

設定文檔中所有元素的顔色為紅色。

3 屬性選擇器

3.1 屬性存在選擇器-[name]

h1[name] {
    color: red;
}           

選中元素

h1

中具有屬性

name

的元素。

3.2 屬性值選擇器

3.2.1 确切比對-[title='cool']

h1[title='cool'] {
    color: red;
}           

比對元素

h1

中包含屬性

title

并且屬性值是

cool

3.2.2 包含比對-[title|='cool']

h1[title~='cool'] {
    color: red;
}           

h1

title

并且屬性值中包含

cool

3.2.3 頭部比對-[title^='cool']

h1[title|='cool'] {
    color: red;
}           

h1

title

,并且屬性值是

cool

的元素 或以

cool-

開頭的元素。

3.3 屬性值子串選擇器

3.3.1 頭部比對-[title^='cool']

h1[title^='cool'] {
    color: red;    
}           

h1

title

,并且屬性值串以

cool

3.3.2 尾部比對-[title$='cool']

h1[title$='cool'] {
    color: red;    
}           

h1

title

cool

結尾的元素。

3.3.3 部分比對-[title*='cool']

h1[title*='cool'] {
    color: red;    
}           

h1

title

,并且屬性值串包含

cool

子串的元素。

3.4 類選擇器-.class

.red {      
    color: red;       
}           

比對文檔中

class

屬性為

red

的元素并設定其顔色為紅色。

3.5 ID選擇器-#id

#title {      
    color: red;       
}           

id

title

4 語言學僞類

4.1 方向性僞類:dir

dir()

主要用于比對符合某個方向性的元素,例如

:dir(ltr)

:dir(rtl)

,其中ltr是left to right簡寫,表示從左向右,而rtl是right to left,表示從右向左。

:dir(ltr) {
    color: red;
}           

比對文字方向為從左到右的元素。

4.2 語言僞類:lang

:lang(fr) {
    color: red;
}           

比對語言為法語的元素并設定其顔色為紅色。

5 位置僞類

5.1 超連結僞類:any-link

比對帶有

href

屬性的

<a>

<link>

<area>

等元素。

:any-link {
    color: red;
}           

比對任意超連結,并設定其顔色為紅色。

5.2 超連結僞類:link

:link {
    color: red;
}           

比對未被通路的超連結,并設定其顔色為紅色。

5.3 超連結僞類:visited

:visited {
    color: blue;
}           

比對通路過的超連結,并設定其顔色為藍色。

5.4 超連結僞類:local-link

:local-link {
    color: red;
}           

比對本地超連結,并設定其顔色為紅色。

5.5 目标僞類:target

<h1><a href="#content">三十課</a></h1>
<p id="content">程式員的筆記本</p>
<p id="content2">程式員的筆記本2</p>           
:target {
    color: red;
}           

點選

html

代碼中的内部連結,連結的目标對象

id

content

的 p元素顔色變為紅色。

6 使用者行為僞類

6.1 使用者行為僞類:hover

使用者指針裝置懸停于指定元素時,比對該元素。

:hover {
    color: red;
}           

使用者指針懸停于某元素,比對該元素并将其設定其顔色為紅色。

6.2 使用者行為僞類:active

:active {
    background: red;
}           

當特定元素處于激活狀态時,設定元素背景色為紅色。

6.3 使用者行為僞類:focus

:focus {
    background: red;
}           

當特定元素獲得焦點,設定元素背景色為紅色。

6.4 使用者行為僞類:focus-within

div:focus-within {        
    border : 1px solid blue;
}           

當div中的子元素獲得輸入焦點時,設定div元素邊框為1象素值的藍色邊框。

7 時間軸僞類

7.1 時間僞類:current

在文檔的語音渲染或是顯示字幕期間,常會用到時間軸僞類。

:current(p) {
    color: red;
}           

以上規則定義了目前語音渲染段落的顔色為紅色。

7.2 時間僞類:past

:past(p) {
    color: red;
}           

以上規則定義了以完成語音渲染段落的顔色為藍色。

7.3 時間僞類:future

:future(p) {
    color: yellow;
}           

以上規則定義了以未進行語音渲染段落的顔色為黃色。

8 資源狀态僞類

8.1 資源狀态僞類:playing

:playing {
    border : 1px solid red;
}           

比對目前播放狀态的元素,并為其添加1象素的紅色邊框。

8.2 資源狀态僞類:paused

:playing {
    border : 1px solid grey;
}           

比對目前播放狀态的元素,并為其添加1象素的灰色邊框。

9 輸入僞類

9.1 輸入狀态控制僞類:enabled

:enabled {
    color: red;
}           

比對啟用狀态的元素并設定其顔色為紅色。

9.2 輸入狀态控制僞類:disabled

:disabled{
    color: yellow;
}           

比對禁用狀态的元素并設定其顔色為黃色。

9.3 隻讀僞類:read-only

:read-only {
    color: red;
}           

比對隻讀狀态的元素并設定其顔色為紅色。

9.4 讀寫僞類:read-write

:read-write {
    color: yellow;
}           

比對讀寫狀态的元素并設定其顔色為黃色。

9.5 僞類:placeholder-shown

:placeholder-shown {
    background: red;
}           

選中占位符為顯示狀态的元素并設定其背景色為紅色。

9.6 預設項僞類:default

:default {
    color: red;
}           

比對預設的元素并設定其顔色為紅色。

9.7 選中項僞類:checked

:checked {
   height: 4em;
}           

比對選中的元素并将其高度設成

4em

9.8 不确定值僞類:indeterminate

不确定值僞類

:indeterminate

适用于其值處在不确定狀态的元素。例如 :

radio

元素組在未被初始選擇的情況下就為不确定值狀态。

:indeterminate {
  height: 4em;
}           

比對不确定值元素并設定高度為

4em

9.9 空值僞類:blank

空值僞類

:blank

用來比對輸入值為空的輸入框,如

textarea

input

框。

:blank {
    background: red;
}           

目前該僞類相容性較差。

9.10 合規性驗證僞類:valid

:valid {        
    color: red;       
}           

比對輸入值合法的元素并設定其顔色為紅色。

9.11 合規性驗證僞類:invalid

:valid {        
    color:  blue;       
}           

比對輸入值不合法的元素并設定其顔色為藍色。

9.12 範圍僞類:in-range

:in-range {
   color: red;        
}           

比對輸入值在定義範圍内的元素并設定其顔色為紅色。

9.13 範圍僞類:out-of-range

:out-of-range {
   color: blue;        
}           

比對輸入值不在定義範圍内的元素并設定其顔色為藍色。

9.14 必填項僞類:required

:required {            
    color: red;        
}           

比對定義為必填項的元素并設定其顔色為紅色。

9.15 選填項僞類:optional

:optional {            
    color: blue;        
}           

比對定義為選填項的元素并設定其顔色為藍色。

10 樹形結構僞類

10.1 根結點僞類:root

僞類

:root

表示文檔的根元素。例如,在DOM文檔中,僞類

:root

與Document對象的根元素比對。 在HTML中,就表示html元素。

:root {
    color: red;
}           

比對文檔根元素并定義其顔色為紅色。

10.2 空僞類:empty

:empty {           
    color : red;
}           

比對為空的元素并設定其顔色為紅色。

10.3 元素索引僞類:nth-child

p:nth-child(3n+1) {
    color: red;
}           

比對第1,4,7,10等

p

元素并設定其顔色為紅色。

10.4 元素索引僞類:nth-last-child

p:nth-child(3n+1) {
    color: red;
}           

比對倒數第1,4,7,10等

p

10.5 首元素僞類:first-child

p:first-child { 
    color: red;      
}           

比對第一個

p

10.6 尾元素僞類:last-child

p:last-child { 
    color: red;      
}           

比對最後一個

p

10.7 唯一子元素僞類:only-child

p:only-child { 
    color: red;      
}           

比對父元素隻包含唯一子元素的元素

p

并設定其顔色為紅色。

10.8 類型索引僞類:nth-of-type

p:nth-of-type(3n+1) {        
    color: red;      
}           

比對類型為

p

的第1,4,7,10等索引位置的元素并設定其顔色為紅色。

10.9 類型索引僞類:nth-last-of-type

p:nth-last-of-type(3n+1) {        
    color: red;      
}           

p

的倒數第1,4,7,10等索引位置的元素并設定其顔色為紅色。

10.10 類型首元素僞類:first-of-type

p:first-of-type {        
    color: red;      
}           

比對第一個類型為

p

的元素并設定及顔色為紅色。

10.11 類型尾元素僞類:last-of-type

p:last-of-type {        
    color: red;      
}           

比對倒數第一個類型為

p

10.12 唯一類型元素僞類:only-of-type

p:only-of-type {        
    color: red;      
}           

比對父元素隻包含唯一類型為

p

子元素并設定其顔色為紅色。

11 邏輯組合選擇器

11.1 分組選擇器

h1 {  color: red }
h2 {  color: red }
h3 {  color: red }
h4 {  color: red }           

利用分組選則器,可以将上述CSS規則簡寫成下面的形式。

h1,h2,h3,h4 {  
    color: red 
}           

上述兩種寫法效果相同。

11.2 邏輯組合僞類:is

:is()

是一個以多個選擇器做為參數的函數,比對由其參數表示的元素。

目前相容性較差。

*:is(:hover, :focus) {
    color: red;
}            

比對僞類

hover

focus

11.3 邏輯組合僞類:not

負向邏輯組合僞類

:not()

是一個以多個選擇器做為參數的函數,比對不在其參數表中的元素。

button:not([DISABLED])  {
    color : red;
}           

比對不包含

DISABLED

button

11.4 邏輯組合僞類:has

a:has(> img)  {
    border : 1px solid red;
}           

比對包含

img

子元素的超連結并設定其邊框為1象素紅色。

12 組合選擇器

12.1 後代選擇器

h1 em {
    color: red;
}           

比對

h1

的後代的

em

12.2 子元素選擇器->

h1 > em {  
    color: red;
}           

h1

的子元素

em

12.3 相鄰兄弟選擇器-+

h1 + h2 {
    color: red;
}           

h1

的相鄰兄弟元素

h2

12.4 兄弟選擇器-~

h1 ~ h2 {
    color: red;
}           

h1

的後面的同級結點

h2

13 結尾

13.1 參考文獻

W3C Working Draft : Selectors Level 4 - 21 November 2018 W3scool : CSS 選擇器參考手冊 菜鳥教程 :CSS 選擇器 MDN : CSS Selectors

13.2 結語

本文是@毛瑞依據CSS選擇器規範4擇取的部分CSS選擇器内容編寫而成。因本人水準有限,了解和翻譯時難免有偏差和錯誤,還請程式員朋友多多指正!

文中一些選擇器相容性還很差,隻能做為學習儲備,不适用于實際産品中運用。

費力原創十分不易,請大家轉載時一定要明确注明出處來自【

三十課

】!

繼續閱讀