CSS @scope ã«ãŒã«ã解説ããæ£ç¢ºãªã¹ã¿ã€ã«ã«ãã»ã«åã®å¢çãäœæããŸããç¹å®ã®DOMãµãããªãŒå ã®ã¹ã¿ã€ãªã³ã°ãå¶åŸ¡ããæå³ããªãã¹ã¿ã€ã«ã®æŒæŽ©ãé²ãæ¹æ³ãåŠã³ãŸãããã
CSS @scope ã«ãŒã«: ã¢ãã³ãŠã§ãéçºã®ããã®ã¹ã¿ã€ã«ã«ãã»ã«åããã¹ã¿ãŒãã
çµ¶ããé²åãããŠã§ãéçºã®äžçã«ãããŠãCSSã¹ã¿ã€ã«ã广çã«ç®¡çããããšã¯ãä¿å®æ§ãæ¡åŒµæ§ãå
ç¢æ§ã«åªããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãããããžã§ã¯ããè€éã«ãªãã«ã€ããŠãCSSã®ã°ããŒãã«ãªæ§è³ªã¯æå³ããªãã¹ã¿ã€ã«ã®ç«¶åãåŒãèµ·ãããç¹å®ã®ã³ã³ããŒãã³ãããŠã§ãããŒãžã®äžéšã«ã¹ã¿ã€ã«ãåé¢ããããšãå°é£ã«ããŸããCSSã® @scope
ã«ãŒã«ã¯ãæ£ç¢ºãªã¹ã¿ã€ã«ã«ãã»ã«åã®å¢çãäœæããã¡ã«ããºã ãæäŸããããšã§ããã®åé¡ã«å¯Ÿãã匷åãªè§£æ±ºçãæäŸããŸãã
ã¹ã¿ã€ã«ã«ãã»ã«åã®çè§£
ã¹ã¿ã€ã«ã«ãã»ã«åãšã¯ãDOMïŒDocument Object ModelïŒã®ç¹å®ã®éšåã«ã¹ã¿ã€ã«ãåé¢ããæå®ãããã¹ã³ãŒãå€ã®èŠçŽ ã«åœ±é¿ãäžããªãããã«ããèœåãæããŸããããã¯ã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ã«ãšã£ãŠäžå¯æ¬ ã§ãããããã³ã³ããŒãã³ãã«å®çŸ©ãããã¹ã¿ã€ã«ã誀ã£ãŠä»ã®ã³ã³ããŒãã³ãã®å€èгã倿Žããªãããã«ããããã«éèŠã§ãã
åŸæ¥ã®CSSã¯ã°ããŒãã«ãªåå空éã«äŸåããŠãããã¹ã¿ã€ã«ã·ãŒãã®ã©ãã§å®çŸ©ãããã¹ã¿ã€ã«ã§ãã詳现床ãç¶æ¿ã«ãã£ãŠã¯ããŒãžäžã®ã©ã®èŠçŽ ã«ã圱é¿ãäžããå¯èœæ§ããããŸããããã«ããã以äžã®ãããªåé¡ãçºçããå¯èœæ§ããããŸãïŒ
- 詳现床æŠäºïŒ ãããžã§ã¯ãã倧ãããªãã«ã€ããŠã¹ã¿ã€ã«ã®äžæžãããŸããŸãå°é£ã«ãªããè€éã§ä¿å®ãã«ããCSSã«ã€ãªãããŸãã
- ã¹ã¿ã€ã«ã®æŒæŽ©ïŒ ããã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãæå³ããä»ã®ã³ã³ããŒãã³ãã«åœ±é¿ãäžããèŠèŠçãªäžæŽåãäºæãã¬åäœãåŒãèµ·ãããŸãã
- éçºæéã®å¢å ïŒ CSSã®ã°ããŒãã«ãªæ§è³ªã«ãããã¹ã¿ã€ã«é¢é£ã®åé¡ã®ãããã°ã«æéããããããã«ãªããŸãã
CSSã®åœåèŠåïŒBEMãOOCSSãSMACSSïŒãCSS-in-JSã©ã€ãã©ãªãªã©ã®æè¡ããããã®èª²é¡ã«å¯ŸåŠããããšè©Šã¿ãŠããŸãããã@scope
ã«ãŒã«ã¯çã®ã¹ã¿ã€ã«ã«ãã»ã«åãå®çŸããããã®ãã€ãã£ããªCSSãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
CSS @scope ã«ãŒã«ã®ç޹ä»
@scope
ã«ãŒã«ã䜿çšãããšãç¹å®ã®ã¹ã¿ã€ã«ãé©çšãããDOMãµãããªãŒãå®çŸ©ã§ããŸããããã«ãããCSSã«ãŒã«ã®ã¹ã³ãŒããå¶éããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã«æŒãåºããŠåœ±é¿ãäžããã®ãé²ãããšãã§ããŸãã@scope
ã«ãŒã«ã®åºæ¬çãªæ§æã¯æ¬¡ã®ãšããã§ãïŒ
@scope (<scope-root>) to (<scope-limit>)? {
/* CSS rules */
}
<scope-root>
ïŒ ããã¯ã¹ã³ãŒãã®éå§ç¹ãå®çŸ©ããèŠçŽ ã§ãã@scope
ã«ãŒã«å ã®ã¹ã¿ã€ã«ã¯ããã®èŠçŽ ãšãã®åå«ã«é©çšãããŸãã<scope-limit>
(ä»»æ)ïŒ ããã¯ãã¹ã¿ã€ã«ãé©çšãããªããªãå¢çãæå®ããŸããçç¥ãããå Žåãã¹ã³ãŒãã¯<scope-root>
ã®ãã¹ãŠã®åå«ã«åã³ãŸãã
ãããäŸã§èª¬æããŸããããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåããç¬ç«ããŠã¹ã¿ã€ã«ãèšå®ãããã«ãŒãã³ã³ããŒãã³ãããããšããŸãã@scope
ã«ãŒã«ã䜿çšããŠãããå®çŸã§ããŸãïŒ
äŸïŒã«ãŒãã³ã³ããŒãã³ãã®ã¹ã¿ã€ãªã³ã°
HTML:
<div class="card">
<h2 class="card__title">Product Title</h2>
<p class="card__description">A brief description of the product.</p>
<button class="card__button">Add to Cart</button>
</div>
CSS:
@scope (.card) {
.card {
border: 1px solid #ccc;
padding: 16px;
margin-bottom: 16px;
}
.card__title {
font-size: 1.2em;
margin-bottom: 8px;
}
.card__description {
color: #555;
}
.card__button {
background-color: #007bff;
color: white;
border: none;
padding: 8px 16px;
cursor: pointer;
}
}
ãã®äŸã§ã¯ã@scope (.card)
ã«ãŒã«ã«ããããããã¯å
ã§å®çŸ©ãããã¹ã¿ã€ã«ã .card
èŠçŽ å
ã®èŠçŽ ã«ã®ã¿é©çšãããããã«ãªããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåãšã®æœåšçãªã¹ã¿ã€ã«ã®ç«¶åãé²ããŸãã
`to` ããŒã¯ãŒãã«ããã¹ã³ãŒãã®å¶é
ãªãã·ã§ã³ã® to
ããŒã¯ãŒãã䜿çšãããšãã¹ã¿ã€ã«ãé©çšãããªããªãå¢çãæå®ããããšã§ãã¹ã¿ã€ã«ã®ã¹ã³ãŒããããã«çµã蟌ãããšãã§ããŸããããã¯ãã³ã³ããŒãã³ãã®ç¹å®ã®éšåå
ã®èŠçŽ ã«ã¹ã¿ã€ã«ãé©çšããåãã³ã³ããŒãã³ãå
ã®ä»ã®èŠçŽ ã«ã¯åœ±é¿ãäžããããªãå Žåã«äŸ¿å©ã§ãã
äŸïŒ`to` ã䜿ã£ãã¹ã³ãŒãã®å¶é
ãã¹ãããããµãã¡ãã¥ãŒãæã€ããã²ãŒã·ã§ã³ã¡ãã¥ãŒãããã·ããªãªãèããŠã¿ãŸããããã¡ãã¥ãŒã®ç¬¬1éå±€ã®ãªã³ã¯ãšãµãã¡ãã¥ãŒå ã®ãªã³ã¯ãç°ãªãã¹ã¿ã€ã«ã«ããããšããŸãã
HTML:
<nav class="navigation">
<ul class="navigation__list">
<li class="navigation__item"><a href="#" class="navigation__link">Home</a></li>
<li class="navigation__item">
<a href="#" class="navigation__link">Products</a>
<ul class="navigation__submenu">
<li class="navigation__submenu-item"><a href="#" class="navigation__submenu-link">Category 1</a></li>
<li class="navigation__submenu-item"><a href="#" class="navigation__submenu-link">Category 2</a></li>
</ul>
</li>
<li class="navigation__item"><a href="#" class="navigation__link">Services</a></li>
</ul>
</nav>
CSS:
@scope (.navigation) to (.navigation__submenu) {
.navigation__link {
color: #333;
font-weight: bold;
}
}
.navigation__submenu-link {
color: #777;
}
ãã®äŸã§ã¯ã@scope (.navigation) to (.navigation__submenu)
ã«ãŒã«ã«ããã倪åã®ãã©ã³ããŠã§ã€ããšæãè²ãããã²ãŒã·ã§ã³ã¡ãã¥ãŒã®ç¬¬1éå±€ã®ãªã³ã¯ã«ã®ã¿é©çšãããŸããto
ããŒã¯ãŒãã¯ããããã®ã¹ã¿ã€ã«ã .navigation__submenu
å
ã®ãªã³ã¯ã«åœ±é¿ãäžããªãããšãä¿èšŒããŸãã.navigation__submenu-link
ã«å¯Ÿããå¥ã®ã«ãŒã«ã¯ããµãã¡ãã¥ãŒã®ãªã³ã¯ãããæããè²ã§ã¹ã¿ã€ãªã³ã°ããŸãã
@scope ã䜿çšããã¡ãªãã
@scope
ã«ãŒã«ã¯ãã¢ãã³ãŠã§ãéçºã«ããã€ãã®å©ç¹ããããããŸãïŒ
- ã¹ã¿ã€ã«ã«ãã»ã«åã®åäžïŒ ç¹å®ã®DOMãµãããªãŒå ã«ã¹ã¿ã€ã«ãåé¢ããããã®ãã€ãã£ããªCSSã¡ã«ããºã ãæäŸããã¹ã¿ã€ã«ã®æŒæŽ©ãæå³ããªãå¯äœçšãé²ããŸãã
- ä¿å®æ§ã®åäžïŒ ã¹ã¿ã€ã«ãã«ãã»ã«åããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã«åœ±é¿ãäžããå¿é ãªããããã³ã³ããŒãã³ãã«å€æŽãå ããããšãã§ããŸããããã«ãããããä¿å®ããããæ¡åŒµæ§ã®é«ãã³ãŒãã«ã€ãªãããŸãã
- 詳现床ã®ç«¶åã®åæžïŒ
@scope
ã«ãŒã«ã¯ãã¹ã¿ã€ã«ã®ã¹ã³ãŒããå¶éããããšã§è©³çŽ°åºŠã®ç«¶åãæžããã®ã«åœ¹ç«ã¡ãŸããããã«ãããå¿ èŠã«å¿ããŠã¹ã¿ã€ã«ãäžæžããããããªããŸãã - ã³ãŒãã®å¯èªæ§ã®åäžïŒ ã¹ã¿ã€ã«ã®ã¹ã³ãŒããæç¢ºã«å®çŸ©ããããšã§ãCSSã³ãŒãã®å¯èªæ§ãšçè§£ãããããåäžããŸãã
- ã³ã©ãã¬ãŒã·ã§ã³ã®æ¹åïŒ ããŒã ã§äœæ¥ããå Žåã
@scope
ã«ãŒã«ã¯ãç°ãªãã³ã³ããŒãã³ãã§äœæ¥ããç°ãªãéçºè éã®ã¹ã¿ã€ã«ã®ç«¶åãé²ãã®ã«åœ¹ç«ã¡ãŸãã - ã³ã³ããŒãã³ãã¹ã¿ã€ãªã³ã°ã®ç°¡çŽ åïŒ ã°ããŒãã«ãªCSSã®åé¡ãå¿é ããããšãªããåã³ã³ããŒãã³ãã«å¿ èŠãªç¹å®ã®ã¹ã¿ã€ã«ã«éäžã§ãããããã³ã³ããŒãã³ãã®ã¹ã¿ã€ãªã³ã°ããã»ã¹ãç°¡çŽ åãããŸãã
ä»ã®ã¹ã¿ã€ã«ã«ãã»ã«åæè¡ãšã®æ¯èŒ
@scope
ã«ãŒã«ã¯ã¹ã¿ã€ã«ã«ãã»ã«åã®ããã®åŒ·åãªããŒã«ã§ãããä»ã®æè¡ãšã©ã®ããã«æ¯èŒãããããçè§£ããããšãéèŠã§ãïŒ
CSSåœåèŠåïŒBEMãOOCSSãSMACSSïŒ
BEMïŒBlock, Element, ModifierïŒãOOCSSïŒObject-Oriented CSSïŒãSMACSSïŒScalable and Modular Architecture for CSSïŒãªã©ã®CSSåœåèŠåã¯ãCSSã¯ã©ã¹ã®åœåã«é¢ããã¬ã€ãã©ã€ã³ãæäŸããããšã§ãCSSã®æŽçãšä¿å®æ§ãåäžãããããšãç®çãšããŠããŸãããããã®èŠåã¯è©³çŽ°åºŠã®ç«¶åãæžãããã³ãŒãã®å¯èªæ§ãåäžãããã®ã«åœ¹ç«ã¡ãŸãããçã®ã¹ã¿ã€ã«ã«ãã»ã«åã¯æäŸããŸããããããã®èŠåã䜿çšããŠå®çŸ©ãããã¹ã¿ã€ã«ã¯ãæ³šææ·±ã管çããªããšãã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
CSSã¢ãžã¥ãŒã«
CSSã¢ãžã¥ãŒã«ã¯ãCSSã¯ã©ã¹åãç¹å®ã®ã³ã³ããŒãã³ãã«èªåçã«ã¹ã³ãŒãããæ¹æ³ãæäŸããŸããCSSã¢ãžã¥ãŒã«ãJavaScriptãã¡ã€ã«ã«ã€ã³ããŒããããšãã¯ã©ã¹åã¯äžæã§ããŒã«ã«ã«ã¹ã³ãŒããããããã«å€æãããŸããããã«ãããã¹ã¿ã€ã«ã®æŒæŽ©ã广çã«é²æ¢ãããã¹ã¿ã€ã«ãã€ã³ããŒããããã³ã³ããŒãã³ãã«ç¢ºå®ã«åé¢ãããŸããCSSã¢ãžã¥ãŒã«ã¯ãã«ãããŒã«ãå¿ èŠãšããReactãVue.jsãªã©ã®ã³ã³ããŒãã³ãããŒã¹ã®ãã¬ãŒã ã¯ãŒã¯ãšããçµ±åãããŸãã
Shadow DOM
Shadow DOMã¯ãHTMLãCSSãJavaScriptãã«ã¹ã¿ã èŠçŽ å ã«ã«ãã»ã«åã§ãããŠã§ãæšæºã§ããã¡ã€ã³ããã¥ã¡ã³ãããåé¢ãããå¥ã®DOMããªãŒãäœæããŸããShadow DOMå ã§å®çŸ©ãããã¹ã¿ã€ã«ã¯ãShadow DOMå€ã®ã¹ã¿ã€ã«ã®åœ±é¿ãåããããã®éãåæ§ã§ããShadow DOMã¯æã匷åãªåœ¢åŒã®ã¹ã¿ã€ã«ã«ãã»ã«åãæäŸããŸãããä»ã®æè¡ãããæ±ãã®ãè€éã«ãªãå ŽåããããŸããåå©çšå¯èœãªãŠã§ãã³ã³ããŒãã³ããäœæããããã«ãã䜿çšãããŸãã
CSS-in-JS
CSS-in-JSã©ã€ãã©ãªã䜿çšãããšãJavaScriptã³ãŒãå ã«çŽæ¥CSSã¹ã¿ã€ã«ãèšè¿°ã§ããŸãããããã®ã©ã€ãã©ãªã¯éåžžãèªåçãªã¯ã©ã¹åçæãã¹ã³ãŒãã³ã°ãªã©ã®æè¡ã䜿çšããŠãã¹ã¿ã€ã«ãå®çŸ©ãããã³ã³ããŒãã³ãã«ç¢ºå®ã«åé¢ãããããã«ããŸããCSS-in-JSã¯ãåçãªã¹ã¿ã€ãªã³ã°ãã³ãŒãã®åå©çšãããã©ãŒãã³ã¹ã®åäžãªã©ã®å©ç¹ãæäŸã§ããŸããããã«ãããã»ã¹ã«è€éããå ãããã¹ãŠã®ãããžã§ã¯ãã«é©ããŠããããã§ã¯ãããŸããã
äž»ãªéãããŸãšããè¡šã¯æ¬¡ã®ãšããã§ãïŒ
æè¡ | ã«ãã»ã«åã¬ãã« | è€éã | ãã«ãããŒã«èŠåŠ | ãã€ãã£ãCSS |
---|---|---|---|---|
CSSåœåèŠå | äœ | äœ | äžèŠ | ã¯ã |
CSSã¢ãžã¥ãŒã« | äž | äž | ã¯ã | ãããïŒåŠçãå¿ èŠïŒ |
Shadow DOM | é« | é« | äžèŠ | ã¯ã |
CSS-in-JS | äžããé« | äž | ã¯ã | ãããïŒå®è¡æã«çæïŒ |
@scope ã«ãŒã« | äž | äœããäž | äžèŠ | ã¯ã |
ãã©ãŠã¶ãµããŒããšããªãã£ã«
æ¯èŒçæ°ããCSSæ©èœã§ããããã@scope
ã«ãŒã«ã¯ãã¹ãŠã®ãã©ãŠã¶ã§å®å
šã«ãµããŒããããŠããããã§ã¯ãããŸãããæ¬çªç°å¢ã§äœ¿çšããåã«ãçŸåšã®ãã©ãŠã¶ã®äºææ§ã確èªããå€ããã©ãŠã¶ããµããŒãããããã«ããªãã£ã«ã®äœ¿çšãæ€èšããããšãäžå¯æ¬ ã§ãã
Can I useãªã©ã®ãªãœãŒã¹ã䜿çšããŠã@scope
ã«ãŒã«ã®çŸåšã®ãã©ãŠã¶ãµããŒãã確èªã§ããŸããå€ããã©ãŠã¶ããµããŒãããå¿
èŠãããå Žåã¯ãJavaScriptã䜿çšããŠ@scope
ã«ãŒã«ã®ãã©ãŒã«ããã¯å®è£
ãæäŸããããªãã£ã«ã䜿çšã§ããŸãã
@scope ã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
@scope
ã«ãŒã«ãæå€§éã«æŽ»çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããïŒ
- ã³ã³ããŒãã³ãã¬ãã«ã®ã¹ã¿ã€ãªã³ã°ã«äœ¿çšããïŒ
@scope
ã«ãŒã«ã¯ãåã ã®ã³ã³ããŒãã³ãããŠã§ãããŒãžã®äžéšã«å¯ŸããŠã¹ã¿ã€ã«ãã«ãã»ã«åããããã«äœ¿çšããå Žåã«æã广çã§ãã - ã¹ã³ãŒããã§ããã ãå ·äœçã«ä¿ã€ïŒ æå³ããªãã¹ã¿ã€ã«ã®ç«¶åã«ã€ãªããå¯èœæ§ã®ãããé床ã«åºç¯ãªã¹ã³ãŒãã¯é¿ããŠãã ãããã¹ã¿ã€ã«ãå¿ èŠãªå Žæã«ã®ã¿é©çšãããããã«ãã¹ã³ãŒããã§ããã ãçãå®çŸ©ããããã«ããŠãã ããã
- å¿
èŠãªå Žå㯠`to` ããŒã¯ãŒãã䜿çšããïŒ
to
ããŒã¯ãŒãã¯ãã¹ã¿ã€ã«ã®ã¹ã³ãŒããããã«çµã蟌ã¿ãåãã³ã³ããŒãã³ãå ã®ä»ã®èŠçŽ ã«åœ±é¿ãäžããã®ãé²ãã®ã«åœ¹ç«ã¡ãŸãã - 培åºçã«ãã¹ãããïŒ ã¹ã¿ã€ã«ãæåŸ ã©ããã«æ©èœããŠããããšã確èªããããã«ãåžžã«ããŸããŸãªãã©ãŠã¶ãããã€ã¹ã§ã¹ã¿ã€ã«ã培åºçã«ãã¹ãããŠãã ããã
- ä»ã®æè¡ãšçµã¿åãããïŒ
@scope
ã«ãŒã«ã¯ãCSSåœåèŠåãCSSã¢ãžã¥ãŒã«ãªã©ãä»ã®CSSæè¡ãšçµã¿åãããŠãå æ¬çãªã¹ã¿ã€ã«ã«ãã»ã«åæŠç¥ãäœæããããšãã§ããŸãã - ã¹ã³ãŒããææžåããïŒ ä»ã®éçºè ãã³ãŒããçè§£ããä¿å®ããããããããã«ãã¹ã³ãŒãã®ç®çãšå¢çãæç¢ºã«ææžåããŠãã ããã
å®äžçã®äŸãšãŠãŒã¹ã±ãŒã¹
@scope
ã«ãŒã«ã¯ãããŸããŸãªå®äžçã®ã·ããªãªã§é©çšã§ããŸãïŒ
- UIã©ã€ãã©ãªã®ã¹ã¿ã€ãªã³ã°ïŒ UIã©ã€ãã©ãªãæ§ç¯ããéã
@scope
ã«ãŒã«ã䜿çšããŠãåã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãåé¢ãããä»ã®ã³ã³ããŒãã³ãããã¹ãã¢ããªã±ãŒã·ã§ã³ã®ã¹ã¿ã€ã«ãšç«¶åããªãããã«ããããšãã§ããŸãã - ããŒãèšå®ïŒ
@scope
ã«ãŒã«ã䜿çšããŠããŠã§ãããŒãžã®ç¹å®ã®éšåã«ç°ãªãããŒããé©çšã§ããŸããããšãã°ãããŒãžå šäœãã©ã€ãããŒãã«ä¿ã¡ãªãããç¹å®ã®ã³ã³ããŒãã³ãã«ããŒã¯ããŒããé©çšããããã«äœ¿çšã§ããŸãã - ãµãŒãããŒãã£ãŠã£ãžã§ããïŒ ãŠã§ããµã€ãã«ãµãŒãããŒãã£ã®ãŠã£ãžã§ãããåã蟌ãéã
@scope
ã«ãŒã«ã䜿çšããŠããŠã£ãžã§ããã®ã¹ã¿ã€ã«ãããŒãžã®ä»ã®éšåã«åœ±é¿ãäžãããããã®éã«ãªã£ããããã®ãé²ãããšãã§ããŸãã - ãã€ã¯ãããã³ããšã³ãïŒ ç°ãªãããŒã ãã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãéšåãæ
åœãããã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ã§ã¯ã
@scope
ã«ãŒã«ã䜿çšããŠãåãã€ã¯ãããã³ããšã³ãã®ã¹ã¿ã€ã«ãåé¢ãããä»ã®ãã€ã¯ãããã³ããšã³ãã®ã¹ã¿ã€ã«ãšç«¶åããªãããã«ããããšãã§ããŸãã
äŸïŒã¢ãŒãã«ã³ã³ããŒãã³ãã®ã¹ã¿ã€ãªã³ã°
å®å šã«ç¬ç«ããã¹ã¿ã€ãªã³ã°ãæã€ã¹ãã¢ãŒãã«ã³ã³ããŒãã³ããèããŠã¿ãŸãããã
HTML:
<div class="modal">
<div class="modal__content">
<h2 class="modal__title">Confirmation</h2>
<p class="modal__message">Are you sure you want to proceed?</p>
<div class="modal__buttons">
<button class="modal__button modal__button--confirm">Confirm</button>
<button class="modal__button modal__button--cancel">Cancel</button>
</div>
</div>
</div>
CSS:
@scope (.modal) {
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.modal__content {
background-color: white;
padding: 20px;
border-radius: 5px;
}
.modal__title {
font-size: 1.5em;
margin-bottom: 10px;
}
.modal__button {
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.modal__button--confirm {
background-color: green;
color: white;
}
.modal__button--cancel {
background-color: red;
color: white;
}
}
çµè«
CSSã® @scope
ã«ãŒã«ã¯ããŠã§ãéçºè
ã®ããŒã«ãããã«å ãã貎éãªæ©èœã§ãããã¹ã¿ã€ã«ã«ãã»ã«åãå®çŸããããã®ãã€ãã£ãã§å¹æçãªæ¹æ³ãæäŸããŸãã@scope
ã«ãŒã«ãšãã® to
ããŒã¯ãŒãã®äœ¿ãæ¹ãçè§£ããããšã§ãããä¿å®æ§ãé«ããæ¡åŒµæ§ããããå
ç¢ãªãŠã§ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãããã©ãŠã¶ã®ãµããŒããããªãã£ã«ã®å¯èœæ§ãèæ
®ããããšã¯éèŠã§ãããã¹ã¿ã€ã«ã«ãã»ã«åã®åäžãšè©³çŽ°åºŠã®ç«¶åã®åæžãšããã¡ãªããã«ããã@scope
ã«ãŒã«ã¯ã¢ãã³ãªãŠã§ãéçºã®ããã®åŒ·åãªããŒã«ãšãªããŸããèªèº«ã®ãããžã§ã¯ãã§ @scope
ã«ãŒã«ã詊ããŠãã®å©ç¹ãçŽæ¥äœéšããCSSã¹ã¿ã€ã«ã«å¯Ÿããæ°ããªã¬ãã«ã®å¶åŸ¡ãè§£æŸããŠãã ããããã®åŒ·åãªããŒã«ã掻çšããŠCSSã¢ãŒããã¯ãã£ã匷åãããŠã§ãã¢ããªã±ãŒã·ã§ã³å
šäœã§ããå埩åãããäºæž¬å¯èœãªã¹ã¿ã€ãªã³ã°ãäœæããŸãããã@scope
ã«ãŒã«ã®äœ¿çšã«é¢ããææ°ã®ã¬ã€ãã³ã¹ã«ã€ããŠã¯ãææ°ã®CSS仿§ãšãã©ãŠã¶äºææ§æ
å ±ãåç
§ããããšãå¿ããªãã§ãã ããã