ã«ã¹ã¿ã ããããã£ãç»é²ãã驿°çãªCSS @propertyã®åãæ¢æ±ããŸããé«åºŠãªã¢ãã¡ãŒã·ã§ã³ãããŒãèšå®ãã³ã³ããŒãã³ãããŒã¹ã®ãã¶ã€ã³ãäžçäžã§å®çŸããŸãããã
ãã€ãããã¯ã¹ã¿ã€ã«ã®è§£æŸïŒã«ã¹ã¿ã ããããã£ç»é²ã®ããã®CSS @property培åºè§£èª¬
ãŠã§ããã¶ã€ã³ã®äžçã¯çµ¶ããé²åããŠãããããã«äŒŽãéçºè ãå©çšã§ããããŒã«ãé²åããŠããŸããé·å¹ŽãCSSã«ã¹ã¿ã ããããã£ïŒCSS倿°ãšãåŒã°ããïŒã¯ãããä¿å®ãããããã€ãããã¯ãªã¹ã¿ã€ã«ã·ãŒããäœæããåãšãªã£ãŠããŸãããããããç¹ã«ã¢ãã¡ãŒã·ã§ã³ãè€éãªããŒãèšå®ãšãã£ãè€éãªã·ããªãªã«ãããŠããããã®ããããã£ããã©ãŠã¶ã«ã©ã®ããã«çè§£ãããå©çšãããããšããç¹ã«ã¯å¶çŽãããããã®ããã³ã·ã£ã«ã¯ååã«çºæ®ãããŠããŸããã§ãããããã§ç»å Žããã®ãCSS @propertyã§ããããã¯ãã«ã¹ã¿ã ããããã£ã®å®çŸ©ãšæŽ»çšæ¹æ³ã«é©åœããããããäžçäžã§ããæŽç·Žãããããã©ãŒãã³ã¹ã®é«ããŠã§ãäœéšãžã®éãéãç»æçãªä»æ§ã§ãã
CSS @propertyãšã¯äœãïŒ
æ žå¿ãèšããšãCSS @propertyã¯ãéçºè ãã«ã¹ã¿ã ããããã£ããã©ãŠã¶ã®CSSãšã³ãžã³ã«çŽæ¥ç»é²ã§ããããã«ããã«ãŒã«ã§ããããã¯ãã«ã¹ã¿ã ããããã£ãæ£åŒã«å®£èšãããã®æåŸ ãããåãåæå€ããããŠéèŠãªããšã«ããã®æ§æãæå®ããæ¹æ³ã ãšèããŠãã ããããã®æ£åŒãªç»é²ã«ããããã©ãŠã¶ã¯ä»¥åã¯äžå¯èœã ã£ãæ¹æ³ã§ãããã®ã«ã¹ã¿ã ããããã£ãçè§£ãè§£æã管çããããã«äžå¯æ¬ ãªæ å ±ãåŸãããšãã§ããŸãã
@propertyãç»å Žããåãã«ã¹ã¿ã ããããã£ã¯åºæ¬çã«ãã©ãŠã¶ã«ãã£ãŠæååãšããŠæ±ãããŠããŸãããåçŽãªå€æ°ã®çœ®ãæãã«ã¯åŒ·åã§ãããããã®æååããŒã¹ã®æ§è³ªã¯ãçŽæ¥ã¢ãã¡ãŒã·ã§ã³åããããäºæž¬å¯èœãªæ¹æ³ã§ç¶æ¿ããããæ€èšŒãããããããšãã§ããªãããšãæå³ããŠããŸããã@propertyã¯ãã«ã¹ã¿ã ããããã£ã«CSSã«ã¹ã±ãŒãå
ã§ã®ç¬¬äžçŽåžæ°ãšããŠã®å°äœãäžããããšã§ããããå€ããŸãã
@propertyã®äž»èŠãªæ§æèŠçŽ
@propertyã«ãŒã«ã¯ãããã€ãã®äž»èŠãªæ§æèŠçŽ ããæããŸãïŒ
1. @propertyã«ãŒã«èªäœ
ããã¯ã«ã¹ã¿ã ããããã£ã®ç»é²ã瀺ã宣èšã§ãã@keyframesã@mediaã®ãããªä»ã®ã¢ããã«ãŒã«ã«äŒŒãŠããŸãã
2. --custom-property-name
ããã¯ãæšæºçãª--ãã¬ãã£ãã¯ã¹ã®æ
£äŸã«åŸã£ãã«ã¹ã¿ã ããããã£ã®ååã§ãã
3. syntax
ããã¯ãã«ã¹ã¿ã ããããã£ã®å€ã«æåŸ ãããåãšãã©ãŒããããå®çŸ©ããŸããããã¯ããã©ãŠã¶ã«ããæ€èšŒãšé©åãªè§£éãå¯èœã«ããéèŠãªåŽé¢ã§ããäžè¬çãªæ§æã¿ã€ãã«ã¯ä»¥äžãå«ãŸããŸãïŒ
<length>:10px,2em,50%ã®ãããªå€çšã<color>:#ff0000,rgba(0, 0, 255, 0.5),blueã®ãããªè²ã®å€çšã<number>: åäœã®ãªãæ°å€çšãäŸïŒ1,0.5ã<integer>: æŽæ°çšã<angle>:90deg,1turnã®ãããªå転ã®å€çšã<time>:500ms,1sã®ãããªæéã®å€çšã<frequency>: é³å£°åšæ³¢æ°ã®å€çšã<resolution>: ãã£ã¹ãã¬ã€è§£å床ã®å€çšã<url>: URLã®å€çšã<image>: ç»åã®å€çšã<transform-list>: CSS transform颿°çšã<custom-ident>: ã«ã¹ã¿ã èå¥åçšã<string>: ãªãã©ã«æååã®å€çšã<percentage>:50%ã®ãããªããŒã»ã³ããŒãžã®å€çšã<shadow>: text-shadowãbox-shadowã®å€çšã<custom-property-name>: æå¹ãªã«ã¹ã¿ã ããããã£å€ããã¹ãŠèš±å¯ãããã©ãŒã«ããã¯ã§ãããããã§ãç»é²ã¯ãããŸãã- ãããã
|æŒç®åã§çµã¿åãããããšã§ãè€æ°ã®åãæå®ããããšãå¯èœã§ããäŸïŒ<length> | <percentage>ã
æ§æãæå®ããããšã§ããã©ãŠã¶ã«ã©ã®ãããªçš®é¡ã®ããŒã¿ãæåŸ ããããäŒããŸããããã«ãããåãã§ãã¯ãå¯èœã«ãªããæ°å€ã®çŽæ¥çãªã¢ãã¡ãŒã·ã§ã³ã®ãããªæ©èœãæå¹ã«ãªããŸãã
4. initial-value
ãã®ããããã£ã¯ãã«ã¹ã¿ã ããããã£ãã«ã¹ã±ãŒãã®ä»ã®å Žæã§æç€ºçã«å®çŸ©ãããŠããªãå Žåã®ããã©ã«ãå€ãèšå®ããŸããããã¯ãç¹å®ã®ãªãŒããŒã©ã€ãããªããŠãã³ã³ããŒãã³ããæ©èœãç¶ããããšãä¿èšŒããããã«äžå¯æ¬ ã§ãã
5. inherits
ãã®ããŒã«å€ïŒtrueãŸãã¯falseïŒã¯ãã«ã¹ã¿ã ããããã£ãDOMããªãŒå
ã®èŠªèŠçŽ ããå€ãç¶æ¿ãããã©ãããæ±ºå®ããŸããããã©ã«ãã§ã¯ãã«ã¹ã¿ã ããããã£ã¯ç¶æ¿ãããŸãããããfalseã«èšå®ãããšãã«ã¹ã¿ã ããããã£ã¯èŠçŽ ã«çŽæ¥é©çšãããåŸæ¥ã®CSSããããã£ã®ããã«åäœããŸãã
6. stateïŒããŸãäžè¬çã§ã¯ãªãããé«åºŠãªäœ¿çšã«ã¯éèŠïŒ
ãã®ããããã£ã¯ãããåºç¯ãªCSS Typed OMã®äžéšã§ãããã«ã¹ã¿ã ã®è§£æãã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã®å¯èœæ§ãå«ããå€ã®åŠçæ¹æ³ã«å¯Ÿããããé«åºŠãªå¶åŸ¡ãå¯èœã«ããŸãã@propertyã¯äž»ã«ç»é²ãšåºæ¬çãªååŠçã«çŠç¹ãåœãŠãŠããŸãããTyped OMãšã®é¢é£ãçè§£ããããšã¯ãçã«é«åºŠãªæäœã®éµãšãªããŸãã
åä»ãã«ã¹ã¿ã ããããã£ã®åïŒ@propertyãéèŠãªçç±
@propertyã®æãéèŠãªå©ç¹ã¯ãåä»ãã«ã¹ã¿ã ããããã£ãäœæã§ããããšã§ããã«ã¹ã¿ã ããããã£ãç¹å®ã®æ§æïŒäŸïŒ<length>, <color>, <number>ïŒã§ç»é²ãããšããã©ãŠã¶ã¯ãã®å€ãåçŽãªæååãšããŠã§ã¯ãªããåä»ããããJavaScriptãªããžã§ã¯ããšããŠæ±ãããšãã§ããŸããããã«ã¯ã以äžã®ãããªéå€§ãªæå³ããããŸãïŒ
1. ã·ãŒã ã¬ã¹ãªã¢ãã¡ãŒã·ã§ã³
ããããããã@propertyã®æãç§°è³ãããå©ç¹ã§ãããã以åã¯ãã«ã¹ã¿ã ããããã£ã®ã¢ãã¡ãŒã·ã§ã³åã¯ããã¯çãªããã»ã¹ã§ããããã°ãã°JavaScriptãå·§åŠãªåé¿çãå¿
èŠãšããåžžã«ã¹ã ãŒãºã§äºæž¬å¯èœãªçµæãåŸãããããã§ã¯ãããŸããã§ããã@propertyã䜿çšãããšãã«ã¹ã¿ã ããããã£ãã¢ãã¡ãŒã·ã§ã³å¯èœãªåïŒ<length>, <color>, <number>ãªã©ïŒãæã£ãŠããå Žåã@keyframesãCSSãã©ã³ãžã·ã§ã³ã䜿çšããŠçŽæ¥ã¢ãã¡ãŒã·ã§ã³åã§ããŸãã
äŸïŒã«ã¹ã¿ã ã«ã©ãŒå€æ°ã®ã¢ãã¡ãŒã·ã§ã³å
@property --my-color {
syntax: "";
initial-value: #000;
inherits: false;
}
@keyframes color-change {
from { --my-color: #000; }
to { --my-color: #f00; }
}
.element {
--my-color: #000;
animation: color-change 5s infinite alternate;
}
ãã®äŸã§ã¯ã--my-colorããããã£ã¯<color>åãšããŠç»é²ãããŠããŸããããã«ããããã©ãŠã¶ã¯@keyframesã«ãŒã«ã§å®çŸ©ãããåæè²ãšæçµè²ã®éãã¹ã ãŒãºãã€å¹ççã«è£éã§ããŸããããã«ããããã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ã«JavaScriptã«é Œãããšãªãããã€ãããã¯ãªèŠèŠå¹æã®å¯èœæ§ãåºãããŸãã
2. 匷åãããããŒãèšå®ãšãã€ãããã¯ã¹ã¿ã€ãªã³ã°
@propertyã¯ããŒãèšå®ã倧å¹
ã«å
ç¢ã«ããŸãã--primary-color, --font-size-base, --border-radius-componentã®ãããªããŒãé¢é£ã®ããããã£ãããããã®åã§ç»é²ã§ããŸããããã«ããããããã®å€ã倿Žããéã«ãã©ãŠã¶ãæ£ããè§£éããã¢ããªã±ãŒã·ã§ã³å
šäœã§äžè²«æ§ã®ããäºæž¬å¯èœãªããŒãèšå®ãå®çŸããŸãã
ç°ãªãå°åã®è²ã®å¥œã¿ããã©ã³ãã£ã³ã°ã¬ã€ãã©ã€ã³ã«å¯Ÿå¿ããããšãç®æãã°ããŒãã«ãªeã³ããŒã¹ãã©ãããã©ãŒã ãèããŠã¿ãŸãããã@propertyã§ã«ã©ãŒå€æ°ãç»é²ããããšã«ãããè²ã®ãã©ã³ãžã·ã§ã³ãæŽæ°ãã·ãŒã ã¬ã¹ã§ãæå®ãããã«ã©ãŒãã©ãŒãããã«æºæ ããããšãä¿èšŒã§ããŸãã
äŸïŒã·ã³ãã«ãªããŒãåãæ¿ã
@property --theme-bg {
syntax: "";
initial-value: #ffffff;
inherits: false;
}
@property --theme-text {
syntax: "";
initial-value: #333333;
inherits: false;
}
:root {
--theme-bg: #ffffff;
--theme-text: #333333;
}
body {
background-color: var(--theme-bg);
color: var(--theme-text);
transition: --theme-bg 0.3s ease, --theme-text 0.3s ease;
}
.dark-mode {
--theme-bg: #333333;
--theme-text: #ffffff;
}
ãã®èšå®ã«ãããbodyãŸãã¯htmlèŠçŽ ã®.dark-modeã¯ã©ã¹ãåãæ¿ãããšããã©ã³ãžã·ã§ã³ããããã£ãš--theme-bgããã³--theme-textã®åä»ããããæ§è³ªã«ãããèæ¯è²ãšããã¹ãè²ãã¹ã ãŒãºã«ç§»è¡ããŸãã
3. ãã©ãŠã¶ã®ããã©ãŒãã³ã¹ãšäºæž¬å¯èœæ§ã®åäž
ãã©ãŠã¶ã«æç€ºçãªåæ
å ±ãæäŸããããšã§ã@propertyã¯ããå¹ççãªè§£æãšã¬ã³ããªã³ã°ãå¯èœã«ããŸãããã©ãŠã¶ã¯ã«ã¹ã¿ã ããããã£ã®å€ã®åãæšæž¬ããå¿
èŠããªããªããç¹ã«å€ãã®ã«ã¹ã¿ã ããããã£ãã¢ãã¡ãŒã·ã§ã³ãæã€è€éãªUIã«ãããŠãããã©ãŒãã³ã¹ã®åäžãæåŸ
ã§ããŸãã
ããã«ãåæ€èšŒã¯ãšã©ãŒãæ©æã«çºèŠããã®ã«åœ¹ç«ã¡ãŸãã誀ã£ãŠ<color>ãæåŸ
ããããããã£ã«<length>ã®å€ãå²ãåœãŠãå Žåããã©ãŠã¶ã¯ãããææããäºæããªãã¬ã³ããªã³ã°ã®åé¡ãé²ãããšãã§ããŸããããã«ãããããäºæž¬å¯èœãªåäœãšç°¡åãªãããã°ãå¯èœã«ãªããŸãã
4. JavaScriptãšTyped OMã«ããé«åºŠãªãŠãŒã¹ã±ãŒã¹
@propertyã¯ãäœã¬ãã«ã®CSSæ©èœãJavaScript APIãéããŠéçºè
ã«å
¬éããããšãç®çãšããããã倧ããªHoudiniã€ãã·ã¢ããã®äžéšã§ããCSS Typed OMïŒObject ModelïŒãšçµã¿åãããŠäœ¿çšãããšã@propertyã¯ããã«åŒ·åã«ãªããŸãã
CSS Typed OMã¯ãåä»ããããå€ã§CSSããããã£ã«ã¢ã¯ã»ã¹ããæäœããããã®JavaScript APIãæäŸããŸããããã¯ãç»é²ããã«ã¹ã¿ã ããããã£ããæååãæäœãããããããã©ãŒãã³ã¹ãé«ãäºæž¬å¯èœãªç¹å®ã®JavaScriptåïŒäŸïŒCSSUnitValue, CSSColorValueïŒã䜿çšããŠæäœã§ããããšãæå³ããŸãã
äŸïŒJavaScriptã䜿çšããŠç»é²æžã¿ããããã£ãã¢ãã¡ãŒã·ã§ã³åãã
// Assuming --my-length is registered with syntax: ""
const element = document.querySelector('.animated-element');
if (element) {
// Set the property using a CSSUnitValue
element.style.setProperty('--my-length', CSS.px(50));
// Animate the property using element.animate()
const animation = element.animate([
{ '--my-length': CSS.px(50) },
{ '--my-length': CSS.px(150) }
], {
duration: 1000,
iterations: Infinity,
direction: 'alternate',
easing: 'ease-in-out'
});
}
ãã®JavaScriptã®çžäºäœçšã«ããããŠãŒã¶ãŒå ¥åãããŒã¿ã«åºã¥ããŠã¢ãã¡ãŒã·ã§ã³ãããã°ã©ã ã§å¶åŸ¡ããããåçã«å€ãæäœããããè€éãªJavaScriptãã¬ãŒã ã¯ãŒã¯ãšçµ±åãããããããšãå¯èœã«ãªãããã®ãã¹ãŠããã©ãŠã¶ã®åä»ãã«ã¹ã¿ã ããããã£ã«å¯Ÿãããã€ãã£ããªçè§£ãæŽ»çšããŠããŸãã
å®è·µçãªå®è£ ãšã°ããŒãã«ãªèæ ®äºé
@propertyãå®è£
ããéãç¹ã«ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã察象ãšããå Žåã¯ã以äžã®ç¹ãèæ
®ããŠãã ããïŒ
1. ãã©ãŠã¶ãµããŒããšããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ã
@propertyã¯æ¯èŒçæ°ããæ©èœã§ãããã©ãŠã¶ã®ãµããŒãã¯æ¡å€§ããŠããŸãããããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãã念é ã«çœ®ããŠå®è£
ããããšãäžå¯æ¬ ã§ãã@propertyããµããŒãããŠããªããã©ãŠã¶ã§ããã¹ã¿ã€ã«ãé©åã«ãã°ã¬ãŒãïŒæ©èœäœäžïŒããããã«ãã¹ãã§ãã
ãããå®çŸããã«ã¯ãå€ããã©ãŠã¶ã§ãæ©èœãããã©ãŒã«ããã¯å€ãã«ã¹ã¿ã ããããã£ã«å®çŸ©ããŸããäŸãã°ããµããŒãããŠãããã©ãŠã¶ã§ã¯ã«ã¹ã¿ã ããããã£ãã¢ãã¡ãŒã·ã§ã³åãããã以å€ã®ãã©ãŠã¶ã§ã¯éçãªCSSã¯ã©ã¹ãJavaScriptã«ãããã©ãŒã«ããã¯ã«é Œãããšãã§ããŸãã
äŸïŒé察å¿ãã©ãŠã¶åãã®ãã©ãŒã«ããã¯
/* For browsers supporting @property */
@property --progress-bar-color {
syntax: "";
initial-value: #007bff;
inherits: false;
}
.progress-bar {
background-color: var(--progress-bar-color, #007bff); /* Fallback color */
width: 100%;
height: 10px;
/* Animation defined using @property */
animation: progress-animation 3s linear forwards;
}
@keyframes progress-animation {
from { --progress-bar-color: #007bff; }
to { --progress-bar-color: #28a745; }
}
/* Styles for browsers that might not animate the custom property */
.no-support .progress-bar {
background-color: #28a745; /* Static color */
}
ãã®ã·ããªãªã§ã¯ããã©ãŠã¶ã@propertyããµããŒãããŠããªãå Žåãvar(--progress-bar-color, #007bff)ã¯ãã©ãŒã«ããã¯ã«ã©ãŒã䜿çšããŸããã¢ãã¡ãŒã·ã§ã³ã¯æ©èœããªããããããŸããããåºæ¬çãªããžã¥ã¢ã«ã¯è¡šç€ºãããŸããããã«JavaScriptã®ãã§ãã¯ã§.no-supportã¯ã©ã¹ãé©çšããããšã§ãããã匷åã§ããŸãã
2. æç¢ºã§äžè²«æ§ã®ããæ§æã®å®çŸ©
ã°ããŒãã«ãªãããžã§ã¯ãã§ã¯ãæ§æå®çŸ©ã®äžè²«æ§ãéµãšãªããŸããsyntax宣èšãæ£ç¢ºã§ãããäºæ³ããããã¹ãŠã®å€ãã«ããŒããŠããããšã確èªããŠãã ãããããããã£ã<length>ãŸãã¯<percentage>ã®ããããã§ããå¯èœæ§ãããå Žåã¯ãæç€ºçã«<length> | <percentage>ãšå®£èšããŠãã ããã
åœéåïŒi18nïŒãžã®åœ±é¿ãèæ
®ããŠãã ããã@propertyèªäœã¯ããã¹ãã®ããŒã«ã©ã€ãŒãŒã·ã§ã³ãçŽæ¥æ±ããŸããããã«ã¹ã¿ã ããããã£ã«å®çŸ©ããå€ïŒäŸïŒé·ããæ°å€ïŒã¯äžè¬çã«æ®éçã§ãããã ããã«ã¹ã¿ã ããããã£ãããã¹ãé¢é£ã®ã¹ã¿ã€ã«ã«åœ±é¿ãäžããå Žåã¯ãããããå¥ã®i18nã¡ã«ããºã ãéããŠç®¡çãããŠããããšã確èªããŠãã ããã
3. ã°ããŒãã«ãªå¯èªæ§ã®ããã®åœåèŠå
ã«ã¹ã¿ã ããããã£ã«ã¯ã説æçã§æ®éçã«çè§£å¯èœãªååã䜿çšããŠãã ãããããŸã翻蚳ãããªãå¯èœæ§ã®ããå°éçšèªãç¥èªã¯é¿ããŠãã ãããäŸãã°ãborder-radiusã«ã¯--br-cã§ã¯ãªãã--border-radiusã䜿çšããŸãã
ã°ããŒãã«ãªããŒã ã§ã¯ãæç¢ºãªåœåèŠåãæ··ä¹±ãé²ããã³ã©ãã¬ãŒã·ã§ã³ãä¿é²ããŸãã倧éžãè¶ããããŒã ã«ãã£ãŠéçºããããããžã§ã¯ãã¯ãé©åã«åœåãããCSS倿°ãã倧ããªæ©æµãåããã§ãããã
4. ããã©ãŒãã³ã¹ã®æé©å
@propertyã¯ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãããé床ã®äœ¿çšã誀çšã¯äŸç¶ãšããŠåé¡ãåŒãèµ·ããå¯èœæ§ããããŸããããããã£ãç»é²ããããããå¿
èŠã®ãªãããããã£ãã¢ãã¡ãŒã·ã§ã³åãããããªãããã«æ³šæããŠãã ãããã¢ããªã±ãŒã·ã§ã³ããããã¡ã€ãªã³ã°ããŠãããã«ããã¯ãç¹å®ããŠãã ãããäŸãã°ãè€éãªé¢æ°ãæã€<transform-list>ãã¢ãã¡ãŒã·ã§ã³åããããšã¯ãåçŽãª<number>ãã¢ãã¡ãŒã·ã§ã³åããã®ãšã¯ç°ãªãããã©ãŒãã³ã¹ãžã®åœ±é¿ããããŸãã
initial-valueãå®çŸ©ããéã¯ããããåççã§å¹ççã§ããããšã確èªããŠãã ãããè€éãªã¢ãã¡ãŒã·ã§ã³ã®å Žåããã©ãŠã¶ã®ã¬ã³ããªã³ã°ãã€ãã©ã€ã³ãšãç¹å®ã®ããããã£ãåæç»ãŸãã¯ååæãããŠãããã©ãããèæ
®ããŠãã ããã
ã¢ãã¡ãŒã·ã§ã³ãè¶ ããŠïŒããŒãèšå®ã®åãšã³ã³ããŒãã³ããã¶ã€ã³
@propertyã®åœ±é¿ã¯ãåã«ã¢ãã¡ãŒã·ã§ã³ãå¯èœã«ããããšã ãã«ãšã©ãŸããŸããã
1. é«åºŠãªããŒãèšå®ã·ã¹ãã
æ§ã
ãªãã©ã³ãã¢ã€ãã³ãã£ãã£ãã¢ã¯ã»ã·ããªãã£ã®ããŒãºïŒäŸïŒãã€ã³ã³ãã©ã¹ãã¢ãŒãïŒããããã¯ããŒãœãã©ã€ãºããããŠãŒã¶ãŒããŒãã«é©å¿ããå¿
èŠããããã¶ã€ã³ã·ã¹ãã ãæ³åããŠã¿ãŠãã ããã@propertyã¯ããããã®é«åºŠãªããŒãèšå®æ©èœã®åºç€ãšãªãã¬ã€ã€ãŒãæäŸããŸããããŒãããŒã¯ã³ãæ£ããåã§ç»é²ããããšã«ããããã¶ã€ããŒãšéçºè
ã¯ããã©ãŠã¶ãããããæ£ããè§£éããããšã確信ããŠãèªä¿¡ãæã£ãŠæäœã§ããŸãã
ã°ããŒãã«ãªSaaSãã©ãããã©ãŒã ã«ãšã£ãŠãããŸããŸãªããã³ããããããã®ãã©ã³ãã£ã³ã°ã§è¿ éã«ããŒãèšå®ãããã¹ãŠã®ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ããã©ã³ãã®é°å²æ°ã«åãããŠã¹ã ãŒãºã«ã¢ãã¡ãŒã·ã§ã³ããããšãä¿èšŒããèœåã¯ã倧ããªå©ç¹ãšãªããŸãã
2. ã³ã³ããŒãã³ãããŒã¹ã®éçº
çŸä»£ã®ã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ïŒReactãVueãAngularãªã©ïŒã§ã¯ãCSSã«ã¹ã¿ã ããããã£ã¯ãã°ãã°ã¹ã¿ã€ãªã³ã°èšå®ãåã
ã®ã³ã³ããŒãã³ãã«æž¡ãããã«äœ¿çšãããŸãã@propertyã¯ãã³ã³ããŒãã³ãããã®ã¹ã¿ã€ãªã³ã°å¥çŽãæç€ºçã«å®£èšã§ããããã«ããããšã§ãããã匷åããŸãã
ã³ã³ããŒãã³ãã©ã€ãã©ãªã¯ãã«ã¹ã¿ãã€ãºå¯èœãªããããã£ãç»é²ããæåŸ ãããåãšåæå€ãå®çŸ©ããããšãã§ããŸããããã«ãããã³ã³ããŒãã³ãã¯ããäºæž¬å¯èœã§ã䜿ãããããã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªéšåããããã«ã¯ç°ãªããããžã§ã¯ãã«çµ±åãããéã«ãããå ç¢ã«ãªããŸãã
äžçäžã®éçºè
ã«ãã£ãŠäœ¿çšãããUIã³ã³ããŒãã³ãã©ã€ãã©ãªãèããŠã¿ãŠãã ããã--button-paddingïŒ<length>ïŒã--button-background-colorïŒ<color>ïŒã--button-border-radiusïŒ<number>ïŒã®ãããªããããã£ãç»é²ããããšã«ãããã©ã€ãã©ãªã¯ãããã®ã«ã¹ã¿ãã€ãºãæ£ããé©çšãããã ãã§ãªããã³ã³ããŒãã³ãã®ç¶æ
ãå€åããå Žåã«ã¹ã ãŒãºã«ã¢ãã¡ãŒã·ã§ã³ãŸãã¯ãã©ã³ãžã·ã§ã³ã§ããããšãä¿èšŒããŸãã
3. ããŒã¿å¯èŠå
ãŠã§ãããŒã¹ã®ããŒã¿å¯èŠåã§ã¯ãããŒã¿ã«åºã¥ããŠè²ããµã€ãºãã¹ãããŒã¯ã®å¹
ãåçã«å€æŽããããšãäžè¬çã§ãã@propertyã¯ãJavaScriptãšçµã¿åãããããšã§ããããã®æŽæ°ãåçã«ç°¡çŽ åã§ããŸããCSSã«ãŒã«å
šäœãåèšç®ããŠåé©çšãã代ããã«ãç»é²ãããã«ã¹ã¿ã ããããã£ã®å€ãæŽæ°ããã ãã§æžã¿ãŸãã
äŸãã°ãã°ããŒãã«ãªå£²äžããŒã¿ãå¯èŠåããå Žåãããã©ãŒãã³ã¹ææšã«åºã¥ããŠããŒãè²åãããããšããããŸãã--bar-colorã<color>ãšããŠç»é²ããããšã§ãããŒã¿ãæŽæ°ãããã«ã€ããŠã·ãŒã ã¬ã¹ãªãã©ã³ãžã·ã§ã³ãå¯èœã«ãªããããé
åçãªãŠãŒã¶ãŒäœéšãæäŸããŸãã
æœåšçãªèª²é¡ãšå°æ¥ã®èæ ®äºé
@propertyã¯CSSããŒã«ããããžã®åŒ·åãªè¿œå æ©èœã§ãããæœåšçãªèª²é¡ãšå°æ¥ã®æ¹åæ§ãèªèããããšãéèŠã§ãïŒ
- ãã©ãŠã¶ãµããŒãã®æçåºŠïŒæ¹åãããŠã¯ããŸããã察象ãã©ãŠã¶ã§åŸ¹åºçã«ãã¹ãããããšã確èªããŠãã ãããå€ãããŒãžã§ã³ãããŸãäžè¬çã§ãªããã©ãŠã¶ã¯ãµããŒãããŠããªãå¯èœæ§ãããããã©ãŒã«ããã¯æŠç¥ãå¿ èŠã«ãªããŸãã
- è€éãïŒéåžžã«åçŽãªãŠãŒã¹ã±ãŒã¹ã§ã¯ã
@propertyã¯éå°ã«èŠãããããããŸããããããããã®å©ç¹ã¯ãã¢ãã¡ãŒã·ã§ã³ãããŒãèšå®ããŸãã¯é«åºŠãªã³ã³ããŒãã³ããã¶ã€ã³ãå«ãããè€éãªã·ããªãªã§æããã«ãªããŸãã - ããŒã«ãšãã«ãããã»ã¹ïŒæ©èœãæçããã«ã€ããŠãããŒã«ãšãã«ãããã»ã¹ã¯
@property宣èšã®ç®¡çãšæé©åã®ããã®ããè¯ãçµ±åãæäŸããå¯èœæ§ããããŸãã - æ¢åã®CSSãšã®çžäºäœçšïŒ
@propertyãæ¢åã®CSSæ©èœã詳现床ãã«ã¹ã±ãŒããšã©ã®ããã«çžäºäœçšããããçè§£ããããšã¯ã广çãªå®è£ ã®ããã«äžå¯æ¬ ã§ãã
çµè«
CSS @propertyã¯ãCSSã®èœåã«ããã倧ããªé£èºã衚ããã«ã¹ã¿ã ããããã£ãåçŽãªæåå倿°ããã匷åã§åãæèããå€ãžãšå€é©ããŸããéçºè
ãå®çŸ©ãããæ§æãåæå€ãç¶æ¿ã«ãŒã«ãæã€ã«ã¹ã¿ã ããããã£ãç»é²ã§ããããã«ããããšã§ã@propertyã¯ãã€ãããã¯ã¹ã¿ã€ãªã³ã°ã®æ°æä»£ãåãéããã·ãŒã ã¬ã¹ãªã¢ãã¡ãŒã·ã§ã³ãå
ç¢ãªããŒãèšå®ãããäºæž¬å¯èœãªã³ã³ããŒãã³ãããŒã¹ã®ãã¶ã€ã³ãå¯èœã«ããŸãã
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«æ§ç¯ããéçºè
ã«ãšã£ãŠãé«åºŠã«ã€ã³ã¿ã©ã¯ãã£ãã§ãèŠèŠçã«é
åçã§ãä¿å®ã容æãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœæããèœåã¯æãéèŠã§ãã@propertyã¯ãããéæããããã®ããŒã«ãæäŸããããåªããå¶åŸ¡ãåäžããããã©ãŒãã³ã¹ãããåçåãããéçºã¯ãŒã¯ãããŒãæäŸããŸãããã©ãŠã¶ã®ãµããŒããæ¡å€§ãç¶ããã«ã€ããŠã@propertyãåãå
¥ããããšã¯ãçŸä»£ã®ãŠã§ãéçºã®æåç·ã«ç«ã¡ãäžçäžã®ãŠãŒã¶ãŒã«åè¶ããäœéšãåµé ããããã®éµãšãªãã§ãããã
仿¥ãã@propertyã詊ãå§ããæ¬¡ã®ã°ããŒãã«ãªãŠã§ããããžã§ã¯ãã®ããã«ãããæäŸããç¡éã®å¯èœæ§ãçºèŠããŠãã ããïŒ