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

更新於 發佈於 閱讀時間約 5 分鐘
相信透過之前的介紹,大家對於 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,我們下次見。
關於我:
一名從英文系畢業的前端工程師,喜歡閱讀、寫東西及自我成長。
|聯絡我:vivian.enlife@gmail.com
為了追求可以窩在座位上、可以心無旁騖思考問題、座位可以亂七八糟沒關係、不需要到處哈腰點頭跑客戶,不用腳踩十公分、連妝都可以不用化的職場人生,文組少女毅然決然踏上RD的養成日常。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
不論是在基礎或是進階的版面排列,幾乎離開不了 position 系列的 CSS 語法,如果對於這些語法不熟悉,要快速完成畫面需求幾乎是不可能的,甚至會延宕整個團隊的開發速度(對,position 語法就是這麽重要)。
相信大家在一開始接觸 CSS 時,一定會很疑惑為什麼除了 width 外,還會有 max-width 及 min-width 語法呢? 當要開發響應式網頁時,到底要使用什麼語法來控制「斷點」?
對於前端初學者來說,在切版時會出現很多規則、不規則的網頁區塊,這時候我們會嘗試用各種相對定位、絕對定位、margin 或是 padding 的方式來進行網頁區塊的推擠。
明明想要某個欄位的寬高為 200px,卻發現自己不知道為什麼怎麼更改都會改不動,又或者寬高更改了,卻沒有辦法與其他元素並列。 上述的狀況,通常都是在不熟悉 HTML display 特性而產生的狀況下才會出現⋯⋯
在一個網頁上,會需要使用到圖片的地方有非常多處,像是品牌主視覺、橫幅廣告、側邊廣告、主要內容的預覽圖片、縮圖、背景圖片等。
在初學網頁排版的時候,文字、段落、列表的排版可以說是比較好上手的,只要稍微透過margin、padding、border及文字顏色上調整,就可以輕易獲得一段美美的文字。 然而要去調整圖片的大小及其他相關效果,就不是那麼容易的一件事了,往往在開發時,都會出現圖片效果不如自己預期的狀況。
不論是在基礎或是進階的版面排列,幾乎離開不了 position 系列的 CSS 語法,如果對於這些語法不熟悉,要快速完成畫面需求幾乎是不可能的,甚至會延宕整個團隊的開發速度(對,position 語法就是這麽重要)。
相信大家在一開始接觸 CSS 時,一定會很疑惑為什麼除了 width 外,還會有 max-width 及 min-width 語法呢? 當要開發響應式網頁時,到底要使用什麼語法來控制「斷點」?
對於前端初學者來說,在切版時會出現很多規則、不規則的網頁區塊,這時候我們會嘗試用各種相對定位、絕對定位、margin 或是 padding 的方式來進行網頁區塊的推擠。
明明想要某個欄位的寬高為 200px,卻發現自己不知道為什麼怎麼更改都會改不動,又或者寬高更改了,卻沒有辦法與其他元素並列。 上述的狀況,通常都是在不熟悉 HTML display 特性而產生的狀況下才會出現⋯⋯
在一個網頁上,會需要使用到圖片的地方有非常多處,像是品牌主視覺、橫幅廣告、側邊廣告、主要內容的預覽圖片、縮圖、背景圖片等。
在初學網頁排版的時候,文字、段落、列表的排版可以說是比較好上手的,只要稍微透過margin、padding、border及文字顏色上調整,就可以輕易獲得一段美美的文字。 然而要去調整圖片的大小及其他相關效果,就不是那麼容易的一件事了,往往在開發時,都會出現圖片效果不如自己預期的狀況。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在本章節中,我們介紹了 CSS 偽元素的基本概念和常見用法,通過一些示例,我們展示了如何使用這些偽元素來樣式化文檔中的特定部分。此外,我們還探討了一些高級用法,如創建自定義引號和實現複雜的圖形效果。這些內容應該能夠幫助你更好地理解和應用 CSS 偽元素。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
什麼是 CSS 預處理器 CSS 預處理器是一種工具,使用專門的語法來生成 CSS 樣式表。市面上有許多 CSS 預處理器可供選擇,它們通常會提供一些純 CSS 中沒有的功能,例如變數、混入、巢狀選擇器等。這些功能可以使 CSS 結構更易讀、更易於維護,並提高開發效率。 為什麼使用 CSS 預處
前言 今天課程要來學習,在 .css 設計樣式後,怎麼透過選擇器,讓 .html 可以有所配對,經過這一步後,便可以開始學習,如何正式設計 .css 了。 選擇器 介紹 還記得上次課程,我們在 .css 檔案中,撰寫的程式碼嗎?讓我們來複習看看: .highlight { co
Thumbnail
在 CSS 的開發過程中,重複使用如顏色、字體大小等值是常見的需求。為了提高程式碼維護性和靈活性,就需要用到 CSS 變量了,CSS 變量可以讓你在樣式表中儲存可重用的值。本文將介紹 CSS 變量的概念、使用方法,以及它對撰寫 CSS 的影響。
Thumbnail
本文將介紹 CSS 中的兩個重要概念:偽類與偽元素。通過理解和運用這些概念,你可以更好的控制網頁的樣式和佈局。
Thumbnail
如何透過 CSS 來美化和增強文本的可讀性,對於提升用戶體驗至關重要。本文將介紹如何使用 CSS 來處理網頁上的文本,包括字型設定、文本排列、裝飾等多方面。
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在本章節中,我們介紹了 CSS 偽元素的基本概念和常見用法,通過一些示例,我們展示了如何使用這些偽元素來樣式化文檔中的特定部分。此外,我們還探討了一些高級用法,如創建自定義引號和實現複雜的圖形效果。這些內容應該能夠幫助你更好地理解和應用 CSS 偽元素。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
什麼是 CSS 預處理器 CSS 預處理器是一種工具,使用專門的語法來生成 CSS 樣式表。市面上有許多 CSS 預處理器可供選擇,它們通常會提供一些純 CSS 中沒有的功能,例如變數、混入、巢狀選擇器等。這些功能可以使 CSS 結構更易讀、更易於維護,並提高開發效率。 為什麼使用 CSS 預處
前言 今天課程要來學習,在 .css 設計樣式後,怎麼透過選擇器,讓 .html 可以有所配對,經過這一步後,便可以開始學習,如何正式設計 .css 了。 選擇器 介紹 還記得上次課程,我們在 .css 檔案中,撰寫的程式碼嗎?讓我們來複習看看: .highlight { co
Thumbnail
在 CSS 的開發過程中,重複使用如顏色、字體大小等值是常見的需求。為了提高程式碼維護性和靈活性,就需要用到 CSS 變量了,CSS 變量可以讓你在樣式表中儲存可重用的值。本文將介紹 CSS 變量的概念、使用方法,以及它對撰寫 CSS 的影響。
Thumbnail
本文將介紹 CSS 中的兩個重要概念:偽類與偽元素。通過理解和運用這些概念,你可以更好的控制網頁的樣式和佈局。
Thumbnail
如何透過 CSS 來美化和增強文本的可讀性,對於提升用戶體驗至關重要。本文將介紹如何使用 CSS 來處理網頁上的文本,包括字型設定、文本排列、裝飾等多方面。
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。