1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
|
---
title: 属性选择器
slug: Web/CSS/Attribute_selectors
tags:
- Atttribute
- CSS
- Reference
- Selectors
translation_of: Web/CSS/Attribute_selectors
---
<div>{{CSSRef}}</div>
<p>CSS <strong>属性选择器</strong>通过已经存在的属性名或属性值匹配元素。</p>
<pre class="brush: css no-line-numbers notranslate">/* 存在title属性的<a> 元素 */
a[title] {
color: purple;
}
/* 存在href属性并且属性值匹配"https://example.org"的<a> 元素 */
a[href="https://example.org"] {
color: green;
}
/* 存在href属性并且属性值包含"example"的<a> 元素 */
a[href*="example"] {
font-size: 2em;
}
/* 存在href属性并且属性值结尾是".org"的<a> 元素 */
a[href$=".org"] {
font-style: italic;
}
/* 存在class属性并且属性值包含以空格分隔的"logo"的<a>元素 */
a[class~="logo"] {
padding: 2px;
}</pre>
<h2 id="语法">语法</h2>
<dl>
<dt><code>[<var>attr</var>]</code></dt>
<dd>表示带有以 <var>attr</var> 命名的属性的元素。</dd>
<dt><code>[<var>attr</var>=<var>value</var>]</code></dt>
<dd>表示带有以 <var>attr</var> 命名的属性,且属性值为 <var>value</var> 的元素。</dd>
<dt><code>[<var>attr</var>~=<var>value</var>]</code></dt>
<dd>表示带有以 <var>attr</var> 命名的属性的元素,并且该属性是一个以空格作为分隔的值列表,其中至少有一个值为 <var>value</var>。</dd>
<dt><code>[<var>attr</var>|=<var>value</var>]</code></dt>
<dd>表示带有以 <var>attr</var> 命名的属性的元素,属性值为“value”或是以“value-”为前缀("<code>-</code>"为连字符,Unicode 编码为 U+002D)开头。典型的应用场景是用来匹配语言简写代码(如 zh-CN,zh-TW 可以用 zh 作为 value)。</dd>
<dt><code>[<var>attr</var>^=<var>value</var>]</code></dt>
<dd>表示带有以 <var>attr</var> 命名的属性,且属性值是以 <var>value </var>开头的元素。</dd>
<dt><code>[<var>attr</var>$=<var>value</var>]</code></dt>
<dd>表示带有以 <var>attr</var> 命名的属性,且属性值是以 <var>value </var>结尾的元素。</dd>
<dt><code>[<var>attr</var>*=<var>value</var>]</code></dt>
<dd>表示带有以 <var>attr</var> 命名的属性,且属性值至少包含一个 <var>value </var>值的元素。</dd>
<dt id="case-insensitive"><code>[<em>attr</em> <em>operator</em> <em>value</em> i]</code></dt>
<dd>在属性选择器的右方括号前添加一个用空格隔开的字母 <code>i</code>(或 <code>I</code>),可以在匹配属性值时忽略大小写(支持 ASCII 字符范围之内的字母)。</dd>
<dt id="case-sensitive"><code>[<em>attr</em> <em>operator</em> <em>value</em> s]</code> {{Experimental_Inline}}</dt>
<dd>在属性选择器的右方括号前添加一个用空格隔开的字母 <code>s</code>(或 <code>S</code>),可以在匹配属性值时区分大小写(支持 ASCII 字符范围之内的字母)。</dd>
</dl>
<h2 id="示例">示例</h2>
<h3 id="链接">链接</h3>
<h4 id="CSS">CSS</h4>
<pre class="brush: css notranslate">a {
color: blue;
}
/* 以 "#" 开头的页面本地链接 */
a[href^="#"] {
background-color: gold;
}
/* 包含 "example" 的链接 */
a[href*="example"] {
background-color: silver;
}
/* 包含 "insensitive" 的链接,不区分大小写 */
a[href*="insensitive" i] {
color: cyan;
}
/* 包含 "cAsE" 的链接,区分大小写 */
a[href*="cAsE" s] {
color: pink;
}
/* 以 ".org" 结尾的链接 */
a[href$=".org"] {
color: red;
}</pre>
<h4 id="HTML">HTML</h4>
<pre class="brush: html notranslate"><ul>
<li><a href="#internal">Internal link</a></li>
<li><a href="http://example.com">Example link</a></li>
<li><a href="#InSensitive">Insensitive internal link</a></li>
<li><a href="http://example.org">Example org link</a></li>
</ul></pre>
<h4 id="结果">结果</h4>
<p>{{EmbedLiveSample("Links")}}</p>
<h3 id="多语言">多语言</h3>
<h4 id="CSS_2">CSS</h4>
<pre class="brush: css notranslate">/* 将所有包含 `lang` 属性的 <div> 元素的字重设为 bold */
div[lang] {
font-weight: bold;
}
/* 将所有语言为美国英语的 <div> 元素的文本颜色设为蓝色 */
div[lang~="en-us"] {
color: blue;
}
/* 将所有语言为<span class="op_dict_text2">葡萄牙语</span>的 <div> 元素的文本颜色设为绿色 */
div[lang="pt"] {
color: green;
}
/* 将所有语言为<span class="op_dict_text2">中文</span>的 <div> 元素的文本颜色设为红色
无论是简体中文(zh-CN)还是繁体中文(zh-TW) */
div[lang|="zh"] {
color: red;
}
/* 将所有 `data-lang` 属性的值为 "zh-TW" 的 <div> 元素的文本颜色设为紫色 */
/* 备注: 和 JS 不同,CSS 可以在不使用双引号的情况下直接使用带连字符的属性名 */
div[data-lang="zh-TW"] {
color: purple;
}
</pre>
<h4 id="HTML_2">HTML</h4>
<pre class="brush: html notranslate"><div lang="en-us en-gb en-au en-nz">Hello World!</div>
<div lang="pt">Olá Mundo!</div>
<div lang="zh-CN">世界您好!</div>
<div lang="zh-TW">世界您好!</div>
<div data-lang="zh-TW">世界您好!</div>
</pre>
<h4 id="结果_2">结果</h4>
<p>{{EmbedLiveSample("Languages")}}</p>
<h3 id="HTML_有序列表">HTML 有序列表</h3>
<p>由于 {{htmlattrxref("type", "input")}} 属性主要用于 {{HTMLElement("input")}} 元素,因此 HTML 规范要求 {{htmlattrxref("type", "input")}} 属性的匹配不区分大小写,如果使用属性选择器且添加了 <a href="#case-sensitive">大小写敏感</a> 的修饰符,那么将无法与 {{HTMLElement("ol", "有序列表")}} 的 {{htmlattrxref("type", "ol")}} 属性进行匹配。</p>
<h4 id="CSS_3">CSS</h4>
<pre class="brush: css notranslate">/* 列表类型不需要大小写敏感标志,这是由于 HTML 处理 type 属性的一个怪癖。 */
ol[type="a"] {
list-style-type: lower-alpha;
background: red;
}
ol[type="a" s] {
list-style-type: lower-alpha;
background: lime;
}
ol[type="A" s] {
list-style-type: upper-alpha;
background: lime;
}</pre>
<h4 id="HTML_3">HTML</h4>
<pre class="brush: html; notranslate"><ol type="A">
<li>Example list</li>
</ol></pre>
<h4 id="结果_3">结果</h4>
<p>{{EmbedLiveSample("HTML_ordered_lists")}}</p>
<h2 id="规范">规范</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">规范</th>
<th scope="col">状态</th>
<th scope="col">备注</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName("CSS4 Selectors", "#attribute-selectors", "attribute selectors")}}</td>
<td>{{Spec2("CSS4 Selectors")}}</td>
<td>Adds modifier for ASCII case-sensitive and case-insensitive attribute value selection.</td>
</tr>
<tr>
<td>{{SpecName("CSS3 Selectors", "#attribute-selectors", "attribute selectors")}}</td>
<td>{{Spec2("CSS3 Selectors")}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName("CSS2.1", "selector.html#attribute-selectors", "attribute selectors")}}</td>
<td>{{Spec2("CSS2.1")}}</td>
<td>初始定义</td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p>{{Compat("css.selectors.attribute")}}</p>
<h2 id="参见">参见</h2>
<ul>
<li>{{CSSxRef("attr")}}</li>
<li>Selecting a single element: {{DOMxRef("Document.querySelector()")}}, {{DOMxRef("DocumentFragment.querySelector()")}}, or {{DOMxRef("Element.querySelector()")}}</li>
<li>Selecting all matching elements: {{DOMxRef("Document.querySelectorAll()")}}, {{DOMxRef("DocumentFragment.querySelectorAll()")}}, or {{DOMxRef("Element.querySelectorAll()")}}</li>
<li>The above methods are all implemented based on the {{DOMxRef("ParentNode")}} mixin; see {{DOMxRef("ParentNode.querySelector()")}} and {{DOMxRef("ParentNode.querySelectorAll()")}}</li>
</ul>
|