樣式表2
阿新 • • 發佈:2020-09-08
存否和值選擇器
這些選擇器允許基於一個元素自身是否存在(例如href
)或者基於各式不同的按屬性值的匹配,來選取元素。
選擇器 | 示例 | 描述 |
---|---|---|
[attr] |
a[title] |
匹配帶有一個名為attr的屬性的元素——方括號裡的值。 |
[attr=value] |
a[href="https://example.com"] |
匹配帶有一個名為attr的屬性的元素,其值正為value——引號中的字串。 |
[attr~=value] |
p[class~="special"] |
匹配帶有一個名為attr的屬性的元素 ,其值正為value,或者匹配帶有一個attr 注意,在一列中的好幾個值,是用空格隔開的。 |
[attr|=value] |
div[lang|="zh"] |
匹配帶有一個名為attr的屬性的元素,其值可正為value,或者開始為value,後面緊隨著一個連字元。 |
下面的示例中,你可以看到這些選擇器是怎樣使用的。
- 使用
li[class]
,我們就能匹配任何有class屬性的選擇器。這匹配了除了第一項以外的所有項。 li[class="a"]
匹配帶有一個a
類的選擇器,不過不會選中一部分值為a
而另一部分是另一個用空格隔開的值的類,它選中了第二項。li[class~="a"]
會匹配一個a
a
類的值,它選中了第二和第三項。
子字串匹配選擇器
這些選擇器讓更高階的屬性的值的子字串的匹配變得可行。例如,如果你有box-warning
和box-error
類,想把開頭為“box-”字串的每個物件都匹配上的話,你可以用[class^="box-"]
來把它們兩個都選中。
選擇器 | 示例 | 描述 |
---|---|---|
[attr^=value] |
li[class^="box-"] |
匹配帶有一個名為attr的屬性的元素,其值開頭為value子字串。 |
[attr$=value] |
li[class$="-box"] |
匹配帶有一個名為attr的屬性的元素,其值結尾為value |
[attr*=value] |
li[class*="box"] |
匹配帶有一個名為attr的屬性的元素,其值的字串中的任何地方,至少出現了一次value子字串。 |
下個示例展示了這些選擇器的用法:
li[class^="a"]
匹配了任何值開頭為a
的屬性,於是匹配了前兩項。li[class$="a"]
匹配了任何值結尾為a
的屬性,於是匹配了第一和第三項。li[class*="a"]
匹配了任何值的字串中出現了a
的屬性,於是匹配了所有項。
偽類 :類是一個選擇處於特定狀態的元素的選擇器,比如它們是這一型別的第一個元素的時候,或者是滑鼠指標懸浮在上面的時候。它們表現得會像是你向你的文件的某個部分應用了一個類一樣,幫你在你的標記文字中減少多餘的類,讓你的程式碼更靈活、更易於維護。
選擇器 | 描述 |
---|---|
:active |
在使用者啟用(例如點選)元素的時候匹配。 |
:any-link |
匹配一個連結的:link 和:visited 狀態。 |
:blank |
匹配空輸入值的<input> 元素。 |
:checked |
匹配處於選中狀態的單選或者複選框。 |
:current |
匹配正在展示的元素,或者其上級元素。 |
:default |
匹配一組相似的元素中預設的一個或者更多的UI元素。 |
:dir |
基於其方向性(HTMLdir 屬性或者CSSdirection 屬性的值)匹配一個元素。 |
:disabled |
匹配處於關閉狀態的使用者介面元素 |
:empty |
匹配除了可能存在的空格外,沒有子元素的元素。 |
:enabled |
匹配處於開啟狀態的使用者介面元素。 |
:first |
匹配分頁媒體的第一頁。 |
:first-child |
匹配兄弟元素中的第一個元素。 |
:first-of-type |
匹配兄弟元素中第一個某種型別的元素。 |
:focus |
當一個元素有焦點的時候匹配。 |
:focus-visible |
當元素有焦點,且焦點對使用者可見的時候匹配。 |
:focus-within |
匹配有焦點的元素,以及子代元素有焦點的元素。 |
:future |
匹配當前元素之後的元素。 |
:hover |
當用戶懸浮到一個元素之上的時候匹配。 |
:indeterminate |
匹配未定態值的UI元素,通常為複選框。 |
:in-range |
用一個區間匹配元素,當值處於區間之內時匹配。 |
:invalid |
匹配諸如<input> 的位於不可用狀態的元素。 |
:lang |
基於語言(HTMLlang屬性的值)匹配元素。 |
:last-child |
匹配兄弟元素中最末的那個元素。 |
:last-of-type |
匹配兄弟元素中最後一個某種型別的元素。 |
:left |
在分頁媒體中,匹配左手邊的頁。 |
:link |
匹配未曾訪問的連結。 |
:local-link |
匹配指向和當前文件同一網站頁面的連結。 |
:is() |
匹配傳入的選擇器列表中的任何選擇器。 |
:not |
匹配作為值傳入自身的選擇器未匹配的物件。 |
:nth-child |
匹配一列兄弟元素中的元素——兄弟元素按照an+b形式的式子進行匹配(比如2n+1匹配元素1、3、5、7等。即所有的奇數個)。 |
:nth-of-type |
匹配某種型別的一列兄弟元素(比如,<p> 元素)——兄弟元素按照an+b形式的式子進行匹配(比如2n+1匹配元素1、3、5、7等。即所有的奇數個)。 |
:nth-last-child |
匹配一列兄弟元素,從後往前倒數。兄弟元素按照an+b形式的式子進行匹配(比如2n+1匹配按照順序來的最後一個元素,然後往前兩個,再往前兩個,諸如此類。從後往前數的所有奇數個)。 |
:nth-last-of-type |
匹配某種型別的一列兄弟元素(比如,<p> 元素),從後往前倒數。兄弟元素按照an+b形式的式子進行匹配(比如2n+1匹配按照順序來的最後一個元素,然後往前兩個,再往前兩個,諸如此類。從後往前數的所有奇數個)。 |
:only-child |
匹配沒有兄弟元素的元素。 |
:only-of-type |
匹配兄弟元素中某型別僅有的元素。 |
:optional |
匹配不是必填的form元素。 |
:out-of-range |
按區間匹配元素,當值不在區間內的的時候匹配。 |
:past |
匹配當前元素之前的元素。 |
:placeholder-shown |
匹配顯示佔位文字的input元素。 |
:playing |
匹配代表音訊、視訊或者相似的能“播放”或者“暫停”的資源的,且正在“播放”的元素。 |
:paused |
匹配代表音訊、視訊或者相似的能“播放”或者“暫停”的資源的,且正在“暫停”的元素。 |
:read-only |
匹配使用者不可更改的元素。 |
:read-write |
匹配使用者可更改的元素。 |
:required |
匹配必填的form元素。 |
:right |
在分頁媒體中,匹配右手邊的頁。 |
:root |
匹配文件的根元素。 |
:scope |
匹配任何為參考點元素的的元素。 |
:valid |
匹配諸如<input> 元素的處於可用狀態的元素。 |
:target |
匹配當前URL目標的元素(例如如果它有一個匹配當前URL分段的元素)。 |
:visited |
匹配已訪問連結。 |
偽元素:偽元素以類似方式表現,不過表現得是像你往標記文字中加入全新的HTML元素一樣,而不是向現有的元素上應用類。偽元素開頭為雙冒號::
。
選擇器 | 描述 |
---|---|
::after |
匹配出現在原有元素的實際內容之後的一個可樣式化元素。 |
::before |
匹配出現在原有元素的實際內容之前的一個可樣式化元素。 |
::first-letter |
匹配元素的第一個字母。 |
::first-line |
匹配包含此偽元素的元素的第一行。 |
::grammar-error |
匹配文件中包含了瀏覽器標記的語法錯誤的那部分。 |
::selection |
匹配文件中被選擇的那部分。 |
::spelling-error |
匹配文件中包含了瀏覽器標記的拼寫錯誤的那部分。 |
優先順序
一個選擇器的優先順序可以說是由四個部分相加(分量),可以認為是個十百千 —四位數的四個位數:
- 千位:如果宣告在
style
的屬性(內聯樣式)則該位得一分。這樣的宣告沒有選擇器,所以它得分總是1000。 - 百位:選擇器中包含ID選擇器則該位得一分。
- 十位:選擇器中包含類選擇器、屬性選擇器或者偽類則該位得一分。
- 個位:選擇器中包含元素、偽元素選擇器則該位得一分。
例:
選擇器 | 千位 | 百位 | 十位 | 個位 | 優先順序 |
---|---|---|---|---|---|
h1 |
0 | 0 | 0 | 1 | 0001 |
h1 + p::first-letter |
0 | 0 | 0 | 3 | 0003 |
li > a[href*="en-US"] > .inline-warning |
0 | 0 | 2 | 2 | 0022 |
#identifier |
0 | 1 | 0 | 0 | 0100 |
內聯樣式 | 1 | 0 | 0 | 0 | 1000 |