Skip to content

CSS 偽類選取器:連結、狀態與位置的選取方式

CSS 偽類選取器:狀態與結構的選取

也稱做 擬態選取器虛擬選取器,除了篩選元素之外,又多了用狀態來選擇元素,讓網頁的互動更加豐富。

連結型

選取 HTML 文件上具有連結的元素,也就是說僅有連結才能使用。

尚未被點選的連結樣式,亦是一般載入時的連結。

:visited

已經被點閱過的連結。

以下案例便是利用 連結型 將使用者對操作目標的行為狀態進行樣式的改變。

小提醒

狀態型

選取 HTML 文件上特定狀態的元素,也就是與使用者行為相關的選取器。

:hover

游標滑入超連結文字時的呈現效果。

:active

於超連結文字上並按下不放時所呈現的效果。

:focus

焦點時的狀態,使用 Tab 鍵可以切換狀態。

以下案例便是利用 狀態型 將使用者對操作目標的行為狀態進行樣式的改變。

位置型

選取 HTML 文件上經篩選過的元素。

:first-child

同層的第一個元素。

:last-child

同層的最後一個元素。

:nth-child(參數)

同層篩選元素。

參數

  • n: 指定第 n 個。
  • odd: 指定奇數。
  • even: 指定偶數。

以下案例便是利用 位置型 將篩選出來的對象進行樣式的改變。

表單型

選取 HTML 文件上特定狀態的元素,也就是與使用者行為相關的選取器。

:disabled

選取被禁用的表單元素。

:checked

選取 checkboxradio 被核取的表單元素。

以下案例便是利用 表單型 選取器來改變禁用表單元素的樣式。

邏輯型

選取 HTML 文件上經邏輯篩選過的元素。

:not()

選取被排除的元素。

以下案例便是利用 表單型 選取器來改變禁用表單元素的樣式。

書寫順序:LVHA

連結相關的四個偽類權重相同,後寫的會覆蓋先寫的,因此順序不能亂:

css
a:link    { color: #2965f1; }
a:visited { color: #7c3aed; }
a:hover   { color: #1d4ed8; }
a:active  { color: #dc2626; }

記法就是 LoVe HAte:link、visited、hover、active。

表單相關的偽類

css
input:disabled { background: #f3f4f6; }
input:checked + label { font-weight: 700; }
input:required { border-left: 3px solid #dc2626; }
input:invalid { border-color: #dc2626; }
input:placeholder-shown { font-style: italic; }

搭配 輸入欄位同層選取器,不寫 JavaScript 也能做出即時的視覺回饋。

無障礙提醒

小提醒

  • :hover 在觸控裝置上幾乎無效,重要資訊別只靠它呈現。
  • 不要把 :focus 的外框直接拿掉,那會讓鍵盤使用者不知道自己在哪裡。只想在滑鼠點擊時隱藏外框的話,改用 :focus-visible

常見問題

偽類為什麼要按 LVHA 的順序寫?

因為這四個偽類 權重 相同,後寫的會覆蓋先寫的。依照 :link:visited:hover:active 的順序,滑入與按下的效果才不會被前面的規則蓋掉。

nth-child 和 nth-of-type 差在哪?

:nth-child 數的是所有同層元素,中間夾了別種標籤也會被算進去;:nth-of-type 只數同一種標籤。想挑第幾個 段落 時,用 :nth-of-type 比較準。

hover 在手機上有效嗎?

觸控裝置沒有滑鼠停留的概念,效果通常只在點擊當下短暫出現。重要的資訊不要只靠 :hover 呈現,行動裝置的使用者會看不到。

focus 和 focus-visible 該用哪一個?

想保留鍵盤操作的可見焦點但不希望滑鼠點擊時出現外框,就用 :focus-visible。無論如何都別直接把外框設成 none,那會讓鍵盤使用者不知道自己在哪裡。

延伸閱讀