[属性]

Avatar of Sara Cope
Sara Cope

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 $200 免费积分!

您可以通过多种方式在 CSS 中选择元素。最基本的选择是通过标签名称,例如 p { }。几乎所有比标签选择器更具体的都使用属性 - ID 都选择 HTML 元素上的这些属性。但是,ID 不是开发人员可以选择的唯一属性。我们可以使用元素的任何属性作为选择器。

属性选择具有特殊的语法。以下是一个示例

a[href="https://css-tricks.cn"] {
  color: #E18728;
}

这是一个精确匹配选择器,它只会选择具有确切 href 属性值的链接“https://css-tricks.cn”。

七种不同的类型

属性选择器默认区分大小写(参见下面区分大小写匹配),并用方括号 [] 括起来。

有七种不同的类型匹配您可以使用属性选择器找到,并且每种类型的语法都不同。每个更复杂的属性选择器都建立在精确匹配选择器的语法之上 - 它们都以属性名称开头,以等号结尾,然后是属性值,通常用引号括起来。属性名称和等号之间的内容是选择器之间差异的来源。

[data-value] {
  /* Attribute exists */
}

[data-value="foo"] {
  /* Attribute has this exact value */
}

[data-value*="foo"] {
  /* Attribute value contains this value somewhere in it */
}

[data-value~="foo"] {
  /* Attribute has this value in a space-separated list somewhere */
}

[data-value^="foo"] {
  /* Attribute value starts with this */
}

[data-value|="foo"] {
  /* Attribute value starts with this in a dash-separated list */
}

[data-value$="foo"] {
  /* Attribute value ends with this */
}

值包含:属性值包含一个术语作为唯一值,列表中的值或作为另一个值的组成部分。要使用此选择器,请在等号之前添加一个星号 (*)。例如,img[alt*="art"] 将选择具有“抽象艺术”和“运动员开始一项新的运动”的 alt 文本的图像,因为值“art”在“starting”这个词中。

值在以空格分隔的列表中:值是唯一的属性值,或者是以空格分隔的一组值中的一个完整值。与“包含”选择器不同,此选择器不会将值视为一个词片段。要使用此选择器,请在等号之前添加一个波浪号 (~)。例如,img[alt~="art"] 将选择具有“抽象艺术”和“艺术展”的 alt 文本的图像,但不选择“运动员开始一项新的运动”(“包含”选择器选择)。

值以开头:属性值以选定术语开头。要使用此选择器,请在等号之前添加一个插入符 (^)。别忘了,区分大小写很重要。例如,img[alt^=”art”] 将选择具有“艺术展”和“艺术模式”的 alt 文本的图像,但不选择具有“亚瑟·米勒”的 alt 文本的图像,因为“Arthur”以大写字母开头。

值是连字符分隔列表中的第一个:此选择器与“以开头”选择器非常相似。在这里,选择器匹配一个值,该值要么是唯一的,要么是连字符分隔的值列表中的第一个值。要使用此选择器,请在等号之前添加一个管道字符 (|)。例如,li[data-years|="1900"] 将选择具有“1900-2000”的 data-years 值的列表项,但不会选择具有“1800-1900”的 data-years 值的列表项。

值以结尾:属性值以选定术语结尾。要使用此选择器,请在等号之前添加一个美元符号 ($)。例如,a[href$="pdf"] 选择每个以 .pdf 结尾的链接。

关于引号的说明:在某些情况下,您可以省略围绕值的引号,但是没有引号进行选择的规则在跨浏览器方面是不一致的。引号始终有效,因此,如果您坚持使用引号,则可以确保您的选择器将起作用。

查看 CodePen 上的 属性选择器,由 CSS-Tricks (@css-tricks) 创建。

有趣的事实:这些值被视为字符串,因此您不必像在类或 ID 选择器中使用不寻常字符时那样进行任何复杂的字符转义以使它们匹配。

[class="(╯°□°)╯︵ ┻━┻"]{
  color: red;
  font-weight: bold;
}

不区分大小写匹配

不区分大小写的属性选择器是 CSS 工作组的 选择器级别 4 规范的一部分。如上所述,属性值字符串默认区分大小写,但可以通过在结束括号之前添加 i 来更改为不区分大小写

[attribute="value" i] {
  /* Styles here will apply to elements with:
    attribute="value"
    attribute="VaLuE"
    attribute="VALUE"
    ...etc
  */
}

不区分大小写匹配对于针对包含不可预测的、人工编写的文本的属性非常有用。例如,假设您正在为聊天应用程序设计一个气泡,并且想要向任何包含“hello”文本的消息添加“挥手”图标。您只能使用 CSS 来做到这一点,使用不区分大小写的匹配器来捕获所有可能的变体

查看 CodePen 上的 不区分大小写的 CSS 属性匹配,由 CSS-Tricks (@css-tricks) 创建。

组合它们

您可以将属性选择器与其他选择器(如标签、类或 ID)结合使用。

div[attribute="value"] {
  /* style rules here */
}

.module[attribute="value"] {
  /* style rules here */
}

#header[attribute="value"] {
  /* style rules here */
}

或者甚至组合多个属性选择器。此示例选择具有包含“person”词语作为唯一值或以空格分隔列表中的值的 alt 文本的图像,以及包含“lorem”值的 src

img[alt~="person"][src*="lorem"] {
  /* style rules here */
}

查看 CodePen 上的 组合属性和仅属性选择,由 CSS-Tricks (@css-tricks) 创建。

JavaScript 和 jQuery 中的属性选择器

属性选择器可以在 jQuery 中像任何其他 CSS 选择器一样使用。在 JavaScript 中,您可以使用 document.querySelector()document.querySelectorAll() 使用属性选择器。

查看 CodePen 上的 JS 和 jQuery 中的属性选择器,由 CSS-Tricks (@css-tricks) 创建。

相关

更多信息

浏览器支持

Chrome Safari Firefox Opera IE Android iOS
任何 任何 任何 任何 7+ 任何 任何