【自學程式】好用的 CSS 偽類選擇器 :nth-child() 與 :nth-of-type()

更新於 發佈於 閱讀時間約 6 分鐘

相信透過之前的介紹,大家對於 CSS 選擇器(CSS selector)已經不陌生了,今天我們要來聊聊兩個在實務上非常好用的偽類(pseudo class )語法,他們分別是 :nth-child():nth-of-type(),在了解這兩個語法之前,我們首先要先來聊聊什麼是「偽類」呢?

如果你並不是很確定什麼是 CSS 選擇器,建議可以先閱讀下文,再回來閱讀這篇文章:


什麼是 CSS 偽類(pseudo class)?

根據 MDN 文件,pseudo class (文件翻譯為虛擬類別,但多技術書籍內稱其為偽類)語法可以讓元素處在特定條件時套用指定的 CSS 效果。

舉例來說,當我們想要創造一個按鈕,當按鈕準備被使用者點擊,也就是觸發 JavaScript 的 mouseover 事件時,產生與原來樣式不一樣的效果,此時我們就可以使用 :hover 這個偽類,來讓我們的按鈕在滑鼠移動到按鈕時,套用不同的 CSS 樣式:

從上方的程式碼範例中,我們可以看到使用偽類的方式為 CSS 選擇器加上一個偽類語法,即可以做到在特定條件發生時,套用不同的樣式。

這裡需要注意的是,帶有偽類語法的 CSS 選擇器,其實跟一般的 CSS 語法沒有兩樣,一樣會帶有下方覆蓋上方的概念,所以我們只需要在偽類中寫入「需要改變的樣式」即可,其他的樣式依然會維持原有 CSS 選擇器中規範的樣式。

而當 mouseover 事件結束時,被額外加上去的樣式也會被移除,這就是偽類的運作模式。

由於偽類有非常多種,應用的情境也不同,接著就切入到我們今天的重點 :nth-child() 與 :nth-of-type() 吧!


:nth-child() 偽類選取第 n 個同層元素

我們先來簡單介紹一下 :nth-child() ,與上述的 :hover 偽類不同,這一個偽類後面多了一組小括號,這代表什麼意思呢?

根據 MDN ,:nth-child() 是一個可以針對特定條件匹配特定群組中的同層元素(sibling element),我們可以在小括號中帶入欲匹配的條件,舉例來說:

在上方範例中,我們想要序列為三的倍數的 li 元素帶有不同的顏色,此時我們就可以將 3n 這個參數帶入 :nth-child() 這個偽類中,並在偽類前帶上 li 選擇器,就可以獲得上方的效果。

這聽起來是不是很熟悉呢?是的,有些偽類的使用方式其實就跟 JavaScript 中的函式很像,只是在 CSS 中,有預先寫好一些條件,我們只要根據規範帶入指定條件即可,不需針對參數去做額外的設定。

關於 :nth-child() 中可以帶的參數:

  1. An+B:某個特定的倍數,例如:2n、3n、4n,或者是 2n+1、3n+2 這種特殊的條件都可以被 CSS 所接受,這邊的 n 會根據同層元素的多寡,從零開始做起算。
  2. 指定數字:某個指定的數字,例如:1、2、3 等指定的序列,但通常我們比較少用到(因為除非有特殊的狀況,不然一般網頁的樣式會因為要管理方便,會以規律性的樣式為主)。
  3. 偶數及基數:在大部分類似函式的偽類中,我們幾乎都可以帶入 odd(奇數) 或是 even(偶數),這兩個參數。

這裡需要注意的是, :nth-child() 中的參數只接受整數,選取的是同層元素,而不是指定元素中的子元素,這一點是自己在初學偽類時最常犯的錯,導致自己選半天選不到正確的元素。

補充:目前主流瀏覽器皆支援此語法。


:nth-of-type() 偽類選取同層同類別之元素

:nth-of-type() 這個語法跟 :nth-child() 使用的方法,及可以帶入的參數內容幾乎一模一樣,但這兩個語法不同的地方在於,:nth-of-type() 會額外根據同類型且同層的元素序列作匹配,而 :nth-child() 則單純根據同層元素的「總序列」來做匹配,這是什麼意思呢?

讓我們再來看一次 :nth-child() 的程式碼範例:

在上方的範例中,我們指定 p 段落的顏色為橘色,但是當 p 的序列為整體同層元素的三的倍數時,就會變成綠色。

但如果我們將語法改成用 :nth-of-type() 呢?此時我們要將參數改成 2n 才會生效,因為在此語法中,我們並不是以「整體序列」來做參考,而是以選擇器的序列(也就是 p 類別中的第二個),所以這也是為什麼我們要注意帶入參數的序列差異:

基本上這就是 :nth-child() 及 :nth-of-type() 偽類的使用方式了,是不是弄懂後發現它們其實沒這麼複雜呢?

上方的範例主要是讓大家可以更快、簡便的方式了解這兩個語法的差異,但在實務上可以透過這兩個語法快速且簡單的創造各式各樣的跳序列樣式,如果之後有遇到,再來跟大家分享更多更進階的範例及用法。

關於 pseudo class 你有什麼想要跟我分享的嗎?歡迎下方留言與我分享!


希望今天的文章有幫助到正在閱讀的你,如果你喜歡我的文章的話,可以留下你的愛心或是收藏我的文章,也或者可以點選「贊助」,你的一杯咖啡絕對是我持續寫下去的動力!或是透過拍拍手,用你小小的行動支持我的創作!

我是Vivian,我們下次見。



關於我:

一名從英文系畢業的前端工程師,喜歡閱讀、寫東西及自我成長。

|Instagram: Vivian Yeh|vivian_enlife

|聯絡我:vivian.enlife@gmail.com



參考文件:MDN-:nth-child()MDN-:nth-of-type()

留言
avatar-img
留言分享你的想法!
avatar-img
Vivian Yeh - 跨領域轉職的軟體工程師
444會員
102內容數
為了追求可以窩在座位上、可以心無旁騖思考問題、座位可以亂七八糟沒關係、不需要到處哈腰點頭跑客戶,不用腳踩十公分、連妝都可以不用化的職場人生,文組少女毅然決然踏上RD的養成日常。
2023/06/07
說到 HTML 元素的換行效果,在前端有滿多種實作方式的最常見的方式是使用 <br /> 這個 HTML 元素來進行換行 ⋯⋯
Thumbnail
2023/06/07
說到 HTML 元素的換行效果,在前端有滿多種實作方式的最常見的方式是使用 <br /> 這個 HTML 元素來進行換行 ⋯⋯
Thumbnail
2022/04/28
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
2022/04/28
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
2021/12/05
不論是在基礎或是進階的版面排列,幾乎離開不了 position 系列的 CSS 語法,如果對於這些語法不熟悉,要快速完成畫面需求幾乎是不可能的,甚至會延宕整個團隊的開發速度(對,position 語法就是這麽重要)。
Thumbnail
2021/12/05
不論是在基礎或是進階的版面排列,幾乎離開不了 position 系列的 CSS 語法,如果對於這些語法不熟悉,要快速完成畫面需求幾乎是不可能的,甚至會延宕整個團隊的開發速度(對,position 語法就是這麽重要)。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
在本章節中,我們介紹了 CSS 偽元素的基本概念和常見用法,通過一些示例,我們展示了如何使用這些偽元素來樣式化文檔中的特定部分。此外,我們還探討了一些高級用法,如創建自定義引號和實現複雜的圖形效果。這些內容應該能夠幫助你更好地理解和應用 CSS 偽元素。
Thumbnail
在本章節中,我們介紹了 CSS 偽元素的基本概念和常見用法,通過一些示例,我們展示了如何使用這些偽元素來樣式化文檔中的特定部分。此外,我們還探討了一些高級用法,如創建自定義引號和實現複雜的圖形效果。這些內容應該能夠幫助你更好地理解和應用 CSS 偽元素。
Thumbnail
要改變表單元素的樣式其實相當麻煩,有些樣式還不能更改,這篇就來探討如何把它們改成喜歡的模樣吧。
Thumbnail
要改變表單元素的樣式其實相當麻煩,有些樣式還不能更改,這篇就來探討如何把它們改成喜歡的模樣吧。
Thumbnail
本篇習作內容,除了練習六角預習影音內的常用語法章節外,也額外整理了其它常用於文本的 HTML 元素,希望能透過這樣的整理,在未來設計結構更複雜的網站介面內容時,能扎穩根基。
Thumbnail
本篇習作內容,除了練習六角預習影音內的常用語法章節外,也額外整理了其它常用於文本的 HTML 元素,希望能透過這樣的整理,在未來設計結構更複雜的網站介面內容時,能扎穩根基。
Thumbnail
自學程式的過程中,你總是把transform、transition,甚至是translate搞混嗎!為了分辨「轉變」的三個關係字,並理解到底什麼時候要用哪個屬性才正確,這篇筆記誕生了!
Thumbnail
自學程式的過程中,你總是把transform、transition,甚至是translate搞混嗎!為了分辨「轉變」的三個關係字,並理解到底什麼時候要用哪個屬性才正確,這篇筆記誕生了!
Thumbnail
雖然知道可以透過 HTML 的 red, white, black 等顏色單字而非色票 (color code) 來使用顏色,一直以來開發上都是在找好適合的顏色後,使用 Sass 將色票紀錄到變數再做使用,不過最近接觸到 w3schools 的 HTML Color Names 才知道有將近...
Thumbnail
雖然知道可以透過 HTML 的 red, white, black 等顏色單字而非色票 (color code) 來使用顏色,一直以來開發上都是在找好適合的顏色後,使用 Sass 將色票紀錄到變數再做使用,不過最近接觸到 w3schools 的 HTML Color Names 才知道有將近...
Thumbnail
相信透過之前的介紹,大家對於 CSS 選擇器(CSS selector)已經不陌生了,今天我們要來聊聊兩個在實務上非常好用的偽類(pseudo class )語法,他們分別是 :nth-child() 與 :nth-of-type(),在了解這兩個語法之前,我們首先要先來聊聊什麼是「偽類」呢?
Thumbnail
相信透過之前的介紹,大家對於 CSS 選擇器(CSS selector)已經不陌生了,今天我們要來聊聊兩個在實務上非常好用的偽類(pseudo class )語法,他們分別是 :nth-child() 與 :nth-of-type(),在了解這兩個語法之前,我們首先要先來聊聊什麼是「偽類」呢?
Thumbnail
source code: E 提供兩個範例,其實before, after就如同字面上的意思,會在前後加上內容。 範例1簡單的在前後加上文字,如下所示,需特別注意,是在div內的範例1前後加上文字。 before/after除了可以加上文字以外,還可以作為裝飾效果。如範例2,利用position調
Thumbnail
source code: E 提供兩個範例,其實before, after就如同字面上的意思,會在前後加上內容。 範例1簡單的在前後加上文字,如下所示,需特別注意,是在div內的範例1前後加上文字。 before/after除了可以加上文字以外,還可以作為裝飾效果。如範例2,利用position調
Thumbnail
在HTML程式語言中,有一種能讓HTML元素與其他程式語言(CSS、JavaScript)運作的更加順利的語法,它叫做「HTML屬性(HTML Attribute)」。 那HTML屬性是怎麼運作的呢?
Thumbnail
在HTML程式語言中,有一種能讓HTML元素與其他程式語言(CSS、JavaScript)運作的更加順利的語法,它叫做「HTML屬性(HTML Attribute)」。 那HTML屬性是怎麼運作的呢?
Thumbnail
與HTML不同,CSS是專門修改網頁內容「樣式」的程式語言,也就是說你沒有辦法透過CSS去新增網頁的文字或是圖片等相關的內容,但你可以透過HTML新增網頁內容後,再使用CSS去修改他的樣式,例如⋯⋯
Thumbnail
與HTML不同,CSS是專門修改網頁內容「樣式」的程式語言,也就是說你沒有辦法透過CSS去新增網頁的文字或是圖片等相關的內容,但你可以透過HTML新增網頁內容後,再使用CSS去修改他的樣式,例如⋯⋯
Thumbnail
01-選擇器寫法 圖片來源:自己擷取電腦螢幕 1.可以下.main .img .hot span   控制到a 下面的兩個span 也可以省略成下 .hot span  只要整個html不容易相撞到相同的class就可以 2.也可以下.hot .title  就單純控制span class="t
Thumbnail
01-選擇器寫法 圖片來源:自己擷取電腦螢幕 1.可以下.main .img .hot span   控制到a 下面的兩個span 也可以省略成下 .hot span  只要整個html不容易相撞到相同的class就可以 2.也可以下.hot .title  就單純控制span class="t
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News