CSS 属性选择器
到目前为止,你靠标签名、class、id 和树形关系找元素。有时 HTML 自己已经说明真相:这个链接有 target,那个输入是 type="email",地址以 https 开头。属性选择器就读这份真相——不必为每种情况再造一个 class。
什么是属性选择器?
属性选择器找出带有某个 HTML 属性的元素。你可以只查「是否存在」,也可以精确或部分比对取值。属性名写在方括号里:[attr]。
五个日常写法
用这几种,几乎能覆盖常见的属性选择需求。
📊 属性选择器运算符
| 写法 | 简单含义 | 示例 |
|---|---|---|
[attr] |
有这个属性(任意值) | a[target] |
[attr="value"] |
取值恰好是这个 | input[type="email"] |
[attr^="value"] |
取值以此文本开头 | a[href^="https"] |
[attr$="value"] |
取值以此文本结尾 | a[href$=".pdf"] |
[attr*="value"] |
这个文本出现在取值的某处 | a[href*="docs"] |
只看是否存在 — [attr]
方括号里只写名字,意思是:「要有这个属性。」取值是什么无所谓。
存在 — 会打开新标签页的链接
cssa[target] {
font-weight: 600;
}
什么时候有用?
HTML 里的可选标志:带 target 的链接,或带 data-state 的元素——哪怕你还没按取值过滤。
精确取值 — [attr="value"]
= 表示取值必须一字不差相同。取值通常加引号;更清楚也更稳妥。
精确值 — 邮箱输入框
cssinput[type="email"] {
border: 1px solid #0f766e;
}
新建 class,还是用 type?
如果 HTML 里已有 type="email",就直接写进选择器。新建 class(例如 .email-field)适合:同一套外观还要套在没有该属性的元素上。
取值开头 — ^=
^= 表示属性值以此文本开头。对安全地址或共用前缀特别好用。
以…开头 — https 链接
cssa[href^="https"] {
color: #0f766e;
}
取值结尾 — $=
$= 表示取值以此文本结尾。适合 href 或 src 里的文件扩展名。
以…结尾 — PDF 链接
cssa[href$=".pdf"] {
font-style: italic;
}
取值里某处 — *=
*= 表示这段文本出现在取值的任意位置。很强,但容易过宽。若已知开头或结尾,通常 ^= 或 $= 更干净。
包含 — 地址里的 docs 路径
cssa[href*="docs"] {
text-decoration: underline;
}
好习惯
- 选择器里的取值加引号:
type="email" - 页面较乱时加上标签名:
input[type="search"]比光秃秃的[type="search"]更好读 - 拼写与大小写跟 HTML 一致
- 别用属性替代每一个 class;当标记本身已带出事实时再用属性
自己试一试
- 三个链接:一个
https://…,一个以.pdf结尾,一个路径含docs;再加<input type="email">和<input type="text">。 - 写上
a[href^="https"] { color: #0f766e; }——只有安全链接变色。 a[href$=".pdf"] { font-style: italic; }——PDF 链接变斜体。input[type="email"] { border-color: #0f766e; }——只有邮箱框带上边框。- 可选:再看
a[href*="docs"];可能比严格前缀/后缀多命中一些链接。
常见错误
- 明明加引号更清楚更稳妥,却写成不带引号的
[type=email] - 该用
^=却用了*=——「包含」也会命中中间,多出的链接被点亮 - 普通外观用
[class]代替.name - 忘记
=要整个取值——type="text"不等于type="textbox" - 搞混属性名——
hreflang不是href
小结
- 属性选择器用
[ ]针对 HTML 属性 - 只有名字 = 存在;
== 精确值 ^=开头,$=结尾,*=取值中任意位置- 选仍能表达意图的最窄运算符
- 需要时把标签名也接到选择器上
- 在真实的
href与type上练习,然后刷新页面
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部