屬性選擇器

正如你從 HTML 學習中所知,元素可以擁有屬性,這些屬性提供了關於被標記元素的更多細節。在 CSS 中,你可以使用屬性選擇器來定位具有特定屬性的元素。本課程將向你展示如何使用這些非常有用的選擇器。

預備知識 HTML 基礎(學習基本 HTML 語法)、基本 CSS 選擇器
學習成果
  • 屬性選擇器的基本概念。
  • 存在和值屬性選擇器。
  • 子字串匹配屬性選擇器。

存在和值選擇器

這些選擇器使你可以僅根據屬性的存在(例如 href),或根據與屬性值進行的各種不同匹配來選擇元素。

選擇器 示例 描述
[attr] a[title] 匹配帶有 attr 屬性的元素(屬性名是方括號中的值)。
[attr=value] a[href="https://example.com"] 匹配帶有 attr 屬性且其值與 value 完全相等的元素——字串在引號內。
[attr~=value] p[class~="special"] 匹配帶有 attr 屬性的元素,其值等於 value,或其值在(以空格分隔的)值列表中包含 value
[attr|=value] div[lang|="zh"] 匹配帶有 attr 屬性的元素,其值等於 value 或以 value 開頭,後面緊跟一個連字元。

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

  • 透過使用 li[class],我們可以匹配任何帶有 class 屬性的列表項。這會匹配除第一個之外的所有列表項。
  • li[class="a"] 匹配 class 為 a 的選擇器,但不匹配 class 為 a 且其值中還包含其他以空格分隔的 class 的選擇器。它選擇了第二個列表項。
  • li[class~="a"] 會匹配 class 為 a 的項,也匹配值中包含 a 作為空格分隔列表一部分的項。它選擇了第二個和第三個列表項。
html
<h1>Attribute presence and value selectors</h1>
<ul>
  <li>Item 1</li>
  <li class="a">Item 2</li>
  <li class="a b">Item 3</li>
  <li class="ab">Item 4</li>
</ul>
css
body {
  font-family: sans-serif;
}
li[class] {
  font-size: 120%;
}

li[class="a"] {
  background-color: yellow;
}

li[class~="a"] {
  color: red;
}

嘗試編輯上面的 CSS,新增一個規則,僅選擇 class 屬性值為 ab 的列表項,併為它們設定 white 文字 colorpurple background-color

子字串匹配選擇器

這些選擇器允許對屬性值中的子字串進行更高階的匹配。例如,如果你有 class box-warningbox-error,並且想要匹配所有以字串 "box-" 開頭的項,你可以使用 [class^="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 出現在字串中任何位置的屬性值,因此它匹配我們所有的列表項。
html
<h1>Attribute substring matching selectors</h1>
<ul>
  <li class="a">Item 1</li>
  <li class="ab">Item 2</li>
  <li class="bca">Item 3</li>
  <li class="bcabc">Item 4</li>
</ul>
css
body {
  font-family: sans-serif;
}
li[class^="a"] {
  font-size: 120%;
}

li[class$="a"] {
  background-color: yellow;
}

li[class*="a"] {
  color: red;
}

嘗試編輯上面的 CSS,新增一個規則,僅選擇 class 屬性值以 bc 結尾的列表項,併為它們設定 2px 寬、solidblackborder。你可能需要使用 選擇器列表 來解決這個問題。

總結

現在我們已經完成了屬性選擇器,你可以繼續閱讀下一篇文章,瞭解偽類和偽元素選擇器。