CSS 属性选择器
属性选择器 (Attribute Selectors) 允许你根据 HTML 属性的存在、值或部分值来定位元素。
这提供了一种强大的方法,无需依赖类或 ID 即可应用样式,使你的 CSS 更加灵活和易于维护。在处理动态生成的内容或基于特定数据属性(如 data-*)设置样式时,它们特别有用。
1. 理解属性选择器
属性选择器有多种形式,每种形式提供不同的定位方式。以下是不同类型的细分:
[attribute]:定位拥有指定属性的元素,不论其值为何。[attribute="value"]:定位指定属性具有确切指定值的元素。[attribute~="value"]:定位指定属性包含指定值(作为空格分隔的单词之一)的元素。[attribute|="value"]:定位指定属性以指定值开头,后跟连字符 (-) 的元素。通常用于语言代码(例如 en-US)。[attribute^="value"]:定位指定属性以指定值开头的元素。[attribute$="value"]:定位指定属性以指定值结尾的元素。[attribute*="value"]:定位指定属性在字符串中任意位置包含指定值的元素。
让我们通过示例来探索每一个。
1.1 属性存在:[attribute]
此选择器仅检查元素是否存在某个属性。
<a href="https://www.example.com">带 href 的链接</a>
<p title="一个标题">带 title 的段落</p>
<a>不带 href 的链接</a>a[href] {
color: blue;
text-decoration: none;
}
p[title] {
font-style: italic;
}- 第一条规则只样式化第一个
<a>标签,因为它有href属性。 - 第二条规则样式化
<p>标签,因为它有title属性。 - 第二个
<a>标签不会被样式化。
1.2 精确值匹配:[attribute="value"]
此选择器定位属性值与指定值完全匹配的元素。
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="提交">input[type="text"] {
border: 1px solid #ccc;
padding: 5px;
}
input[value="提交"] {
background-color: green;
color: white;
}- 第一条规则样式化文本输入框。
- 第二条规则样式化提交按钮,因为它的
value属性正是 "提交"。
1.3 空格分隔值:[attribute~="value"]
当属性包含一列空格分隔的值(如 class 属性)时,此选择器很有用。
<div class="button primary call-to-action">点我</div>
<div class="button secondary">取消</div>div[class~="button"] {
padding: 10px 20px;
border: none;
cursor: pointer;
}
div[class~="primary"] {
background-color: blue;
color: white;
}<div>,因为它们都有 "button" 类。<div>,因为它有 "primary" 类。1.4 连字符分隔值:[attribute|="value"]
通常用于语言代码。
<p lang="en-US">Hello, World!</p>
<p lang="en-GB">Hello, World!</p>
<p lang="en">Hello, World!</p>
<p>Bonjour le monde!</p>p[lang|="en"] {
font-weight: bold;
}- 此规则将样式化前三个
<p>元素,因为它们的lang属性以 "en" 开头且后跟连字符,或是确切的 "en"。
1.5 以...开头:[attribute^="value"]
定位属性值以指定字符串开头的元素。
<a href="https://www.begindev.com/page1">页面 1</a>
<a href="https://www.begindev.com/page2">页面 2</a>
<a href="http://www.anotherdomain.com/page3">页面 3</a>a[href^="https://www.begindev.com"] {
color: green;
}此规则将样式化前两个 <a> 元素,因为它们的 href 以 "https://www.begindev.com" 开头。
1.6 以...结尾:[attribute$="value"]
定位属性值以指定字符串结尾的元素。常用于根据文件类型设置样式。
<img src="images/logo.png">
<img src="images/banner.jpg">
<img src="images/icon.svg">img[src$=".png"] {
border: 2px solid red;
}此规则将样式化第一个 <img> 元素,因为它的 src 以 ".png" 结尾。
1.7 包含:[attribute*="value"]
定位属性值在字符串中任意位置包含指定值的元素。
<input type="text" data-custom-validation="required email">
<input type="text" data-custom-validation="required phone">
<input type="text">input[data-custom-validation*="required"] {
border: 1px solid orange;
}- 此规则将样式化前两个
<input>元素,因为它们的data-custom-validation属性包含单词 "required"。
2. 实战示例与演示
2.1 基于文件类型样式化链接
你可以使用属性选择器根据链接指向的文件类型来设置样式。
a[href$=".pdf"] {
color: red; /* PDF 链接变红 */
/* 可以添加 PDF 图标 */
}
a[href$=".pptx"] {
color: blue; /* PPTX 链接变蓝 */
}2.2 基于属性样式化表单元素
属性选择器在表单样式中非常有用。
input[type="text"] { ... }
input[type="email"] { ... }
input[required] {
background-color: #f0f0f0; /* 高亮必填字段 */
}
button[type="submit"] { ... }2.3 使用 Data 属性 (Data Attributes)
data- 属性用于存储自定义数据。
<div data-theme="dark">深色主题内容</div>
<div data-theme="light">浅色主题内容</div>div[data-theme="dark"] {
background-color: #333;
color: white;
}
div[data-theme="light"] {
background-color: #fff;
color: black;
}