CSS
:is():where():has() 伪元素是 CSS 中用于样式化元素的非常强大的工具。它们是在 CSS 选择器 Level 4 规范中引入的。它们允许我们将样式应用于符合特定条件的任何元素,例如元素的类型、元素的位置和元素的后代。

1、:is()

:is() 伪类可以用于基于选择器的组合来定位元素。它将一系列选择器作为其参数,并在元素匹配任何选择器时返回 true。
例如,如果想要针对所有类名为 isPink 或 isPretty 的元素进行定位,可以使用:is()伪类。
HTML/CSS

  1. div:is(.isPink, .isPretty) {
  2. color: pink;
  3. }
  4. <div class="isPink">
  5. <p>
  6. Pink
  7. </p>
  8. </div>
  9. <div class="isPretty">
  10. <p>
  11. Pretty
  12. </p>
  13. </div>
  14. <div>
  15. <span>
  16. Not Pretty
  17. </span>
  18. </div>

在浏览器中渲染时会看起来像这样:
:is(), :where(), 和:has()伪元素的运用 - 图1

2、:where()

:where() 伪类可以根据条件来定位元素。它以条件作为参数,并在元素匹配条件时返回 true。
例如,如果想要定位所有类名以 bold 开头的元素,可以使用 :where()伪类来实现:
将以下伪类添加到上述CSS文件中,将导致任何具有以 bold 开头的CSS类的子元素渲染为粗体。

  1. div:where([class^="bold"]) {
  2. font-weight: bold;
  3. }

HTML

  1. <div class="isPink">
  2. <p>
  3. Pink
  4. </p>
  5. </div>
  6. <div class="bold_text isPretty">
  7. <p>
  8. Pretty
  9. </p>
  10. </div>

在浏览器中渲染时会看起来像这样:
:is(), :where(), 和:has()伪元素的运用 - 图2
伪元素 :is() 和 :where() 看起来在做同样的事情。但是,伪元素 :is() 用于根据选择器列表匹配元素,而伪元素 :where() 则用于根据条件匹配元素。

3、:has()

:has() 伪类可以用于基于后代元素来定位元素。它以选择器作为参数,并在元素具有与选择器匹配的后代时返回 true。
例如,如果想要定位所有包含元素的元素,可以使用 :has() 伪类来实现。在这一步中,HTML 没有任何变化。这个 CSS 的添加使得元素具有紫色的背景。

  1. div:has(p) {
  2. background-color: purple !important;
  3. }

这是网页现在的样子:
:is(), :where(), 和:has()伪元素的运用 - 图3
这些新的伪元素是任何CSS技能集中不可或缺的工具。经过一些练习,将能够自信地在自己的项目中使用它们。