首頁 > web前端 > css教學 > 結構偽級

結構偽級

Joseph Gordon-Levitt
發布: 2025-02-17 09:50:09
原創
845 人瀏覽過

Structural Pseudo-Classes

摘錄自Alexis Goldstein、Louis Lazaris和Estelle Weyl合著的《HTML5 & CSS3 for the Real World, 2nd Edition》一書。本書在全球各地的商店有售,您也可以在這裡購買電子書版本。

到目前為止,我們已經了解瞭如何根據元素的屬性和狀態來定位元素。 CSS3 還允許我們僅僅根據元素在標記中的位置來定位它們。這些選擇器歸類於結構性偽類。

現在這些選擇器可能看起來很複雜,但當我們稍後查看如何應用它們時,它們就會更有意義。除了IE8及以下版本外,IE9及更新版本以及所有其他瀏覽器的當前版本和舊版本都支持這些選擇器:

:root 根元素,在我們的HTML文件中是html元素。

E:nth-child(n) 第 n 個子元素 E。 n 參數在下面的說明中解釋。

E:nth-last-child(n) 第 n 個子元素 F(從最後一個開始倒數)。 li:nth-last-child(1) 將匹配任何列表中的最後一項,這與 li:last-child 相同(參見下面的說明)。

E:nth-of-type(n) 在給定父元素中,第 n 個類型為 E 的元素。 nth-childnth-of-type 之間的區別在下面的說明中解釋。

E:nth-last-of-type(n)nth-of-type(n) 相同,但從父元素中的最後一個元素開始倒數。

說明:結構選擇器的參數

有四個偽類在括號中採用方程式 an b 作為參數,或者使用關鍵字 oddeven。結構性偽類包括 :nth-child(an b):nth-last-child(an b):nth-of-type(an b):nth-last-of-type(an b)。在方程式 an b 中,a 是作為整數的乘數,b 是作為整數的偏移量,n 始終是變量 n。

在最簡單的情況下,您可以傳遞一個整數。例如,E:nth-of-type(3) 將定位單個父元素的第三個 E 元素子元素。您可以傳遞兩個關鍵字 oddeven 之一,以定位其他每個元素。您還可以更有效地傳遞數字表達式,例如 E:nth-of-type(3n 1)。 3n 表示每三個元素,定義頻率, 1 是偏移量。默認偏移量為零,因此,nth-of-type(3n) 將匹配系列中的第 3 個、第 6 個和第 9 個元素,而 nth-of-type(3n 1) 將匹配第 1 個、第 4 個、第 7 個等等。

負偏移量也是允許的。 CSS 基於語言,而不是編程語言,因此計數從 1 開始,而不是 0。乘數 a 和變量 n 之間不能有空格,偏移量必須放在最後。

使用這些數字偽類,您可以精確定位要定位的元素,而無需向標記添加類。最常見的示例是表格,其中每隔一行顏色略深一些,以便於閱讀。我們過去必須向每個 tr 添加奇數或偶數類才能實現這一點。現在,我們可以簡單地聲明 tr:nth-of-type(odd) 來定位每行奇數行,而無需觸及標記。您甚至可以更進一步使用三色條紋表:定位 tr:nth-of-type(3n)tr:nth-of-type(3n 1)tr:nth-of-type(3n 2) 並為每個應用不同的顏色。

E:first-child 如果 E 是其父元素的第一個子元素,則為元素 E。這與 E:nth-child(1) 相同。

E:last-child 如果 E 是其父元素的最後一個子元素,則為元素 E,與 E:nth-last-child(1) 相同。

:first-of-type:nth-of-type(1) 相同。

E:last-of-type:nth-last-of-type(1) 相同。

E:only-child 如果 E 是其父元素的唯一子元素,則為元素 E。

E:only-of-type 如果 E 是其父元素的直接子元素中唯一類型的 E 元素,則為元素 E。

說明:子元素與類型

在使用 nth-of-typenth-child 的結構選擇器時,重要的是要理解在這種情況下“子元素”和“類型”的含義。 “子元素”查看所有匹配計數的子元素,並檢查前驅是否匹配。 “類型”首先查看所有匹配前驅的元素,然後根據計數進行匹配。

對於 p:nth-child(3n),瀏覽器查看父元素的每個第三個子元素。如果該子元素是 p,則匹配;如果不是,則不匹配。對於 p:nth-of-type(3n),瀏覽器查看父元素的所有 p 子元素,並匹配每三個 p。

結構性偽類基於父元素,並為每個新的父元素重新開始計數。它們只查看作為父元素直接子元素的元素。文本節點不是方程式的一部分。

E:empty 沒有子元素的元素;這包括文本節點,因此

hello

將不會與 p:empty 匹配,但

將匹配。此選擇器還匹配空元素或無效元素,例如

和。 E:lang(en) 使用雙字母縮寫(例如 en)表示的語言中的元素。與 E:[lang|=en] 不同(其中 lang 屬性必須作為元素 E 的屬性存在),如果在元素本身或任何祖先上聲明了語言,則 E:lang(en) 將匹配 E。

E:not(exception) 這特別有用:它將選擇匹配括號中選擇器的元素。

帶有 :not 偽類的選擇器匹配冒號左側的所有內容,然後從該匹配組中排除也匹配冒號右側內容的元素。左側匹配優先。例如,p:not(.copyright) 將首先匹配文檔中的所有段落,然後從該集合中排除也具有版權類的所有段落。您可以將多個 :not 偽類連接在一起。 input:not([type=checkbox]):not([type=radio]) 將匹配頁面上的所有輸入元素,但類型為複選框或單選按鈕的元素除外。

結構性偽類的常見問題解答

結構性偽類的不同類型是什麼?

結構性偽類是 CSS 偽類的一個子集,允許您根據元素在文檔樹中的位置來選擇和設置元素的樣式。它們包括 :root:nth-child():nth-last-child():nth-of-type():nth-last-of-type():first-child:last-child:first-of-type:last-of-type:only-child:only-of-type:empty。這些偽類中的每一個都有一個獨特的功能,允許更精確地設置 HTML 元素的樣式。

:nth-child() 偽類是如何工作的?

:nth-child() 偽類根據元素在一組同級元素中的位置來匹配元素。它接受一個參數,該參數可以是數字、關鍵字或公式。例如,:nth-child(2) 將選擇其父元素的第二個子元素,而 :nth-child(odd):nth-child(2n 1) 將選擇所有奇數編號的子元素。

:nth-of-type():nth-child() 之間的區別是什麼?

雖然 :nth-of-type():nth-child() 都根據元素的位置選擇元素,但它們在計算這些位置的方式上有所不同。 :nth-child() 將所有元素都視為同級元素,而不管其類型如何,而 :nth-of-type() 只計算相同類型的元素。例如,如果您有一個包含lip 元素的列表,:nth-child() 將計算這兩種類型的元素,而:nth-of-type() 將只計算lip 元素,具體取決於您指定的元素。

如何選擇和設置父元素的第一個子元素的樣式?

要選擇和設置父元素的第一個子元素的樣式,可以使用 :first-child 偽類。例如,如果您想更改 ul 內第一個 li 元素的顏色,則可以使用以下 CSS:ul li:first-child { color: red; }

:only-child 偽類有什麼作用?

:only-child 偽類匹配作為其父元素唯一子元素的元素。當您只想在其沒有同級元素時才對元素應用樣式時,這很有用。例如,您可能只想在 p 元素是 div 的唯一子元素時才向其添加特殊樣式。

如何使用 :empty 偽類?

:empty 偽類匹配任何沒有子元素的元素。這包括文本節點、註釋或其他元素。例如,您可以使用它來隱藏一個空的 div,否則該 div 將佔用頁面上的空間:div:empty { display: none; }

可以組合結構性偽類嗎?

是的,您可以組合結構性偽類以創建更具體的選擇器。例如,您可以將 :nth-of-type():last-child 組合在一起,以選擇其父元素內最後類型的 li 元素,前提是它也是其父元素的最後一個子元素。

所有瀏覽器都支持結構性偽類嗎?

大多數現代瀏覽器都支持結構性偽類,但在舊版瀏覽器中可能存在一些不一致之處或缺乏支持。在使用 CSS 中的特定偽類之前,最好始終在 Can I Use 等網站上檢查當前的支持級別。

結構性偽類可以與偽元素一起使用嗎?

是的,結構性偽類可以與偽元素結合使用。例如,您可以將 ::before 偽元素與 :first-child 偽類一起使用,以在父元素的第一個子元素之前添加內容。

如何使用結構性偽類創建動態樣式?

結構性偽類可用於創建響應 HTML 結構的動態樣式。例如,您可以將 :nth-child() 偽類與公式一起使用以創建斑馬紋表格,或使用 :hover 偽類來更改鼠標懸停時鏈接的顏色。可能性是無限的,只受您的創造力的限制。

以上是結構偽級的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板