:scope
åºçº¿
广æ³å¯ç¨
èª 2020å¹´1æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
:scope CSS 伪类表示ä½ä¸ºéæ©å¨è¦å¹é
çä½ä¸ºåèç¹æä½ç¨åçå
ç´ ã
/* éæ©ä¸ä¸ªéå¶ä½ç¨åçå
ç´ */
:scope {
background-color: lime;
}
:scope å¹é
çå
ç´ åå³äºå®ç使ç¨ä¸ä¸æï¼
- å½å¨æ ·å¼è¡¨çæ ¹çº§å«ä½¿ç¨æ¶ï¼
:scopeçæäº:rootââå¨å¸¸è§ HTML ææ¡£ä¸å¹é <html>å ç´ ã - å½å¨
@scopeåä¸ä½¿ç¨æ¶ï¼:scopeå¹é åæå®ä¹çä½ç¨åçæ ¹ã宿ä¾äºä¸ç§ä»@scopeåå é¨åºç¨æ ·å¼å°ä½ç¨åçæ ¹çæ¹æ³ã - å½å¨ DOM API è°ç¨ï¼ä¾å¦
querySelector()ãquerySelectorAll()ãmatches()æElement.closest()ï¼ä¸ä½¿ç¨æ¶ï¼:scopeå¹é è°ç¨æ¤ç±»æ¹æ³çå ç´ ã
è¯æ³
:scope {
/* ... */
}
示ä¾
>ä½¿ç¨ :scope æ¥ä»£æ¿ :root
æ¤ç¤ºä¾å±ç¤ºäºå½å¨æ ·å¼è¡¨çæ ¹çº§å«ä½¿ç¨æ¶ï¼:scope çæäº :rootãå¨å½å示ä¾ä¸ï¼æä¾ç CSS ä¼å° <html> å
ç´ çèæ¯é¢è²è®¾ç½®ä¸ºæ©è²ã
HTML
<html></html>
CSS
:scope {
background-color: orange;
}
ç»æ
ä½¿ç¨ :scope æ¥ä¸º @scope åçä½ç¨åçæ ¹å
ç´ è®¾ç½®æ ·å¼
卿¤ç¤ºä¾ä¸ï¼æä»¬ä½¿ç¨ä¸¤ä¸ªåç¬ç @scope 忥å¹é
.light-scheme å .dark-scheme ç±»ä¸ç龿¥ã请注æï¼:scope ç¨äºéæ©ä½ç¨åçæ ¹å
ç´ å¹¶ä¸ºå
¶è®¾ç½®æ ·å¼ã卿¤ç¤ºä¾ä¸ï¼ä½ç¨åçæ ¹æ¯åºç¨äºè¿äºç±»ç <div> å
ç´ ã
HTML
<div class="light-scheme">
<p>
MDN æ¶µçäºå¾å¤æå
³
<a href="/proxy/developer.mozilla.org/zh-CN/docs/Web/HTML">HTML</a>ã<a href="/proxy/developer.mozilla.org/zh-CN/docs/Web/CSS"
>CSS</a
>
å
<a href="/proxy/developer.mozilla.org/zh-CN/docs/Web/JavaScript">JavaScript</a> çä¿¡æ¯ã
</p>
</div>
<div class="dark-scheme">
<p>
MDN æ¶µçäºå¾å¤æå
³
<a href="/proxy/developer.mozilla.org/zh-CN/docs/Web/HTML">HTML</a>ã<a href="/proxy/developer.mozilla.org/zh-CN/docs/Web/CSS"
>CSS</a
>
å
<a href="/proxy/developer.mozilla.org/zh-CN/docs/Web/JavaScript">JavaScript</a> çä¿¡æ¯ã
</p>
</div>
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
<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
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 çä½ç¨åæ¯ id 为 context çå
ç´ ãæéå
ç´ æ¯æ¤ä¸ä¸æçç´æ¥åå
ç´ ââelement-1 å element-2ââä½ä¸å
æ¬å®ä»¬çå代ã
è§è
| è§è |
|---|
| Selectors Level 4> # the-scope-pseudo> |