僅管是相同 Tag,只要其 Attribute 的 Value 不一樣,就能使用 Attribute Selector 選擇該 Tag。
Version
CSS 3
Class Attribute
想選擇所有使用 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;
}
若要選擇 Oomusou
與 Sam
,可選擇所有 tag 中具有 class
attribute。
Custom Attribute
其實 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>
Oomusou
與 Sam
使用了自訂的 my-name
attribute,而 Xiao
則有沒使用任何 attribute。
第 8 行
[my-name] {
color: #f00;
}
若要選擇 Oomusou
與 Sam
,可選擇所有 tag 中具有 my-name
attribute。
Class Attribute on Tag
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>
Oomusou
與 Sam
都使用了 class
attribute,唯 Oomusou
在 <div>
下,而 Sam
在 <p>
下。
第 8 行
p[class] {
color: #f00;
}
若要選擇 Sam
,可選擇所有 tag 中為 <p>
並使用 class
attribute,syntax 為 []
前搭配指定 tag。
[attribute=”value”]
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”]
以 ~=
選擇 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>
Oomusou
與 Sam
擁有多個 class,但都有 name
class。
第 8 行
[class~="name"] {
color: #f00;
}
若要選擇 Oomusou
與 Sam
,可選擇所有 tag 中 class
attribute 包含
name class。
[attribute|=”value”]
以 |=
選擇 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>
Oomusou
與 Sam
的 class 都以 top-
開頭。
第 8 行
[class|="top"] {
color: #f00;
}
若要選擇 Oomusou
與 Sam
,可選擇所有 tag 中 class
attribute 以 top 開頭
,且其後為 -
。
[attribute^=”value”]
以 ^=
選擇 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>
Oomusou
與 Sam
的 class 都以 top
開頭。
第 8 行
[class^="top"] {
color: #f00;
}
若要選擇 Oomusou
與 Sam
,可選擇所有 tag 中 class
attribute 以 top 開頭
。
|=
vs.^=
- 以指定 value 開頭,接著為
-
- 以指定 value 開頭即可
[attribute$=”value”]
以 $=
選擇 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>
Oomusou
與 Sam
的 class 都以 name
結尾。
第 8 行
[class$="name"] {
color: #f00;
}
若要選擇 Oomusou
與 Sam
,可選擇所有 tag 中 class
attribute 以 name 結尾
。
[attribute*=”value”]
以 *=
選擇 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>
Oomusou
、Sam
與 Xiao
的 class 中,都包含 name
字串。
第 8 行
[class*="name"] {
color: #f00;
}
若要選擇 Oomusou
、 Sam
與 Xiao
,可選擇所有 tag 中 class
attribute 包含
name 字串。
Conclusion
- Attribute selector 主要用在
不等於
,可搭配各種 operator 判斷
Reference
MDN, Attribute selector
w3schools.com, CSS Attribute Selectors