1. 程式人生 > 實用技巧 >樣式表2

樣式表2

存否和值選擇器

這些選擇器允許基於一個元素自身是否存在(例如href)或者基於各式不同的按屬性值的匹配,來選取元素。

選擇器示例描述
[attr] a[title] 匹配帶有一個名為attr的屬性的元素——方括號裡的值。
[attr=value] a[href="https://example.com"] 匹配帶有一個名為attr的屬性的元素,其值正為value——引號中的字串。
[attr~=value] p[class~="special"]

匹配帶有一個名為attr的屬性的元素 ,其值正為value,或者匹配帶有一個attr

屬性的元素,其值有一個或者更多,至少有一個和value匹配。

注意,在一列中的好幾個值,是用空格隔開的。

[attr|=value] div[lang|="zh"] 匹配帶有一個名為attr的屬性的元素,其值可正為value,或者開始為value,後面緊隨著一個連字元。

下面的示例中,你可以看到這些選擇器是怎樣使用的。

  • 使用li[class],我們就能匹配任何有class屬性的選擇器。這匹配了除了第一項以外的所有項。
  • li[class="a"]匹配帶有一個a類的選擇器,不過不會選中一部分值為a而另一部分是另一個用空格隔開的值的類,它選中了第二項。
  • li[class~="a"]會匹配一個a
    類,不過也可以匹配一列用空格分開、包含a類的值,它選中了第二和第三項。

子字串匹配選擇器

這些選擇器讓更高階的屬性的值的子字串的匹配變得可行。例如,如果你有box-warningbox-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 匹配文件中包含了瀏覽器標記的拼寫錯誤的那部分。

優先順序

一個選擇器的優先順序可以說是由四個部分相加(分量),可以認為是個十百千 —四位數的四個位數:

  1. 千位:如果宣告在style的屬性(內聯樣式)則該位得一分。這樣的宣告沒有選擇器,所以它得分總是1000。
  2. 百位:選擇器中包含ID選擇器則該位得一分。
  3. 十位:選擇器中包含類選擇器、屬性選擇器或者偽類則該位得一分。
  4. 個位:選擇器中包含元素、偽元素選擇器則該位得一分。

例:

選擇器千位百位十位個位優先順序
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