:scope

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

:scope CSS 伪类表示作为选择器要匹配的作为参考点或作用域的元素。

css
/* 选择一个限制作用域的元素 */ :scope { background-color: lime; } 

:scope 匹配的元素取决于它的使用上下文:

  • 当在样式表的根级别使用时,:scope 等效于 :root——在常规 HTML 文档中匹配 <html> 元素。
  • 当在 @scope 块中使用时,:scope 匹配块所定义的作用域的根。它提供了一种从 @scope 块内部应用样式到作用域的根的方法。
  • 当在 DOM API 调用(例如 querySelector()querySelectorAll()matches()Element.closest())中使用时,:scope 匹配调用此类方法的元素。

语法

css
:scope { /* ... */ } 

示例

使用 :scope 来代替 :root

此示例展示了当在样式表的根级别使用时,:scope 等效于 :root。在当前示例中,提供的 CSS 会将 <html> 元素的背景颜色设置为橙色。

HTML

html
<html></html> 

CSS

css
:scope { background-color: orange; } 

结果

使用 :scope 来为 @scope 块的作用域的根元素设置样式

在此示例中,我们使用两个单独的 @scope 块来匹配 .light-scheme.dark-scheme 类中的链接。请注意,:scope 用于选择作用域的根元素并为其设置样式。在此示例中,作用域的根是应用了这些类的 <div> 元素。

HTML

html
<div class="light-scheme"> <p> MDN 涵盖了很多有关 <a href="/zh-CN/docs/Web/HTML">HTML</a>、<a href="/zh-CN/docs/Web/CSS" >CSS</a > 和 <a href="/zh-CN/docs/Web/JavaScript">JavaScript</a> 的信息。 </p> </div> <div class="dark-scheme"> <p> MDN 涵盖了很多有关 <a href="/zh-CN/docs/Web/HTML">HTML</a>、<a href="/zh-CN/docs/Web/CSS" >CSS</a > 和 <a href="/zh-CN/docs/Web/JavaScript">JavaScript</a> 的信息。 </p> </div> 

CSS

css
@scope (.light-scheme) { :scope { background-color: plum; } a { color: darkmagenta; } } @scope (.dark-scheme) { :scope { background-color: darkmagenta; color: antiquewhite; } a { color: plum; } } 

结果

在 JavaScript 中使用 :scope

此示例演示了如何在 JavaScript 中使用 :scope 伪类。如果你需要获取已获取的 Element 的直接后代,这可能会很有用。

HTML

html
<div id="context"> <div id="element-1"> <div id="element-1.1"></div> <div id="element-1.2"></div> </div> <div id="element-2"> <div id="element-2.1"></div> </div> </div> <p>选择的元素 id:<span id="results"></span></p> 

JavaScript

js
const context = document.getElementById("context"); const selected = context.querySelectorAll(":scope > div"); document.getElementById("results").innerHTML = Array.prototype.map .call(selected, (element) => `#${element.getAttribute("id")}`) .join("、"); 

结果

context 的作用域是 idcontext 的元素。所选元素是此上下文的直接子元素——element-1element-2——但不包括它们的后代。

规范

Specification
Selectors Level 4
# the-scope-pseudo

浏览器兼容性

参见