CSS @exportã®å æ¬çã¬ã€ããæ§æããŠãŒã¹ã±ãŒã¹ãå©ç¹ãæ¢ããã¢ãã³ãªWebéçºã§CSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã®ã¢ãžã¥ãŒã«æ§ãšåå©çšæ§ãåäžãããæ¹æ³ã解説ããŸãã
CSS @export: ã¢ãã³ãªWebéçºã®ããã®ã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ãšã¯ã¹ããŒãã培åºè§£èª¬
çµ¶ããé²åããWebéçºã®äžçã§ã¯ãä¿å®æ§ãšåå©çšæ§ãæãéèŠã§ããCSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã¯ãã³ã³ããŒãã³ãå
ã«ã¹ã¿ã€ã«ãã«ãã»ã«åããã°ããŒãã«ãªåå空éã®æ±æãé²ã匷åãªã¡ã«ããºã ãæäŸããŸããããããæã«ã¯ç¹å®ã®ã¹ã¿ã€ã«ãå€ãããã¢ãžã¥ãŒã«ããå¥ã®ã¢ãžã¥ãŒã«ã«å
¬éããå¿
èŠããããŸããããã§åœ¹ç«ã€ã®ããCSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã®@exportã«ãŒã«ã§ãããã®å
æ¬çãªã¬ã€ãã§ã¯ã@exportã®è€éãªè©³çްãæãäžãããã®æ§æããŠãŒã¹ã±ãŒã¹ãå©ç¹ããããŠCSSã®ã¢ãžã¥ãŒã«æ§ãšåå©çšæ§ãã©ã®ããã«åäžãããããæ¢ããŸãã
CSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ãšã¯ïŒ
@exportã«ã€ããŠæãäžããåã«ãCSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ãçè§£ããããšãéèŠã§ãããããã¯æ¬è³ªçã«ããã¹ãŠã®ã¯ã©ã¹åãšã¢ãã¡ãŒã·ã§ã³åãããã©ã«ãã§ããŒã«ã«ã«ã¹ã³ãŒããããCSSãã¡ã€ã«ã§ããã€ãŸããããã¢ãžã¥ãŒã«ã§å®çŸ©ãããã¯ã©ã¹åã¯ãããšãåãååã§ãã£ãŠããå¥ã®ã¢ãžã¥ãŒã«ã§å®çŸ©ãããã¯ã©ã¹åãšè¡çªããŸããããã®åé¢ã¯ãã¯ã©ã¹åããã¡ã€ã«ã®å
容ã«åºã¥ããããã·ã¥ãªã©ãä»å ããããšã§äžæã®èå¥åã«å€æããããèªåçãªååãã³ã°ãªã³ã°ã«ãã£ãŠå®çŸãããŸãã
次ã®äŸãèããŠã¿ãŸãããïŒ
/* button.module.css */
.button {
background-color: #4CAF50; /* Green */
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
cursor: pointer;
}
/* JavaScript */
import styles from './button.module.css';
function Button() {
return ;
}
export default Button;
ãã®äŸã§ã¯ãbutton.module.cssãã¡ã€ã«ã.buttonã¯ã©ã¹ã®ã¹ã¿ã€ã«ãå®çŸ©ããŠããŸããJavaScriptãã¡ã€ã«ã«ã€ã³ããŒãããããšãstyles.buttonã¯button_button__34567ã®ãããªäžæã®ã¯ã©ã¹åã«è§£æ±ºãããŸããããã«ãããã¹ã¿ã€ã«ã®è¡çªãé²ãããã¢ããªã±ãŒã·ã§ã³å
šäœã§ãã¿ã³ã®å€èгãäžè²«æ§ãä¿ã€ããšãä¿èšŒãããŸãã
@exportã«ãŒã«ã®ç޹ä»
@exportã«ãŒã«ã䜿çšãããšãCSS倿°ïŒã«ã¹ã¿ã ããããã£ïŒãã¯ã©ã¹åå
šäœãªã©ã®ç¹å®ã®å€ããCSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ããæç€ºçã«å
¬éã§ããŸããããã¯ãã°ããŒãã«ã¹ã¿ã€ã«ã«é Œããã«ã¢ãžã¥ãŒã«éã§ã¹ã¿ã€ãªã³ã°æ
å ±ãå
±æãããå Žåã«ç¹ã«äŸ¿å©ã§ãã
æ§æ
@exportã«ãŒã«ã®åºæ¬çãªæ§æã¯æ¬¡ã®ãšããã§ãïŒ
@export {
<exported-name>: <value>;
<exported-name>: <value>;
/* ... more exports */
}
@export: ãšã¯ã¹ããŒããããã¯ãéå§ããããŒã¯ãŒãã<exported-name>: å€ããšã¯ã¹ããŒããããéã®ããŒåãããã¯ãä»ã®ã¢ãžã¥ãŒã«ã§å€ã«ã¢ã¯ã»ã¹ããããã«äœ¿çšãããèå¥åã§ãã<value>: ãšã¯ã¹ããŒããããå€ãCSS倿°ãã¯ã©ã¹åããããã¯ä»ã®å€ã«åºã¥ãèšç®çµæãªã©ã§ãã
CSS倿°ïŒã«ã¹ã¿ã ããããã£ïŒã®ãšã¯ã¹ããŒã
@exportã®æãäžè¬çãªãŠãŒã¹ã±ãŒã¹ã®1ã€ã¯ãCSS倿°ã®ãšã¯ã¹ããŒãã§ããããã«ãããããŒãé¢é£ã®å€ãäžå€®ã®ã¢ãžã¥ãŒã«ã§å®çŸ©ããã¢ããªã±ãŒã·ã§ã³å
šäœã§åå©çšããããšãã§ããŸãã
äŸïŒ
/* theme.module.css */
:root {
--primary-color: #007bff; /* Blue */
--secondary-color: #6c757d; /* Grey */
--font-size-base: 16px;
}
@export {
primaryColor: var(--primary-color);
secondaryColor: var(--secondary-color);
fontSizeBase: var(--font-size-base);
}
/* component.module.css */
@import theme from './theme.module.css';
.component {
color: theme.primaryColor;
font-size: theme.fontSizeBase;
}
ãã®äŸã§ã¯ãtheme.module.cssãã¡ã€ã«ãããã€ãã®CSS倿°ãå®çŸ©ãã@exportã䜿çšããŠãããããšã¯ã¹ããŒãããŸããæ¬¡ã«ãcomponent.module.cssãã¡ã€ã«ããããã®å€æ°ãã€ã³ããŒããã.componentã¯ã©ã¹ã®ã¹ã¿ã€ã«èšå®ã«äœ¿çšããŸããCSSã¢ãžã¥ãŒã«ã«ç¹æã®@import theme from './theme.module.css';æ§æãšãtheme.variableNameã䜿çšããŠå€æ°ã«ã¢ã¯ã»ã¹ããæ¹æ³ã«æ³šç®ããŠãã ããã
解説ïŒ
:rootç䌌ã¯ã©ã¹ã¯ã°ããŒãã«ãªCSS倿°ãå®çŸ©ããŸãããããã¯æè¡çã«ã¯ã°ããŒãã«ã«ã¢ã¯ã»ã¹å¯èœã§ãããã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã®ã³ã³ããã¹ãå ã§äœ¿çšãããšã¯ã¹ããŒãããããšã§ãããè¯ãå¶åŸ¡ãšæŽçãå¯èœã«ãªããŸãã@exportãããã¯ã¯ãCSS倿°ãæ°ããååïŒprimaryColorãsecondaryColorãfontSizeBaseïŒã§å ¬éããŸããããã«ãããã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ã§ãã説æçãªååã䜿çšã§ããŸãã@importæã¯ããšã¯ã¹ããŒããããå€ãtheme.module.cssããcomponent.module.cssãã¡ã€ã«ã«ã€ã³ããŒãããŸããtheme.primaryColoræ§æã¯ãcomponent.module.cssãã¡ã€ã«å ã§ãšã¯ã¹ããŒããããCSS倿°ã«ã¢ã¯ã»ã¹ããŸãã
ã¯ã©ã¹åã®ãšã¯ã¹ããŒã
CSS倿°ã®ãšã¯ã¹ããŒãã»ã©äžè¬çã§ã¯ãããŸãããã@exportã䜿çšããŠã¯ã©ã¹åå
šäœããšã¯ã¹ããŒãããããšãã§ããŸããããã¯ãããã¢ãžã¥ãŒã«ã®ç¹å®ã®ã¹ã¿ã€ã«ãå¥ã®ã¢ãžã¥ãŒã«ã§åå©çšãããå Žåã«äŸ¿å©ã§ãã
äŸïŒ
/* alert.module.css */
.alert {
padding: 10px;
border: 1px solid transparent;
border-radius: 4px;
}
.alertSuccess {
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
@export {
alert: alert;
alertSuccess: alertSuccess;
}
/* notification.module.css */
@import alertStyles from './alert.module.css';
.notification {
/* Additional styles for the notification container */
}
.notificationSuccess {
extend: alertStyles.alertSuccess all;
/* More Specific Styles Here */
}
ãã®äŸã§ã¯ãalert.module.cssãã¡ã€ã«ãåºæ¬çãªã¢ã©ãŒãã¡ãã»ãŒãžãšæåã¢ã©ãŒãã¡ãã»ãŒãžã®ã¹ã¿ã€ã«ãå®çŸ©ããŠããŸãããã®åŸã@exportã䜿çšããŠãããã®ã¯ã©ã¹åããšã¯ã¹ããŒãããŸããnotification.module.cssã¯ãããã®ã¹ã¿ã€ã«ãã€ã³ããŒãããŸããextendãã£ã¬ã¯ãã£ãã䜿çšããããšã§ã.notificationSuccessã®ã¹ã¿ã€ã«ã.alertSuccessã§èŠã€ããã«ãŒã«ãšåäžã§ããããšãå®è³ªçã«ç€ºããŠããŸããããã«ãããCSSãããDRYïŒDon't Repeat YourselfïŒã«ãªããŸãã
解説ïŒ
alert.module.cssãã¡ã€ã«ã¯.alertã¯ã©ã¹ãš.alertSuccessã¯ã©ã¹ãå®çŸ©ããŸãã@exportãããã¯ã¯ããããã®ã¯ã©ã¹åãåãååïŒalertãalertSuccessïŒã§ãšã¯ã¹ããŒãããŸãã@importæã¯ããšã¯ã¹ããŒããããã¯ã©ã¹åãalert.module.cssããnotification.module.cssãã¡ã€ã«ã«ã€ã³ããŒãããŸãã- ãã®åŸã
extendãã£ã¬ã¯ãã£ãã¯.alertSuccessã®ã¹ã¿ã€ã«ãç¶æ¿ãã.notificationSuccessã«é©çšããŸãã
CSS倿°ãšã¯ã©ã¹åã®çµã¿åãã
åã@exportãããã¯å
ã§CSS倿°ãšã¯ã©ã¹åãçµã¿åãããããšãã§ããŸãã
/* base.module.css */
:root {
--base-font-size: 14px;
}
.baseStyle {
font-family: sans-serif;
font-size: var(--base-font-size);
}
@export {
baseFontSize: var(--base-font-size);
baseStyle: baseStyle;
}
@exportã䜿çšããå©ç¹
CSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã§@exportã䜿çšããããšã«ã¯ãããã€ãã®éèŠãªå©ç¹ããããŸãïŒ
- ã¢ãžã¥ãŒã«æ§ã®åäžïŒæç¢ºãªå¢çãæã€ãé©åã«å®çŸ©ãããã¢ãžã¥ãŒã«ãäœæã§ããããè¯ãæŽçãšä¿å®æ§ãä¿é²ããŸãã
- åå©çšæ§ã®åŒ·åïŒç°ãªãã³ã³ããŒãã³ãéã§ã¹ã¿ã€ã«ãå€ãåå©çšã§ããã³ãŒãã®éè€ãæžãããäžè²«æ§ãåäžãããŸãã
- ã°ããŒãã«ãªåå空éã®æ±æã®åæžïŒå¿ èŠãªã¹ã¿ã€ã«ãšå€ã®ã¿ããšã¯ã¹ããŒãããããšã§ãåœåè¡çªãæå³ããªãã¹ã¿ã€ã«äžæžãã®ãªã¹ã¯ãæå°éã«æããŸãã
- ããŒãèšå®ãµããŒãã®åäžïŒããŒãé¢é£ã®å€æ°ãäžå çã«å®çŸ©ããã¢ããªã±ãŒã·ã§ã³å šäœã«é åžã§ãããããããŒãã®äœæãšç®¡çã®ããã»ã¹ãç°¡çŽ åãããŸãã
- ãã¹ãå®¹ææ§ã®åäžïŒã¹ã¿ã€ã«ãã¢ãžã¥ãŒã«å ã«åé¢ããããšã§CSSã®ãã¹ãã容æã«ãªããã³ã³ããŒãã³ããæ£ããã¹ã¿ã€ã«èšå®ãããŠãããã確èªãããããªããŸãã
ã°ããŒãã«ãããžã§ã¯ãã«ããã@exportã®ãŠãŒã¹ã±ãŒã¹
@exportã«ãŒã«ã¯ãäžè²«æ§ãä¿å®æ§ãã¹ã±ãŒã©ããªãã£ãéèŠãªå€§èŠæš¡ãªã°ããŒãã«Webéçºãããžã§ã¯ãã§ç¹ã«æçã§ãã以äžã«ããã€ãã®å
·äœçãªãŠãŒã¹ã±ãŒã¹ãæããŸãïŒ
- ãã¶ã€ã³ã·ã¹ãã ïŒãã¶ã€ã³ã·ã¹ãã ãæ§ç¯ããããŒã ã«ãšã£ãŠã
@exportã¯ã«ã©ãŒãã¬ãããã¿ã€ãã°ã©ãã£ã¹ã±ãŒã«ãã¹ããŒã·ã³ã°ãŠããããªã©ã®ã³ã¢ãªã¹ã¿ã€ã«ååãå®çŸ©ãããã¹ãŠã®ã³ã³ããŒãã³ãã«é åžããããã«äœ¿çšã§ããŸããããã«ãããäžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒãããã·ã¹ãã ã®ç¶æã«å¿ èŠãªåŽåãåæžãããŸãã - ãã«ãããŒãã¢ããªã±ãŒã·ã§ã³ïŒè€æ°ã®ããŒãããµããŒãããã¢ããªã±ãŒã·ã§ã³ã§ã¯ã
@exportãæŽ»çšããŠããŒãåºæã®å€æ°ãšã¹ã¿ã€ã«ãå®çŸ©ã§ããŸããããã«ããããŠãŒã¶ãŒã¯åºç€ãšãªãã³ã³ããŒãã³ãã³ãŒãã倿ŽããããšãªãããŒããåãæ¿ããããšãã§ããŸããäŸãã°ãã©ã€ãããŒããšããŒã¯ããŒããéžæã§ããéè¡ã¢ããªã±ãŒã·ã§ã³ããå£ç¯ããšã«ç°ãªãããŒããæäŸããEã³ããŒã¹ãã©ãããã©ãŒã ãæ³åããŠã¿ãŠãã ããã - ã³ã³ããŒãã³ãã©ã€ãã©ãªïŒå
éšçšãŸãã¯å€éšçšã®ã³ã³ããŒãã³ãã©ã€ãã©ãªãéçºããéã
@exportã䜿çšããŠã«ã¹ã¿ãã€ãºå¯èœãªã¹ã¿ã€ã«ããã¯ãå ¬éã§ããŸããããã«ãããéçºè ã¯ã³ã¢ã³ã³ããŒãã³ãã³ãŒãã倿Žããããšãªããã©ã€ãã©ãªã®ã³ã³ããŒãã³ããç¹å®ã®ããŒãºã«ç°¡åã«é©å¿ãããããšãã§ããŸããäŸãã°ãã°ããŒãã«äŒæ¥åãã®UIã©ã€ãã©ãªã§ã¯ãéçºè ããã¿ã³ããã®ä»ã®ã€ã³ã¿ã©ã¯ãã£ãèŠçŽ ã§äœ¿çšããããã©ã€ããªã«ã©ãŒãã«ã¹ã¿ãã€ãºã§ããããã«ããããšãèããããŸãã - åœéåïŒi18nïŒãšããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒL10nïŒïŒ
@exportã¯ããŠãŒã¶ãŒã®ãã±ãŒã«ã«åºã¥ããŠå€åããã¹ã¿ã€ã«ã管çããããã«äœ¿çšã§ããŸããäŸãã°ãæåå¯åºŠãç°ãªãèšèªã«å¯ŸããŠãç°ãªããã©ã³ããµã€ãºãã¹ããŒã·ã³ã°å€ããšã¯ã¹ããŒãã§ããŸããè±èªã𿥿¬èªã®äž¡æ¹ãã¿ãŒã²ãããšãããŠã§ããµã€ãã§ã¯ãç°ãªãæåå¹ ã«å¯Ÿå¿ããããã«ãã©ã³ããµã€ãºã調æŽããå¿ èŠããããããããŸããã - A/Bãã¹ãïŒç°ãªããŠã§ããµã€ããã¶ã€ã³ã§A/Bãã¹ããå®è¡ããéã
@exportã䜿çšããŠãç°¡åã«å ¥ãæ¿ãå¯èœãªåå¥ã®ã¹ã¿ã€ã«ããªãšãŒã·ã§ã³ãäœæã§ããŸããããã«ãããCSSã®å€§éšåãæžãçŽãããšãªããç°ãªããã¶ã€ã³ã®ããã©ãŒãã³ã¹ãè¿ éã«æ¯èŒã§ããŸããäŸãã°ã@exportã䜿çšããŠãåããªãšãŒã·ã§ã³ã«ç°ãªãã«ã©ãŒã¹ããŒã ããã¿ã³ã¹ã¿ã€ã«ãå®çŸ©ã§ããŸãã
@exportã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
@exportã®å©ç¹ãæå€§éã«æŽ»çšããã«ã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
- å¿ èŠãªãã®ã ãããšã¯ã¹ããŒãããïŒäžèŠãªã¹ã¿ã€ã«ãå€ããšã¯ã¹ããŒãããã®ã¯é¿ããŠãã ãããä»ã®ã¢ãžã¥ãŒã«ã§æ¬åœã«å¿ èŠãªãã®ã ãããšã¯ã¹ããŒãããŸããããã«ãããã¢ãžã¥ãŒã«ãçŠç¹ãçµãããä¿å®ããããç¶æ ã«ä¿ã€ããšãã§ããŸãã
- 説æçãªååã䜿çšããïŒãšã¯ã¹ããŒããã倿°ãã¯ã©ã¹åã«ã¯ãæç¢ºã§èª¬æçãªååãéžã³ãŸããããã«ãããä»ã®éçºè
ããšã¯ã¹ããŒããããå€ãäœã衚ããŠããããçè§£ãããããªããŸããäŸãã°ã
color1ãšããååã®å€æ°ããšã¯ã¹ããŒããã代ããã«ãprimaryColorãbrandColorã䜿çšããŸãã - ãšã¯ã¹ããŒããææžåããïŒãšã¯ã¹ããŒããã倿°ãã¯ã©ã¹åã«ã€ããŠããã®ç®çãšäœ¿ç𿹿³ã説æããæç¢ºãªããã¥ã¡ã³ããæäŸããŸããããã«ãããä»ã®éçºè ããšã¯ã¹ããŒããããå€ãæ£ãã䜿çšããæ¹æ³ãçè§£ããã®ã«åœ¹ç«ã¡ãŸããJSDocãStyleguidistã®ãããªããŒã«ã䜿çšããŠãCSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã®ããã¥ã¡ã³ããçæããããšãæ€èšããŠãã ããã
- äžè²«ããã¹ã¿ã€ã«ã¬ã€ããç¶æããïŒåœåèŠåã
@exportã®äœ¿çšã«é¢ãããã¹ããã©ã¯ãã£ã¹ãå«ããCSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã®ããã®äžè²«ããã¹ã¿ã€ã«ã¬ã€ãã確ç«ããŸããããã«ãããã³ãŒãããŒã¹å šäœã§äžè²«æ§ãšä¿å®æ§ã確ä¿ã§ããŸãã - éåºŠãªæœè±¡åãé¿ããïŒ
@exportã¯åå©çšæ§ãä¿é²ããŸãããã¹ã¿ã€ã«ã®éåºŠãªæœè±¡åã¯é¿ããŠãã ãããè€æ°ã®ã³ã³ããŒãã³ãã§æ¬åœã«å ±æãããå€ã®ã¿ããšã¯ã¹ããŒãããŸãã
å¶éäºé ãšèæ ®ç¹
@exportã¯åŒ·åãªããŒã«ã§ããããã®å¶éäºé
ãšèæ
®ç¹ãèªèããŠããããšãéèŠã§ãïŒ
- ãã©ãŠã¶äºææ§ïŒ
@exportã¯CSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã«ç¹æã®ãã®ã§ãããCSSã¢ãžã¥ãŒã«ããµããŒããããã«ãããŒã«ïŒWebpackãParcelãªã©ïŒãå¿ èŠã§ããããã¯ãã€ãã£ãã®CSSæ©èœã§ã¯ãªããååŠçã¹ããããªãã§ã¯ãã©ãŠã¶ã§åäœããŸããã - è€éæ§ã®å¢å ïŒ
@exportã䜿çšãããšãç¹ã«å€§èŠæš¡ãªãããžã§ã¯ãã§ã¯CSSã¢ãŒããã¯ãã£ãè€éã«ãªãå¯èœæ§ããããŸãã@exportã䜿çšããå©ç¹ãã远å ãããè€éããäžåããã©ãããæ éã«æ€èšããããšãéèŠã§ãã - åŠç¿æ²ç·ïŒCSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã
@exportã«äžæ £ããªéçºè ã¯ãåŠç¿æ²ç·ãçµéšããå¯èœæ§ããããŸããããŒã ããããã®æè¡ã广çã«æ¡çšã§ãããããé©åãªãã¬ãŒãã³ã°ãšããã¥ã¡ã³ããæäŸããŠãã ããã
@exportã®ä»£æ¿æ¡
@exportã¯CSSã¢ãžã¥ãŒã«ã§å€ãå
±æããæšæºçãªæ¹æ³ã§ããã以äžã®ãããªä»ã®ã¢ãããŒããååšããŸãïŒ
- CSS倿°ïŒã«ã¹ã¿ã ããããã£ïŒïŒ
@exportã¯ãã°ãã°CSS倿°ãš*äžç·ã«äœ¿çš*ãããŸããã倿°èªäœã¯ã°ããŒãã«ãªã¹ã¿ã€ã«ã·ãŒããCSSã¢ãžã¥ãŒã«å ã®:rootãããã¯ã§å®çŸ©ã§ãã@exportãå¿ èŠãšããã«ã¢ã¯ã»ã¹å¯èœã«ãªãå ŽåããããŸããããããããã¯CSSã¢ãžã¥ãŒã«ãæäŸããã«ãã»ã«åãäœäžãããŸãã - CSS-in-JSãœãªã¥ãŒã·ã§ã³ïŒStyled ComponentsãEmotionãJSSã®ãããªã©ã€ãã©ãªã¯ãJavaScriptã§CSSã管çããä»£æ¿æ¹æ³ãæäŸããŸãããããã®ã©ã€ãã©ãªã¯ãã³ã³ããŒãã³ãéã§ã¹ã¿ã€ã«ãå€ãå ±æããããã®ç¬èªã®ã¡ã«ããºã ããã°ãã°æã£ãŠããŸãã
- Sass/SCSSã®å€æ°ãšMixinïŒSassãSCSSã®ãããªCSSããªããã»ããµã䜿çšããŠããå Žåã倿°ãMixinã䜿çšããŠãã¡ã€ã«éã§ã¹ã¿ã€ã«ãå ±æã§ããŸãããã ãããã®ã¢ãããŒãã¯CSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ãšåãã¬ãã«ã®ã«ãã»ã«åãæäŸããŸããã
äŸïŒã°ããŒãã«ãã©ã³ãã£ã³ã°ã¢ããªã±ãŒã·ã§ã³
ç°ãªãå°åãèšèªã§äžè²«æ§ãä¿ã€å¿
èŠãããã°ããŒãã«ãã©ã³ãã£ã³ã°ã¢ããªã±ãŒã·ã§ã³ã®äŸãèããŠã¿ãŸãããããã®ã¢ããªã±ãŒã·ã§ã³ã¯ãCSSã¢ãžã¥ãŒã«ãš@exportã䜿çšããŠã³ã¢ã¹ã¿ã€ã«ã管çããŸãïŒ
/* core-variables.module.css */
:root {
--brand-primary: #29abe2; /* A light blue */
--brand-secondary: #f26522; /* An orange */
--base-font-family: 'Open Sans', sans-serif;
}
@export {
brandPrimary: var(--brand-primary);
brandSecondary: var(--brand-secondary);
baseFontFamily: var(--base-font-family);
}
/* typography.module.css */
@import core from './core-variables.module.css';
.heading {
font-family: core.baseFontFamily;
font-weight: bold;
color: core.brandPrimary;
}
.paragraph {
font-family: core.baseFontFamily;
font-size: 16px;
line-height: 1.5;
}
@export {
heading: heading;
paragraph: paragraph;
}
/* button.module.css */
@import core from './core-variables.module.css';
@import typography from './typography.module.css';
.button {
font-family: core.baseFontFamily;
background-color: core.brandPrimary;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
ãã®äŸã§ã¯ïŒ
core-variables.module.cssã¯ãã³ã¢ãšãªããã©ã³ãã«ã©ãŒãšãã©ã³ããã¡ããªãŒãå®çŸ©ããŸããtypography.module.cssã¯ãã³ã¢å€æ°ã䜿çšããŠèŠåºããšæ®µèœã®ã¹ã¿ã€ã«ãèšå®ãããããã®ã¹ã¿ã€ã«ããšã¯ã¹ããŒãããŸããbutton.module.cssã¯ãã³ã¢å€æ°ãšã¿ã€ãã°ã©ãã£ã¹ã¿ã€ã«ã®äž¡æ¹ãã€ã³ããŒãããŠããã¿ã³ã«äžè²«ããã¹ã¿ã€ã«ãé©çšããŸãã
ãã®ã¢ãããŒãã«ãããã¢ããªã±ãŒã·ã§ã³ã®ãã©ã³ãã£ã³ã°ããã¹ãŠã®å°åãšèšèªã§äžè²«æ§ãä¿ã¡ã€ã€ãç°¡åãªã«ã¹ã¿ãã€ãºãšããŒãèšå®ãå¯èœã«ãªããŸãã
çµè«
@exportã«ãŒã«ã¯ãCSSã¹ã¿ã€ã«ã¢ãžã¥ãŒã«ã§ã¹ã¿ã€ã«ã管çããããã®è²ŽéãªããŒã«ã§ããããã¢ãžã¥ãŒã«ããå¥ã®ã¢ãžã¥ãŒã«ãžç¹å®ã®å€ãæç€ºçã«å
¬éã§ããããã«ããããšã§ãCSSã³ãŒãããŒã¹ã®ã¢ãžã¥ãŒã«æ§ãåå©çšæ§ãä¿å®æ§ãä¿é²ããŸãããã«ãããã»ã¹ãå¿
èŠã§ãå€å°ã®è€éããå ãããŸãããç¹ã«å€§èŠæš¡ãªã°ããŒãã«Webéçºãããžã§ã¯ãã«ãããŠã¯ã@exportã䜿çšããå©ç¹ãæ¬ ç¹ãäžåãããšãå€ãã§ãããã®ã¬ã€ãã§æŠèª¬ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ã@exportã广çã«æŽ»çšããã¢ããªã±ãŒã·ã§ã³ã®ããã«æŽçãããã¹ã±ãŒã©ãã«ã§ãä¿å®å¯èœãªCSSã¢ãŒããã¯ãã£ãæ§ç¯ã§ããŸãã