4.5 高级选择器与属性选择器

4.5 高级选择器与属性选择器

CSS 提供了一系列强大的选择器,可以帮助开发者更精确地选择页面中的元素。除了常规的类选择器、ID 选择器和元素选择器外,CSS 还支持一些高级选择器,包括子选择器、后代选择器、相邻兄弟选择器等,以及属性选择器,这些选择器可以大大提高选择元素的精度和效率。了解这些选择器的用法,有助于我们在 CSS 中创建更简洁和高效的规则。

1. 子选择器与后代选择器

子选择器和后代选择器都用于选择某个元素的子元素或后代元素,但它们之间有细微的区别。

1.1 子选择器(>

子选择器用于选择某个元素的直接子元素。只有与目标元素存在父子关系的元素才会被选中。

示例代码:

<div class="parent">
  <p>Direct child 1</p>
  <div class="child">
    <p>Nested child</p>
  </div>
  <p>Direct child 2</p>
</div>

<style>
  .parent > p {
    color: red;
  }
</style>

解析:

  • .parent > p 仅选中 .parent 中的直接子元素 <p>,不会选中嵌套在 .child 中的 <p>
1.2 后代选择器(空格

后代选择器用于选择某个元素的所有后代元素(不论层级深度)。只要是目标元素的后代,都会被选中。

示例代码:

<div class="parent">
  <p>Direct child 1</p>
  <div class="child">
    <p>Nested child</p>
  </div>
  <p>Direct child 2</p>
</div>

<style>
  .parent p {
    color: blue;
  }
</style>

解析:

  • .parent p 会选中 .parent 内的所有 <p> 元素,包括直接子元素和嵌套的 <p> 元素。

2. 相邻兄弟选择器(+)与一般兄弟选择器(~

这两种选择器用于选择与某个元素相邻的兄弟元素。它们有不同的应用场景。

2.1 相邻兄弟选择器(+

相邻兄弟选择器用于选择紧接在某个元素后面的兄弟元素。即只有在两个元素直接相邻时,第二个元素才会被选中。

示例代码:

<div>
  <p>First paragraph</p>
  <p>Second paragraph</p>
  <div>Third element</div>
  <p>Fourth paragraph</p>
</div>

<style>
  p + p {
    color: green;
  }
</style>

解析:

  • p + p 仅选中紧接在 <p> 后面的第二个 <p> 元素,因此,只有第二个 <p> 会被应用样式。
2.2 一般兄弟选择器(~

一般兄弟选择器用于选择某个元素后面的所有兄弟元素(无论是否直接相邻)。

示例代码:

<div>
  <p>First paragraph</p>
  <p>Second paragraph</p>
  <div>Third element</div>
  <p>Fourth paragraph</p>
</div>

<style>
  p ~ p {
    color: purple;
  }
</style>

解析:

  • p ~ p 会选择所有在 <p> 元素后面的 <p> 元素。因此,第二个和第四个 <p> 会被应用样式。

3. 属性选择器

属性选择器让你能够基于元素的属性值来选择元素。这是一个非常强大的工具,特别是在需要根据元素的属性动态样式化时。

3.1 基本属性选择器([attr]

这个选择器用于选择具有指定属性的元素,不管该属性的值是什么。

示例代码:

<input type="text" placeholder="Enter text">
<input type="password" placeholder="Enter password">
<input type="button" value="Click me">

<style>
  input[type="text"] {
    border: 2px solid blue;
  }
</style>

解析:

  • input[type="text"] 选择所有 type="text"<input> 元素,并给它们添加蓝色边框。
3.2 属性值匹配选择器

属性选择器还可以根据属性值进行部分匹配,支持以下几种匹配方式:

  • [attr="value"]:精确匹配
  • [attr^="value"]:匹配以指定值开头的属性
  • [attr$="value"]:匹配以指定值结尾的属性
  • [attr*="value"]:匹配包含指定值的属性

示例代码:

<a href="https://example.com">Link 1</a>
<a href="https://github.com">Link 2</a>
<a href="https://openai.com">Link 3</a>

<style>
  /* 匹配以 'https://' 开头的链接 */
  a[href^="https://"] {
    color: green;
  }

  /* 匹配以 '.com' 结尾的链接 */
  a[href$=".com"] {
    color: blue;
  }

  /* 匹配包含 'github' 的链接 */
  a[href*="github"] {
    color: red;
  }
</style>

解析:

  • a[href^="https://"] 选择所有 href 属性以 https:// 开头的链接。
  • a[href$=".com"] 选择所有 href 属性以 .com 结尾的链接。
  • a[href*="github"] 选择所有 href 属性包含 github 的链接。
3.3 多属性选择器

你还可以组合多个属性条件来选择符合多个条件的元素。

示例代码:

<a href="https://example.com" target="_blank">Link 1</a>
<a href="https://github.com" target="_self">Link 2</a>
<a href="https://openai.com" target="_blank">Link 3</a>

<style>
  /* 匹配具有特定 href 和 target 属性值的元素 */
  a[href^="https://"][target="_blank"] {
    color: orange;
  }
</style>

解析:

  • a[href^="https://"][target="_blank"] 选择所有 hrefhttps:// 开头且 target="_blank" 的链接。

4. 伪类选择器与伪元素选择器

除了前面提到的选择器外,CSS 还提供了伪类选择器和伪元素选择器,用于选择元素的特定状态或插入虚拟内容。

4.1 伪类选择器(:hover:focus:nth-child 等)

伪类选择器用于选择元素的特殊状态。例如,:hover 用于选中鼠标悬停的元素,:nth-child 用于选择某个元素的特定子元素。

示例代码:

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

<style>
  /* 鼠标悬停时改变背景颜色 */
  li:hover {
    background-color: #ccc;
  }

  /* 选择第一个子元素 */
  li:nth-child(1) {
    font-weight: bold;
  }
</style>

解析:

  • li:hover 选中鼠标悬停时的 <li> 元素。
  • li:nth-child(1) 选中列表中的第一个 <li> 元素。
4.2 伪元素选择器(::before::after

伪元素选择器用于在元素的内容前后插入虚拟内容,例如用来添加图标、引号等。

示例代码:

<p class="quote">This is a quote.</p>

<style>
  /* 在段落前添加引号 */
  .quote::before {
    content: "“";
    font-size: 2rem;
    color: gray;
  }

  /* 在段落后添加引号 */
  .quote::after {
    content: "”";
    font-size: 2rem;
    color: gray;
  }
</style>

解析:

  • .quote::before.quote 元素内容前插入一个引号。
  • .quote::after.quote 元素内容后插入一个引号。

5. 总结

CSS 的高级选择器和属性选择器可以帮助你更精确地选择元素,可极大地提升查找元素的效率。

#前端开发 分享于 2025-03-11

【 内容由 AI 共享,不代表本站观点,请谨慎参考 】