CSS @layerããã¹ã¿ãŒãã詳现床ã®å¶åŸ¡ãšåªå 床管çãç¿åŸããŸããããCSSã®æ§é åãšã¹ã¿ã€ã«ã®å¹æçãªäžæžãæ¹æ³ãåŠã³ãä¿å®æ§ã®é«ããããžã§ã¯ããå®çŸããŸãã
CSS @layerã«ãã詳现床ã®äžæžãïŒã¬ã€ã€ãŒã®åªå 床ãæäœãã
CSSã®@layerã¢ããã«ãŒã«ã¯ãã«ã¹ã±ãŒãã管çããã¹ã¿ã€ã«ã·ãŒãã®è©³çŽ°åºŠãå¶åŸ¡ããããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸããããã«ãããéçºè
ã¯CSSããã广çã«æ§é åããä¿å®æ§ãé«ããäºæãã¬ã¹ã¿ã€ã«ã®ç«¶åã«ãããã©ã¹ãã¬ãŒã·ã§ã³ãæžããããšãã§ããŸãããã®å
æ¬çãªã¬ã€ãã§ã¯ã@layerã®è€éãªåŽé¢ãæãäžãããã®æ©èœã掻çšããŠã¬ã€ã€ãŒã®åªå
床ãã²ããŠã¯æçµçã«ã¬ã³ããªã³ã°ãããã¹ã¿ã€ã«ãæ£ç¢ºã«å¶åŸ¡ããæ¹æ³ãæ¢ããŸãã
CSSã«ã¹ã±ãŒããšè©³çŽ°åºŠã®çè§£
@layerã«é£ã³èŸŒãåã«ãCSSã«ã¹ã±ãŒããšè©³çŽ°åºŠãšããåºæ¬çãªæŠå¿µãçè§£ããããšãéèŠã§ããã«ã¹ã±ãŒãã¯ãè€æ°ã®ç«¶åããã«ãŒã«ãååšããå Žåã«ãã©ã®ã¹ã¿ã€ã«ãèŠçŽ ã«é©çšãããããæ±ºå®ããŸããã«ã¹ã±ãŒãã¯ã以äžãå«ãããã€ãã®èŠå ãèæ
®ããŸãïŒ
- ãªãªãžã³ãšéèŠåºŠïŒã¹ã¿ã€ã«ã¯ããŠãŒã¶ãŒãšãŒãžã§ã³ãã¹ã¿ã€ã«ã·ãŒãïŒãã©ãŠã¶ã®ããã©ã«ãïŒããŠãŒã¶ãŒã¹ã¿ã€ã«ã·ãŒããå¶äœè
ã¹ã¿ã€ã«ã·ãŒãïŒããªãã®CSSïŒãªã©ãããŸããŸãªãªãªãžã³ããæäŸãããŸãã
!importantãä»ããã¹ã¿ã€ã«ãåªå ãããŸãã - 詳现床ïŒããé«ã詳现床ãæã€ã»ã¬ã¯ã¿ã¯ãããäœã詳现床ã®ã»ã¬ã¯ã¿ãäžæžãããŸãã詳现床ã¯ãã»ã¬ã¯ã¿ã®æ§æèŠçŽ ïŒIDã»ã¬ã¯ã¿ãã¯ã©ã¹ã»ã¬ã¯ã¿ãã¿ã€ãã»ã¬ã¯ã¿ãªã©ïŒã«åºã¥ããŠèšç®ãããŸãã
- ãœãŒã¹é ïŒ2ã€ã®ã«ãŒã«ã®è©³çŽ°åºŠãåãå Žåãã¹ã¿ã€ã«ã·ãŒãã§åŸãã宣èšãããã«ãŒã«ãåªå ãããŸãã
åŸæ¥ã®CSSã¢ãŒããã¯ãã£ã¯ããã°ãã°è©³çŽ°åºŠã®æŠãã«ã€ãªãããéçºè
ã¯æ¢åã®ã¹ã¿ã€ã«ãäžæžãããããã«ããŸããŸãè€éãªã»ã¬ã¯ã¿ã!importantã«é Œãããšã«ãªããŸããããã«ãããä¿å®ããããã°ãå°é£ãªãå£ããããã¹ã¿ã€ã«ã·ãŒããçãŸããå¯èœæ§ããããŸãã@layerã¯ããããšã¬ã¬ã³ãã§æç¶å¯èœãªè§£æ±ºçãæäŸããŸãã
CSS @layerã®ç޹ä»ïŒã¬ã€ã€ãŒã®å®£èšãšé åºä»ã
@layerã¢ããã«ãŒã«ã䜿çšãããšãCSSã¹ã¿ã€ã«ã®ååä»ãã¬ã€ã€ãŒãå®çŸ©ã§ããŸãããããã®ã¬ã€ã€ãŒã¯ã«ã¹ã±ãŒãå
ã«æ°ããã¬ãã«ã®çµç¹ãäœãåºããã¹ã¿ã€ã«ãé©çšãããé åºãå¶åŸ¡ããããšãã§ããŸããããã¯ãCSSã«ãŒã«ãæç¢ºãªã«ããŽãªã«åãããããã®ã«ããŽãªãç¹å®ã®åªå
é äœã§äžŠã¹ããããªãã®ã ãšèããŠãã ããã
ã¬ã€ã€ãŒã®å®£èšïŒã¬ã€ã€ãŒã¯2ã€ã®æ¹æ³ã§å®£èšã§ããŸãïŒ
- æç€ºçãªå®£èšïŒ
@layer base, components, utilities;ããã¯ãæå®ãããé åºã§
baseãcomponentsãutilitiesãšããååã®3ã€ã®ã¬ã€ã€ãŒã宣èšããŸãã宣èšã®é åºã¯éåžžã«éèŠã§ããå ã«å®£èšãããã¬ã€ã€ãŒã¯ãåŸã«å®£èšãããã¬ã€ã€ãŒãããåªå 床ãäœããªããŸãã - æé»çãªå®£èšïŒ
@layer base { body { font-family: sans-serif; margin: 0; } }ããã¯
baseãšããååã®ã¬ã€ã€ãŒã宣èšãããã®ã¬ã€ã€ãŒãããã¯å ã«ã¹ã¿ã€ã«ãå«ããŸããã¬ã€ã€ãŒåãæç€ºçã«å®£èšãããŠããªãå Žåããã©ãŠã¶ã¯ãããæåã«äœ¿çšãããæç¹ã§æé»çã«å®£èšããŸããããããæç¢ºããšä¿å®æ§ã®ããã«ãéåžžã¯ã¹ã¿ã€ã«ã·ãŒãã®å é ã§ã¬ã€ã€ãŒãæç€ºçã«å®£èšããããšãæšå¥šãããŸãã
ã¬ã€ã€ãŒã®é åºãšåªå
床ïŒã¬ã€ã€ãŒã宣èšãããé åºããã«ã¹ã±ãŒãå
ã§ã®åªå
åºŠãæ±ºå®ããŸããå
ã«å®£èšãããã¬ã€ã€ãŒã¯åªå
床ãäœããã€ãŸãåŸã®ã¬ã€ã€ãŒã®ã¹ã¿ã€ã«ããç«¶åãããå Žåã«åã®ã¬ã€ã€ãŒã®ã¹ã¿ã€ã«ãäžæžãããŸãããããã@layerã詳现床ã®äžæžãã«äœ¿çšããéã®äžå¿çãªæŠå¿µã§ãã
@layerã®å®éã®äœ¿çšäŸ
@layerãããŸããŸãªã·ããªãªã§ã©ã®ããã«äœ¿çšã§ããããå
·äœçã«èŠãŠãããŸãããïŒ
äŸ1ïŒããŒã¹ã¹ã¿ã€ã«ãã³ã³ããŒãã³ãããŠãŒãã£ãªãã£
äžè¬çãªãã¿ãŒã³ã¯ãCSSãbaseãcomponentsãutilitiesã®ã¬ã€ã€ãŒã«æŽçããããšã§ãã
@layer base, components, utilities;
@layer base {
body {
font-family: Arial, sans-serif;
line-height: 1.5;
color: #333;
}
h1, h2, h3 {
margin-bottom: 1rem;
}
}
@layer components {
.button {
padding: 0.5rem 1rem;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
}
@layer utilities {
.margin-top-lg {
margin-top: 2rem;
}
.text-center {
text-align: center;
}
}
ãã®äŸã§ã¯ãbaseã¹ã¿ã€ã«ãããã¥ã¡ã³ãã®åºæ¬çãªã¹ã¿ã€ãªã³ã°ãå®çŸ©ããŸããcomponentsã¯åå©çšå¯èœãªUIèŠçŽ ãå®çŸ©ããutilitiesã¯å°ããçŠç¹ãçµã£ãã¹ã¿ã€ã«ã®èª¿æŽãæäŸããŸããutilitiesã¯æåŸã«å®£èšãããŠãããããæãé«ãåªå
床ãæã¡ããŠãŒãã£ãªãã£ã¯ã©ã¹ã§ã³ã³ããŒãã³ãã¹ã¿ã€ã«ãç°¡åã«äžæžãããããšãã§ããŸãã
äŸ2ïŒããŒãã®äžæžã
@layerã¯ããŒãã®å®è£
ã«ãéåžžã«åªããŠããŸããããŒã¹ããŒããå®çŸ©ãããã®ããŒã¹ã¹ã¿ã€ã«ãäžæžãããããŒãåºæã®ã¬ã€ã€ãŒãäœæããããšãã§ããŸãã
@layer base, theme;
@layer base {
body {
background-color: #f0f0f0;
color: #333;
}
.card {
background-color: white;
border: 1px solid #ccc;
}
}
@layer theme {
body {
background-color: #222;
color: #eee;
}
.card {
background-color: #333;
border: 1px solid #555;
color: #eee;
}
}
ããã§ã¯ãthemeã¬ã€ã€ãŒãbaseã¹ã¿ã€ã«ãäžæžãããŠããŒã¯ããŒããæäŸããŸããthemeã¬ã€ã€ãŒãæå¹ãŸãã¯ç¡å¹ã«ããããšã§ïŒäŸãã°ãJavaScriptã䜿çšããŠ<html>èŠçŽ ã®ã¯ã©ã¹ãåãæ¿ããŠæ¡ä»¶ä»ãCSSãé©çšãããªã©ïŒãããŒããç°¡åã«åãæ¿ããããšãã§ããŸãã
äŸ3ïŒãµãŒãããŒãã£ã©ã€ãã©ãª
ãµãŒãããŒãã£ã®CSSã©ã€ãã©ãªã䜿çšããéã@layerã¯ãããã®ã¹ã¿ã€ã«ãåé¢ããç¬èªã®CSSãšã®ç«¶åãé²ãã®ã«åœ¹ç«ã¡ãŸãã
@layer reset, library, components, utilities;
@layer reset {
/* CSS Reset or Normalize */
html, body, h1, h2, h3, p, ul, li {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
}
@layer library {
/* Styles from a third-party library (e.g., Bootstrap) */
.bootstrap-button {
/* Bootstrap button styles */
}
}
@layer components {
/* Your component styles */
.my-button {
/* Your button styles */
}
}
@layer utilities {
/* Your utility classes */
}
ãµãŒãããŒãã£ã©ã€ãã©ãªã®ã¹ã¿ã€ã«ãç¬èªã®ã¬ã€ã€ãŒïŒlibraryïŒã«é
眮ããããšã§ãç¬èªã®componentsãšutilitiesãããé«ãåªå
床ãæã€ããšãä¿èšŒããå¿
èŠã«å¿ããŠã©ã€ãã©ãªã®ã¹ã¿ã€ã«ãã«ã¹ã¿ãã€ãºããããšãã§ããŸãããŸããæåã«ãªã»ããã¬ã€ã€ãŒãå«ããããšã§ããã©ãŠã¶ã®ããã©ã«ãã¹ã¿ã€ã«ããã®äºæãã¬ã¹ã¿ã€ã«ã®ç¶æ¿ãé¿ããã®ã«åœ¹ç«ã¡ãŸãã
ã¬ã€ã€ãŒã®é åºå€æŽ
ã¬ã€ã€ãŒã®é åºã¯éåžžã«éèŠã§ãããCSSã¯ã¬ã€ã€ãŒã宣èšãããåŸã«ãã®é åºã倿Žããæ¹æ³ãæäŸããŸããããã¯ãç¹å®ã®ç¶æ³ã«åºã¥ããŠã¬ã€ã€ãŒã®åªå 床ã調æŽããå¿ èŠãããå Žåã«äŸ¿å©ã§ãã
layer()ã䜿çšããé åºå€æŽïŒ
@layer base, components, utilities;
@layer utilities {
.override {
color: red !important; /* Example utility */
}
}
@layer components {
.button {
color: blue;
}
}
/* Reorder the layers: utilities should be applied before components */
@layer components, utilities; /* IMPORTANT: Declaration order matters */
ãã®äŸã§ã¯ãæåutilitiesã¬ã€ã€ãŒã¯componentsã®åŸã«å®£èšãããŠããŸãããããããã®åŸã®@layer components, utilities;ãšããèšè¿°ãã¬ã€ã€ãŒã®é åºãåå®çŸ©ããŸããããã¯ãutilitiesã¬ã€ã€ãŒã«!importantãå«ãŸããŠããã«ãããããããcomponentsã¬ã€ã€ãŒã®ã¹ã¿ã€ã«ãutilitiesã¬ã€ã€ãŒã®ã¹ã¿ã€ã«ãäžæžãããããšãæå³ããŸããé åºå€æŽã¯ãã«ã¹ã±ãŒãã®åªå
床ã管çããããã®éåžžã«åŒ·åãªæ¹æ³ãæäŸããŸãã
éèŠãªæ³šæç¹ïŒã¬ã€ã€ãŒã®é åºå€æŽã«é床ã«äŸåããããšã¯ãCSSãçè§£ãã«ãããä¿å®ãã«ããããå¯èœæ§ããããããäžè¬çã«ã¯é¿ããã®ããã¹ããã©ã¯ãã£ã¹ã§ããããããç¹å®ã®ç¶æ³ã§ã¯äŸ¿å©ãªããŒã«ãšãªãåŸãŸãã
ã¬ã€ã€ãŒã®ãã¹ã
CSSã®@layerã¯ã¬ã€ã€ãŒã®ãã¹ãããµããŒãããŠããŸããããã«ãããã¹ã¿ã€ã«ã®éå±€æ§é ãäœæããã«ã¹ã±ãŒããããã«çްããå¶åŸ¡ããããšãã§ããŸããããŸãäžè¬çã«ã¯äœ¿çšãããŸããããè€éãªãããžã§ã¯ãã§ã¯æçãªå ŽåããããŸãã
@layer theme {
@layer light, dark;
@layer light {
body {
background-color: #fff;
color: #333;
}
}
@layer dark {
body {
background-color: #222;
color: #eee;
}
}
}
ãã®äŸã§ã¯ãthemeã¬ã€ã€ãŒã«lightãšdarkãšãã2ã€ã®ãã¹ããããã¬ã€ã€ãŒãå«ãŸããŠããŸãããã®åŸãé©åãªãã¹ããããã¬ã€ã€ãŒãæå¹ãŸãã¯ç¡å¹ã«ããããšã§ãã¢ã¯ãã£ããªããŒããå¶åŸ¡ã§ããŸãã
CSS @layerã䜿çšããã¡ãªãã
- 詳现床管çã®æ¹åïŒ
@layerã¯è©³çŽ°åºŠãå¶åŸ¡ããããã®æç¢ºã§æç€ºçãªæ¹æ³ãæäŸããè€éãªã»ã¬ã¯ã¿ã!importantã®å¿ èŠæ§ãæžãããŸãã - ä¿å®æ§ã®åäžïŒCSSãè«ççãªã¬ã€ã€ãŒã«æŽçããããšã§ãã¹ã¿ã€ã«ã·ãŒãã®çè§£ãä¿®æ£ããããã°ã容æã«ãªããŸãã
- ããŒãäœæã®ç°¡çŽ åïŒ
@layerã¯ããŒãã®å®è£ ãšç®¡çã容æã«ããæå°éã®åŽåã§ç°ãªãã¹ã¿ã€ã«ãåãæ¿ããããšãã§ããŸãã - ãµãŒãããŒãã£ã©ã€ãã©ãªãšã®é£æºåäžïŒ
@layerã¯ãµãŒãããŒãã£ã®ã¹ã¿ã€ã«ãåé¢ããç¬èªã®CSSãšã®ç«¶åãé²ãã®ã«åœ¹ç«ã¡ãŸãã - ã³ã©ãã¬ãŒã·ã§ã³ã®ä¿é²ïŒæç¢ºãªã¬ã€ã€ãŒå®çŸ©ã«ããã誰ããæå³ãããæ§é ãšã¹ã¿ã€ã«ã®åªå 床ãçè§£ã§ãããããããŒã ã§ã®CSSå ±åäœæ¥ã容æã«ãªããŸãã
æœåšçãªæ¬ ç¹ãšèæ ®äºé
- ãã©ãŠã¶ã®ãµããŒãïŒ
@layerã¯è¯å¥œãªãã©ãŠã¶ãµããŒãããããŸããã察象ãã©ãŠã¶ãšã®äºææ§ã確èªããå¿ èŠã«å¿ããŠãã©ãŒã«ããã¯ãæäŸããããšãäžå¯æ¬ ã§ããã»ãšãã©ã®ã¢ãã³ãã©ãŠã¶ã¯ãµããŒãããŠããŸãããå€ãããŒãžã§ã³ã§ã¯ããªãã£ã«ã代æ¿ã¢ãããŒããå¿ èŠã«ãªãå ŽåããããŸãã - åŠç¿æ²ç·ïŒ
@layerãçè§£ããã«ã¯ãèãæ¹ã®è»¢æãšCSSã«ã¹ã±ãŒããžã®ããæ·±ãçè§£ãå¿ èŠã§ããéçºè ãæŠå¿µãšãã¹ããã©ã¯ãã£ã¹ãå®å šã«ææ¡ããã«ã¯ãããçšåºŠã®æéãããããããããŸããã - éå°èšèšïŒã¬ã€ã€ãŒãå€çšãããããšãCSSãé床ã«è€éã«ãªãã管çãå°é£ã«ãªãå¯èœæ§ããããŸããæŽçãšã·ã³ãã«ãã®ãã©ã³ã¹ãåãããšãéèŠã§ãã
- åæèšå®ïŒ
@layerãå®è£ ããã«ã¯ãCSSãèšç»ãæ§é åããããã®åæã®åŽåãå¿ èŠã§ããããããä¿å®æ§ãšã¹ã±ãŒã©ããªãã£ã®èгç¹ããã®é·æçãªã¡ãªããã¯ãåææè³ãäžåããŸãã
CSS @layerã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
- ã¬ã€ã€ãŒãèšç»ããïŒCSSãæžãå§ããåã«ãæéããããŠã¬ã€ã€ãŒæ§é ãèšç»ããŠãã ããããããžã§ã¯ãå ã®ã¹ã¿ã€ã«ã®ããŸããŸãªã«ããŽãªïŒäŸïŒããŒã¹ã¹ã¿ã€ã«ãã³ã³ããŒãã³ããããŒãããŠãŒãã£ãªãã£ïŒãèæ ®ããããã«å¿ããŠã¬ã€ã€ãŒãå®çŸ©ããŸãã
- ã¬ã€ã€ãŒãæç€ºçã«å®£èšããïŒåžžã«ã¹ã¿ã€ã«ã·ãŒãã®å é ã§ã¬ã€ã€ãŒãæç€ºçã«å®£èšããŠãã ãããããã«ãããã¬ã€ã€ãŒæ§é ã®æç¢ºãªæŠèŠãæäŸãããã¹ã¿ã€ã«ã®åªå 床ãçè§£ãããããªããŸãã
- æå³ã®ããã¬ã€ã€ãŒåã䜿çšããïŒåã¬ã€ã€ãŒå ã®ã¹ã¿ã€ã«ã®ç®çãåæ ããã説æçãªã¬ã€ã€ãŒåãéžæããŠãã ããã
- ã¬ã€ã€ãŒã®çŠç¹ãçµãïŒåã¬ã€ã€ãŒã«ã¯ãç¹å®ã®ã«ããŽãªãç®çã«é¢é£ããã¹ã¿ã€ã«ãå«ããã¹ãã§ããé¢é£ã®ãªãã¹ã¿ã€ã«ãåãã¬ã€ã€ãŒã«æ··ããªãã§ãã ããã
- ã¬ã€ã€ãŒãææžåããïŒCSSã«ã³ã¡ã³ãã远å ããŠãåã¬ã€ã€ãŒã®ç®çãä»ã®ã¬ã€ã€ãŒãšã®çžäºäœçšã«ã€ããŠèª¬æããŠãã ããã
- !importantã®ä¹±çšãé¿ããïŒ
@layerã¯!importantã®å¿ èŠæ§ãæžããã®ã«åœ¹ç«ã¡ãŸãããããã§ãä¹±çšããå¯èœæ§ã¯ãããŸããCSSã®äžæžããä¿å®ãå°é£ã«ããå¯èœæ§ãããããã絶察ã«å¿ èŠãªå Žåãé€ãã!importantã®äœ¿çšã¯é¿ããããã«ããŠãã ãããã¬ã€ã€ãŒã®é åºå€æŽã®æ¹ãè¯ã解決çã§ããããšãå€ãã§ãã - 培åºçã«ãã¹ãããïŒ
@layerãå®è£ ããåŸãCSSã培åºçã«ãã¹ãããŠãã¹ã¿ã€ã«ãæ£ããé©çšãããäºæãã¬ç«¶åããªãããšã確èªããŠãã ããã
çµè«
CSS @layerã¯ãã¹ã¿ã€ã«ã·ãŒãã®è©³çŽ°åºŠã管çããã«ã¹ã±ãŒããå¶åŸ¡ããããã®åŒ·åãªããŒã«ã§ããCSSãè«ççãªã¬ã€ã€ãŒã«æŽçããããšã§ãä¿å®æ§ãåäžãããããŒãäœæãç°¡çŽ åãããµãŒãããŒãã£ã©ã€ãã©ãªãšã®é£æºãåäžãããããšãã§ããŸããåŠç¿æ²ç·ã¯ãããŸããã@layerã䜿çšããããšã®é·æçãªã¡ãªããã¯ãåææè³ãã¯ããã«äžåããŸãããã®ã¬ã€ãã§æŠèª¬ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ã@layerãæŽ»çšããŠãWebãããžã§ã¯ãã®ããã«ããå
ç¢ã§ãã¹ã±ãŒã©ãã«ã§ãä¿å®æ§ã®é«ãCSSãäœæã§ããŸãã@layerãåãå
¥ããããšã¯ãã¢ãã³ã§æŽçããããå調çãªCSSéçºã«åããéèŠãªäžæ©ã§ãã