ðš CSS Advent Calendar: Day 20 / CSS Scope with backgrounds
Published on
Updated on
CSS Scope ã®èæ¯ãšãCSS Scope ã®ææ¡ã«è³ããŸã§ã®çµç·¯ããèå¯ããã¡ã³ã¿ã«ã¢ãã«
Table of Contents
Table of Contents
ã¯ããã«
ååãŸã§ã¯ Cascade Layers ã®ææ¡ã«è³ããŸã§ã®çµç·¯ãã¡ã³ã¿ã«ã¢ãã«ãå ·äœçãªãŠãŒã¹ã±ãŒã¹ã解説ããŸããã ãããŸã§è©³çŽ°åºŠã§ã¯ãŒã¯ã¢ã©ãŠã³ãããŠããéšåã«å¯ŸããŠãCascade Layers ãã©ã®ãããªè§£æ±ºçãšãªããã玹ä»ããŠããŸãã
ä»åã¯ãCascade Layers é¢é£ã㊠CSS Scope ãã©ã®ããã«æ©èœãããã®ãªã®ãããã®ä»æ§çå®ã®èæ¯ãšãšãã«è©³ãã解説ããŸãã
åãªããäœ¿ãæ¹ãã§ã¯ãªãããªããã®ä»æ§ãå¿ èŠã«ãªããã©ã®ãããªè°è«ãçµãŠçŸåšã®åœ¢ã«ãªã£ãã®ãã远ããªãããCSS Scope ã®æ¬è³ªãçè§£ãããã£ããã«ãªãã°ãšæããŸãã
Cascade Layers for name-spacing (or even Scoping) styles? No!
CSS ã«ããã Scope ãèŠãŠããåã«ãCascade Layers ãš Scope ã®é¢å¿ã®ç·åŒããæç¢ºã«ããŠããããã§ãã
ãããããCascade Layers ã¯ã»ã¬ã¯ã¿ã®åœ±é¿ãç¹ã«ãã»ã¬ã¯ã¿ãç«¶åããå Žåã®åœ±é¿ãã³ã³ãããŒã«ãããã®ããšããŠæ©èœããç¯ããããŸãã
Cascade Layers ã§æãã€ããããªããšãšããŠãåã³ã³ããŒãã³ãã«å¯Ÿã㊠@layer
ãäœæããããšãæããããŸãã
äŸãã°ã以äžã®ããã« @layer whatever-component
ãäœæããããšãèããŠã¿ãŸãã
@layer whatever-component {
.title { color: blue; }
}
ããã«ããã詳现床æä»£ã« .whatever-component-title
ãšããŠãããã®ã @layer whatever-component
å
ã® .title
ãšã·ã³ãã«ã«è¡šçŸã§ããŸãã
ãã®ãããCascade Layers ã¯åå空éã管çããŸãã¯åœ±é¿ç¯å²ããã¹ã³ãŒãã³ã°ãããããã®ãœãªã¥ãŒã·ã§ã³ã§ãããšæããããšããã®ã¯ãèµ·ããåŸãæãã€ããããããŸããã
ãã ãããã§åŒ·èª¿ããŠããããã®ã¯ãCascade ã®ç«¶åã¯åå空éã®ç«¶åãšåãã§ã¯ãªããCascade Layers ã¯ãã®çš®ã®ã¹ã³ãŒãçšã«é©åã«èšèšãããŠãããã®ã§ã¯ãªããšããããšã§ãã
Cascade Layers ã¯ãã»ã¬ã¯ã¿ããHTML ã®ã©ã®ç¯å²ã§äžèŽããããã¯ã³ã³ãããŒã«ãããã»ã¬ã¯ã¿ã ãã©ã®ããã«ã«ã¹ã±ãŒããããããã®ã¿ã³ã³ãããŒã«ãããã®ãšããŠèšèšãããŠããŸãã
åã³ã³ããŒãã³ãã«å¯Ÿã㊠@layer
ãäœæããäŸã«æ»ããŸãã
whateverA-component ãåžžã« whateverB-component ããªãŒããŒã©ã€ããããã®ãšç¢ºå®ããŠããªãéããA/B åã
ã® @layer whatever-component
ãäœæããŠããããŸã圹ã«ç«ããªã/ã¬ã€ã€ãªã³ã°ã®ä»æ¹ãäžæãªãã®ã«ãªã£ãŠããŸããšæããŸãã
ããã¯ãCascade Layers ã ãDOM ããªãŒãã©ã°ã¡ã³ããè·šãã ã¹ã¿ã€ã«åªå é äœã®è§£æ±ºçããšããŠæ©èœããããã§ãã
ããã«å¯ŸããŠãScope ã¯ãç¹å®ã® DOM ããªãŒãã©ã°ã¡ã³ãã«çµã³ä»ããã¹ã¿ã€ãªã³ã°ãè¡ã解決çããšããŠæ©èœããŸãã
衚çŸãå€ããã°ãScope ã«ã¯ã¹ã¿ã€ã«èšå®ã®ã察象 (ãªãããã®ç¯å²ãªã®ã)ããèšè¿°ããã¬ã€ã€ãŒã«ã¯ã¹ã¿ã€ã«èšå®ã®ãçç± (ãªãããã®åªå é äœ/ã¬ã€ã€ãŒãªã®ã)ããèšè¿°ã§ãããã®ãšãèšããŸãã
ãã£ãŠããã¹ã³ãŒããªãã®ã¬ã€ã€ãŒããã¬ã€ã€ãŒãªãã®ã¹ã³ãŒããããããã«ãŠãŒã¹ã±ãŒã¹ãååšããäž¡è ã¯çžè£çã«æ©èœã§ãããããã©ã¡ãããããã°ã©ã¡ãããäžèŠãšã¯èšããŸããã
以äžãèžãŸãããšãCascade Layers ãš Scope ã®é¢ä¿ã¯ä»¥äžã®å³ã®ããã«è¡šçŸã§ããã§ãããã
Scope ã«é¢ããŠã¯ãDOM ããªãŒãã©ã°ã¡ã³ãã«çµã³ä»ããã¹ã¿ã€ãªã³ã°ãè¡ããã ããã® Scope ã§ããã°ãShadowDOM ã JS toolings ã§ãã£ãŠããã¹ã³ãŒãã³ã°ãããã«è©²åœããŸãã
ããããä»å Cascade Level 6 ã§å®çŸ©ãããŠãã @scope
ã¯ããã以å€ã«ãããŸã§ CSS ã® Scope ãšããŠå¿
èŠãšèªãããŠããèŠä»¶ãæºãããã®ãšããŠèšèšãããŠããŸãã
ãã®èŠä»¶ããããè¿æ¥æ§ïŒProximityïŒããããŒããã¹ã³ãŒãããã°ããŒãã«ã¹ã¿ã€ã«ãšã®å ±åãã§ãããããã¹ãŠã®èŠä»¶ãæºãããã®ã¯æšæºã«ã JS toolings ã«ãååšããŠããŸããã§ããã
Proximity
çŽ 15幎åã« Nicole Sullivan ã OOCSS ãæå±ããäžã§ãè¿æ¥æ§ãã«åŒ·ãé¢é£ãã âcss wishâ ãè¿°ã¹ãŠããŸããã çè ã®èŠ³æž¬ç¯å²ã§ã¯ãããã Scope Proximity ã«æ¥è§Šããæãå€ããªãœãŒã¹ã§ãã
Cascade 㯠Specificity ãåãå Žåã¯åã«åŸã«æžãããã«ãŒã«ãåªå ããŸãã
/* theme ã«å¿ãããªã³ã¯ã®è²ãèšå®*/
.light-theme a { color: purple; }
.dark-theme a { color: plum; }
ãã®ãããäŸãã°ä»¥äžã®ãããªæå®ãããŠããçŽæã«åã㊠.light-theme
ã®ãªã³ã¯ã¯ plum
ã«ãªããŸãã
<div class="dark-theme">
<a href="#">I am plum.</a>
<div class="light-theme">
<a href="#">I expect to be purple, but I am plumð¥¹</a>
</div>
</div>
OOCSS ã«ä»£è¡šãããããã©ã°ã¡ã³ãåäœã® âModular ãªã¹ã¿ã€ã«â ãå®çŸããã«ãããŠã¯ããé åºãããããã©ãã ã察象ãšããèŠçŽ ã«è¿ããããšããæ å ±ãã®æ¹ããèªç¶ãã€æå¹ã§ãã
ããããCSS ã«ãããŠãã©ãã ãè¿ããããšããæŠå¿µã¯ Specificity ãªã©ä»ã§ã®ä»£æ¿ãååšãããCascade ã«ãããŠãæãè¿ãç¥å ããšããåºæºãååšããªããããçŽæã«å¿ããã¹ã¿ã€ãªã³ã°ã¯ã§ããŸããã§ããã
ããã§ã@scope
ã§ã¯ãModular ãªã¹ã¿ã€ãªã³ã°ã«ãããŠå°éãããã¹ããè¿æ¥æ§/Proximityããå°å
¥ããŠããŸãã
äŸãã°ã以äžã®ããã«èšè¿°ããããšã§ãããããã®ã¹ã³ãŒãã«å¯Ÿã㊠hop æ°ã®å°ããïŒè¿ãïŒæ¹ã®ã¹ã¿ã€ã«ãåªå ãããããã«ãªããŸãã
@scope (.light-theme) {
a { color: purple; }
}
@scope (.dark-theme) {
a { color: plum; }
}
<div class="dark-theme">
<a href="#">I am plum.</a>
<div class="light-theme">
<a href="#">I am purple!</a>
</div>
</div>
Donut Scoping
åç¯ã®ãProximityãã¯äž»ã«ãã©ã®ã¹ã³ãŒãã«ãŒãã«è¿ããããšããåé¡ãæ±ããŸããããå®éã®ã³ã³ããŒãã³ãã§ã¯ãã³ã³ããŒãã³ãã®å éšèŠçŽ ããšããã¹ããããåã³ã³ããŒãã³ãããåºå¥ããå¿ èŠããã°ãã°ãããŸãã
ã³ã³ããŒãã³ãã BEM 颚ã«è¡šçŸãããšã以äžã®ãããªèŠçŽ ã§æ§æãèããããŸãã
- ã³ã³ããŒãã³ãå€åŽã®ãBlockãïŒã³ã³ããŒãã³ãã®ã©ãããŒéšåïŒ
- ãã® Block ã«çµã³ã€ããå éšã®ãElementã
- ãµãã³ã³ããŒãã³ãããã¹ãã§ãããSlotããŸãã¯ãDonut Holeã
<div class="component"> <!-- Component Block -->
<h2 class="component__title">...</h2> <!-- Component Element -->
<div class="sub-component"> Button, Input, etc...</div> <!-- Donut Hole -->
</div>
ããã§éèŠãªã®ã¯ãããèŠçŽ ããã©ã®ã³ã³ããŒãã³ãã«å±ããŠãããããæç¢ºã«ããããšã§ãã ãã®èŠçŽ ã®ãæææš©ããã©ãã«ãããã«ãã£ãŠãããããElementããªã®ããDonut Holeããªã®ããæ±ºãŸããŸãã BEM ã¯ãã®æææš©ãåœåèŠåã§è¡šçŸããããšãããã®ãšãèšããŸãã
/* ã³ã³ããŒãã³ãããªãŒå
ã®ãã¹ãŠã®ã¿ã€ãã« */
.component .title { /* ç¯å²ãåºã */ }
/* ã³ã³ããŒãã³ãã®çŽæ¥ã®åã§ããã¿ã€ãã«ã®ã¿ */
.component > .title { /* DOM æ§é ã«äŸåããããŠãã */ }
/* BEM: ã³ã³ããŒãã³ãã«å±ããã¿ã€ãã«ãšããã»ãã³ãã£ã¯ã¹ãæã€ */
.component__title { /* åœåèŠåã§æææš©ã衚çŸã§ããŠããã */ }
Nicole Sullivan ã¯ãã®ã³ã³ããŒãã³ãå ã®æææš©ããããã¹ã³ãŒãã®åé¢ããããŒããã¹ã³ãŒãããšåä»ããŸããã
ãã® DOM ãã©ã°ã¡ã³ãã®ãæææš©ããåœåèŠåã§ã¯ãªããæšæºã® CSS ã§è¡šçŸã§ããããã«ããããšããã®ãã@scope
ã®ãäžéå¢çãïŒscoping limitsïŒã®çºç«¯ã§ãã
@scope
ãçšãããšãããŒããã¹ã³ãŒãã¯ä»¥äžã®ããã«è¡šçŸã§ããŸãã
@scope (.component) to (.sub-component) {
.title { color: blue; }
}
@scope
ã«ãããæææš©ã®ç¯å²ãã®æç¢ºåã¯ãBEM ã CSS Modulesã CSS in JS ã§å®çŸãé£ãã£ãããA ãã B ã®ç¯å²ãŸã§ã§ããé©çšãããªãã¹ã¿ã€ã«ããšããããŒããæ§é ãå®çŸã§ããç¹ã§ãéåžžã«åŒ·åã§ãã
Two approaches of âscopeâ â Global embracing Scope
Day14 ~ Day16 ã§ã¿ãŠããããã«ãCSS ã«ããã Scope ã«ã¯ããããŸã§æ§ã ãªã¢ãããŒãç·šã¿åºãããŠããŸããã
ãã®äžã§ããããã®ã¢ãããŒãã¯ãäž»ã«ä»¥äžã®2ã€ã«å€§å¥ãããŸãã
- Isolation: ã°ããŒãã«ã®åœ±é¿ãåãããã°ããŒãã«ã«ã¯åœ±é¿ãäžããªããDOM ãã©ã°ã¡ã³ãïŒããããã³ã³ããŒãã³ãïŒãã°ããŒãã«ïŒãã¹ãïŒããå®å šã«åé¢ããåå空éã
- Containment: ã°ããŒãã«ã®åœ±é¿ãåããããã°ããŒãã«ã«ã¯åœ±é¿ãäžããªããDOM ãã©ã°ã¡ã³ãïŒããããã³ã³ããŒãã³ãïŒãã°ããŒãã«ïŒãã¹ãïŒã®äžã§åé¢ãã âãã匱ãâ åå空éã
ãããŸã§ã«æšæºåŽã§ååšããŠãã <style scoped>
ã Scoped Styles(CSS Scoping Module Level 1) ã¯ãã¹ã¿ã€ã«ããã©ã°ã¡ã³ãåäœã§åé¢ãããšãããŠãŒã¹ã±ãŒã¹ã«ã¯å¯ŸåŠããèšèšã§ããã
ãããã<style scoped>
ã«ãããŠã¯ãHTML ã§ã¹ã³ãŒãã衚çŸãã仿§ã ã£ããããã¹ã³ãŒãã®åå©çšæ§ããHTML ã§å®£èšãããã¹ã³ãŒããš CSS ãšã®çµã³ä»ããå®è£
äžã®èª²é¡ãšãªã£ãŠããŸããã
Scoped Styles(CSS Scoping Module Level 1) ã«é¢ããŠã¯ã@scope
ãçšã㊠CSS ã§ã¹ã³ãŒããèšè¿°ã§ãããã®ãšãããŠããŸããããããŒããã¹ã³ãŒãã®æ¬ åŠãã¹ã³ãŒãã®åŒ·ãã Specificity ããã匷ãã!important
ã«ããé転ã仿§ã«å«ãŸããŠãããããIsolation ã®æ§è³ªã滲ã¿åºãŠãããã®ã§ããã
ãããã®çå®ãããŠããäžãæšæºåã®åªå 床ã ShadowDOM ã«ç§»ããæçµçã« Isolation ã®æ§è³ªãæã£ã ShadowDOM ãé€ããŠã¹ã³ãŒããå®çŸãããã®ãã§ãŠããªãç¶æ ã§ããã
2 ã®ãããªã¹ã³ãŒããéæãããœãªã¥ãŒã·ã§ã³ãæšæºåŽã«ãªããŸãŸãLightDOM ã«ãããã¹ã³ãŒããæ±ã㊠BEM ãªã©ã®èŠçŽã CSS Modules ãªã©ã®ãµãŒãããŒãã£è£œããŒã«ãçºå±ããŸãã
ãããã LightDOM ã«ãããã¹ã³ãŒãããã€ãã£ã CSS ã§å¯ŸåŠããããšããéèŠã¯é«ãŸã£ãŠããã以äžãªã©ã¯ããã«è©²åœãããã®ã§ãã
- [css-scoping] Support for CSS namespaces · Issue #270 · w3c/csswg-drafts
- [css-selectors] Proposal: Selector Boundary · Issue #5057 · w3c/csswg-drafts
- [css-scoping] Please bring back scoped styles · Issue #3547 · w3c/csswg-drafts
ãããããããŸã§ã®è°è«ã§ã¯ãIsolation ã Containment ããã¹ã³ãŒãã«å¯Ÿãã 2 ã€ã®ã¢ãããŒããæ··åãããããšããŸãŸãããŸããã
ãããŸã§åœåèŠåã JS tooling ã§è§£æ±ºããŠãããã°ããŒãã«ã®åœ±é¿ãåãããContainmentãã«äž»çŒã眮ããæšæºåŽã®ãœãªã¥ãŒã·ã§ã³ãèšããããšååºçºããã®ããCSS Scope ã§ãã
Where to put Proximity in the Cascade?
ãã®åæã®ããšãScope ã®è¿æ¥æ§ïŒProximityïŒã Cascade ã®ã©ãã«é 眮ãã¹ãããšããåé¡ã«å¯ŸããŠã䞻㫠2ã€ã®ã¢ãããŒããæ€èšãããŸããã
1: Strong Proximity
å ã ãæšæºåŽã§æç€ºãããŠãã Scoped Styles(CSS Scoping Module Level 1) ã Shadow DOM ã«è¿ããã®ã§ãã¹ã³ãŒãã® Proximity ã Specificityãããåªå ãããèšèšã§ãã
/* ã°ããŒãã«ã¹ã¿ã€ã« */
aside#sidebar p { color: red; } /* é«ã詳现床 */
/* ã¹ã³ãŒãå
ã®ã¹ã¿ã€ã« */
@scope (aside) {
p { color: green; } /* äœã詳现床ã ããè¿ã */
}
Proximity ã Specificityãããåªå
ãããèšèšã§ã¯ãp
èŠçŽ ã«ããè¿ãã¹ã³ãŒãã®ã¹ã¿ã€ã«ãã詳现床ã«é¢ä¿ãªãåªå
ãããŸãã
ãã£ãŠãäŸã®å Žåã® p
èŠçŽ ã¯ green ã«ãªããŸãã
Specificity ããã Cascade ã«ãããåªå é äœãé«ããšããããšã¯ãåºæ¬çã« Specificity ãå©çšããŠããçŸç¶ãããããšãããçš® (Shadow)Context ãäœããã« Shadow DOM ã®ãããªã¹ã¿ã€ã«ã®ã«ãã»ã«åãå®çŸããŠãããšããããšãã§ããŸãã
ä»åã® Scope æšæºåãããã³ã³ããŒãã³ãå ã®ã¹ã¿ã€ã«ã¯å€éšããã®å¹²æžãåãã«ãããã匷ãã«ãã»ã«åãå®çŸããããšãããã®ã§ããã°ãProximity ã Specificity ãããé«åªå 床ã«ãããšããéžæã ã£ãã§ãããã
ããããã°ããŒãã«ã¹ã¿ã€ã«ããŠãŒãã£ãªãã£ã¯ã©ã¹ãã³ã³ããŒãã³ãã«é©çšãããå Žåããã®éœåºŠ @scope
ã®äžã§æç€ºçãªå¯Ÿå¿ãå¿
èŠã«ãªããŸãã
Tailwind ãªã©ãå©çšããŠãããšã.text-red-500
ã®ãããªã¯ã©ã¹ãã³ã³ããŒãã³ãå
ã§ã䜿ãããšã«ãªããéœåºŠ @scope
ã®äžã§å®£èšããã®ã¯ãã¹ããŒããªããæ¹ãšã¯èšããŸããã
Shadow DOM ã§ã¯ Custom Properties ã ::part()
ãªã©ã®ä»çµã¿ã§è§£æ±ºçãååšãã¯ããäžæ¹ãLight DOM ã§ã®ã¹ã³ãŒãã«ãã®ãããªè€éãªä»çµã¿ãæã¡èŸŒãã®ã¯é¿ããããšããæèŠãå€ããããŸããã
ã°ããŒãã«ã®åœ±é¿ãåããã°ããŒãã«ã«ã¯åœ±é¿ãäžããªãããContainmentã ãªã¹ã³ãŒããå®çŸããç®çã®äžã§ã¯ãSpecificity ãã匷ã Proximity ã¯ã¹ã³ãŒããšããŠåŒ·ãããŸããã
2: Weak Proximity
äžæ¹ãWeak Proximity ã¯ãCascade ã«ãã㊠Proximity 㯠Specificity ãããäœåªå 床ã®äœçœ®ã«é 眮ããæ¡ã§ãã
ãããŸã§ Specificity ãäž»èŠãªåªå 床å€å®åºæºãšããŠæ©èœãããProximity 㯠Specificity ãåãå Žåã®ã¿èæ ®ããããCSS Scope ã§æ°ãã«åºãŠãã Scope ã®ç«ã¡äœçœ®ãšãªããŸãã
äžèšãšåãäŸã§ Weak Proximity ã§ã¯ã aside#sidebar p
ã®é«ã詳现床ãåªå
ãããp
èŠçŽ ã¯ red ã«ãªããŸãã
Weak Proximity ãæ¡çšããã¡ãªãããšããŠã¯ãäž»ã«2ã€æããããŠããŸãã
ãŸããWeak Proximity ã ãšã@scope
ã®äžã« Specificity ãå¹²æžã§ãããããã°ããŒãã«ã¹ã¿ã€ã«ããŠãŒãã£ãªãã£ã¯ã©ã¹ãã³ã³ããŒãã³ãã«ãæµãããããã«é©çšãããŸãã
ãŸããCSS Modules ã styled-components ãšãã£ãã詳现床ããŒã¹ã§åªå
é äœã倿ããŠããæ¢åææ³ããã®ç§»è¡ããããããªããŸãã
詳现床ããã匱ã Proximity ã§ããã°ã詳现床åæã®æåã倧ããå€ããããšãªãããããã®ããŒã«ããæšæºã® @scope
ãžã®ç§»è¡ãèããããšãã§ããŸãã
以äžãèžãŸã㊠Proximity ã¯ãSpecificity ããäœåªå ãOrder of Appearance ããé«åªå ãšãªãäœçœ®ã«é 眮ãããéã³ãšãªããŸããã
以äžããCascade Layers ãš Proximity ãèžãŸãããå·çæç¹ã§æãæ°ãã Cascade ã§ãã
- ããå ç¢ã« Modular ãªã¹ã¿ã€ã«ãå®çŸããããã® Proximity ãšããæŠå¿µ
- ã³ã³ããŒãã³ãã®ãæææš©ã®ç¯å²ããæç¢ºåãããããŒããã¹ã³ãŒããã«å¯Ÿããæšæºçãªãœãªã¥ãŒã·ã§ã³
- ã°ããŒãã«ã¹ã¿ã€ã«ãšå ±åå¯èœãã€ãSpecificity ãåãå Žåã®ãã©ãŒã«ããã¯ããšããŠãæ©èœãã Cascade äžã§ã® Proximity ã®äœçœ®ä»ã
ããããå®çŸãã @scope
㯠Interop 2025 ã§æ³šåããã Focus Areas ã®äžã€ãšãªã£ãŠãããä»å¹Žäžã«äž»èŠãã©ãŠã¶ã§ã®å®è£
ãæãããšãæåŸ
ãããŸãã
ãã ã£åºããCascadeãã®äžéšã§ããã詳现床ãã«ãã©ã¯ãã£ã¹ãçãŸããªããªã£ããã¢ããªæä»£ã® Web éçºã
Cascade Layers ã @scope
ã«ãã£ãŠãã¢ããªæä»£ã® Web ã§æã
ã確ç«ããŠããèšèšææ³/ãã©ã¯ãã£ã¹ã«ããhintsãã§ãããsuggestionsãã§ãããbalanceãããšããšãã Cascade ã®ç¹æ§ã掻ããããšãå¯èœã«ãªããŸãã
ãšããã§ããhints/suggestionsããšãã CSS ã®èšèªç¹æ§ã¯ãCSS ããDeclarativeãã§ãããšããããšã CSS-way ã§è¡šçŸããŠãããã®ã ãšæããããšãã§ããŸãã
æšä»ã® CSS ã®é²åã俯ç°ãããšããDeclarativeãã§ãããšãã CSS ã®ç¹æ§ã¯ãCascade ã«çãŸã£ãŠãªããã話ã§ã¯ãªããªã£ãŠããŠãããšæããŸãã Web ã«ããã UI ãæ§ç¯ããããããææ®µããããåãããããããã匷åãªåœ¢ã§ããhints/suggestionsããäœçŸãããDeclarativeããªç¹æ§ã滲ã¿åºããŠããŠããããã«æããŸãã
ãããæã ã¯ããã®ç¹æ§ããã©ã掻ãããããšããããšãããã©ã¯ãã£ã¹ããŒã¹ã§ããŸãèããŠããããªãã£ãããã«æããŸãã
æ¬é£èŒã®çµç€ã§ã¯ãWeb ã«ããã UI ã®ãDeclarativeããªç¹æ§ãšä»åŸã® Web Design ã®ããæ¹ã«ã€ããŠãèå¯ããŠãããã°ãšæããŸãã
Appendix
- CSS Scope Proposal & Explainer
- Scope in the Cascade
- Scope Syntax Options
- Nesting, Scoping, and Proximity (a FAQ)
- CSS Cascade 6 (Scope) | Miriam Eric Suzanne
- CSS Scope & Encapsulation
- Early design review of light-DOM CSS Scope proposal · Issue #593 · w3ctag/design-reviews
- CSS Scoping Solutions Brainstorming - Google Docs