點燈坊

失くすものさえない今が強くなるチャンスよ

CSS 之 Attribute Selector [ ]

Sam Xiao's Avatar 2021-04-12

僅管是相同 Tag,只要其 Attribute 的 Value 不一樣,就能使用 Attribute Selector 選擇該 Tag。

Version

CSS 3

Class Attribute

attr000

想選擇所有使用 class attribute 的 tag。

<template>
  <div class="nickname">Oomusou</div>
  <div class="first-name">Sam</div>
  <div>Xiao</div>
</template>

<style scoped>
[class] {
  color: #f00;
}
</style>

第 2 行

<div class="nickname">Oomusou</div>
<div class="first-name">Sam</div>
<div>Xiao</div>

Oomusou 使用 nickname class,Sam 則使用 first-name class,而 Xiao 並沒有使用任何 class。

第 8 行

[class] {
  color: red;
}

若要選擇 OomusouSam,可選擇所有 tag 中具有 class attribute。

Custom Attribute

attr000

其實 attribute selector 不只能用在 class attribute 而已,也能用在自訂 attribute。

<template>
  <div my-name="nickname">Oomusou</div>
  <div my-name="first-name">Sam</div>
  <div>Xiao</div>
</template>

<style scoped>
[my-name] {
  color: #f00;
}
</style>

第 2 行

<div my-name="nickname">Oomusou</div>
<div my-name="first-name">Sam</div>
<div>Xiao</div>

OomusouSam 使用了自訂的 my-name attribute,而 Xiao 則有沒使用任何 attribute。

第 8 行

[my-name] {
  color: #f00;
}

若要選擇 OomusouSam,可選擇所有 tag 中具有 my-name attribute。

Class Attribute on Tag

attr001

Attribute selector 也可只用在指定 tag 下。

<template>
  <div class="nickname">Oomusou</div>
  <p class="first-name">Sam</p>
  <div>Xiao</div>
</template>

<style scoped>
p[class] {
  color: #f00;
}
</style>

第 2 行

<div class="nickname">Oomusou</div>
<p class="first-name">Sam</p>
<div>Xiao</div>

OomusouSam 都使用了 class attribute,唯 Oomusou<div> 下,而 Sam<p> 下。

第 8 行

p[class] {
  color: #f00;
}

若要選擇 Sam,可選擇所有 tag 中為 <p> 並使用 class attribute,syntax 為 [] 前搭配指定 tag。

[attribute=”value”]

attr001

Attribute selector 可搭配各種 operator 使用,如以 = 選擇 attribute 等於 指定 value。

<template>
  <div class="nickname">Oomusou</div>
  <div class="first-name">Sam</div>
  <div>Xiao</div>
</template>

<style scoped>
[class="nickname"] {
  color: #f00;
}
</style>

第 2 行

<div class="nickname">Oomusou</div>
<div class="first-name">Sam</div>
<div>Xiao</div>

Oomusou 使用 nickname class,而 Sam 使用 first-name class。

第 8 號

[class="nickname"] {
  color: #f00;
}

若要選擇 Oomusou,可選擇所有 tag 中 class attribute 為 nickname

[attribute~=”value”]

attr000

~= 選擇 attribute 包含 指定 value。

<template>
  <div class="name nickname">Oomusou</div>
  <div class="name first-name">Sam</div>
  <div class="last-name">Xiao</div>
</template>

<style scoped>
[class~="name"] {
  color: #f00;
}
</style>

第 2 行

<div class="name nickname">Oomusou</div>
<div class="name first-name">Sam</div>
<div class="last-name">Xiao</div>

OomusouSam 擁有多個 class,但都有 name class。

第 8 行

[class~="name"] {
  color: #f00;
}

若要選擇 OomusouSam,可選擇所有 tag 中 class attribute 包含 name class。

[attribute|=”value”]

attr000

|= 選擇 attribute 以指定 value 開頭,其後接著 hyphen -

<template>
  <div class="top-header">Oomusou</div>
  <div class="top-text">Sam</div>
  <div>Xiao</div>
</template>

<style scoped>
[class|="top"] {
  color: #f00;
}
</style>

第 2 行

<div class="top-header">Oomusou</div>
<div class="top-text">Sam</div>
<div>Xiao</div>

OomusouSam 的 class 都以 top- 開頭。

第 8 行

[class|="top"] {
  color: #f00;
}

若要選擇 OomusouSam,可選擇所有 tag 中 class attribute 以 top 開頭,且其後為 -

[attribute^=”value”]

attr000

^= 選擇 attribute 以指定 value 開頭。

<template>
  <div class="topheader">Oomusou</div>
  <div class="toptext">Sam</div>
  <div>Xiao</div>
</template>

<style scoped>
[class^="top"] {
  color: #f00;
}
</style>

第 2 行

<div class="topheader">Oomusou</div>
<div class="toptext">Sam</div>
<div>Xiao</div>

OomusouSam 的 class 都以 top 開頭。

第 8 行

[class^="top"] {
  color: #f00;
}

若要選擇 OomusouSam,可選擇所有 tag 中 class attribute 以 top 開頭

|= vs. ^=

  • 以指定 value 開頭,接著為 -
  • 以指定 value 開頭即可

[attribute$=”value”]

attr000

$= 選擇 attribute 以指定 value 結尾。

<template>
  <div class="nickname">Oomusou</div>
  <div class="first-name">Sam</div>
  <div>Xiao</div>
</template>

<style scoped>
[class$="name"] {
  color: #f00;
}
</style>

第 2 行

<div class="nickname">Oomusou</div>
<div class="first-name">Sam</div>
<div>Xiao</div>

OomusouSam 的 class 都以 name 結尾。

第 8 行

[class$="name"] {
  color: #f00;
}

若要選擇 OomusouSam,可選擇所有 tag 中 class attribute 以 name 結尾

[attribute*=”value”]

attr003

*= 選擇 attribute 包含部分 value 即可。

<template>
  <div class="nickname">Oomusou</div>
  <div class="first-name">Sam</div>
  <div class="name">Xiao</div>
</template>

<style scoped>
[class*="name"] {
  color: #f00;
}
</style>

第 2 行

<div class="nickname">Oomusou</div>
<div class="first-name">Sam</div>
<div class="name">Xiao</div>

OomusouSamXiao 的 class 中,都包含 name 字串。

第 8 行

[class*="name"] {
  color: #f00;
}

若要選擇 OomusouSamXiao,可選擇所有 tag 中 class attribute 包含 name 字串。

Conclusion

  • Attribute selector 主要用在 不等於,可搭配各種 operator 判斷

Reference

MDN, Attribute selector
w3schools.com, CSS Attribute Selectors