CSSã®@extendã®åãè§£ãæŸã¡ãããã¯ãªãŒã³ã§ä¿å®æ§ã®é«ãã³ãŒããå®çŸããŸããããã¹ã¿ã€ã«ã®ç¶æ¿æ¹æ³ãåé·æ§ã®åé¿ããããŠå®è·µçãªäŸãšãã¹ããã©ã¯ãã£ã¹ãéããŠã¯ãŒã¯ãããŒãæ¹åããæ¹æ³ãåŠã³ãŸãã
CSS @extendïŒå¹ççãªãŠã§ãéçºã®ããã®ã¹ã¿ã€ã«ç¶æ¿ããã¹ã¿ãŒãã
é²åãç¶ãããŠã§ãéçºã®äžçã«ãããŠãã¯ãªãŒã³ã§ä¿å®æ§ãé«ããå¹ççãªCSSãæžãããšã¯æãéèŠã§ããCSSã¢ãŒããã¯ãã£ã倧å¹
ã«æ¹åã§ãã匷åãªãã¯ããã¯ã®äžã€ãã@extend
ãã£ã¬ã¯ãã£ãã§ãããã®æ©èœã¯ãSassãLessã®ãããªCSSããªããã»ããµã§äžè¬çã«èŠãããŸããïŒåŸè¿°ããããã«ãããã€ãã®æ³šæç¹ã¯ãããã®ã®ãã€ãã£ãCSSã§ãå©çšå¯èœã§ãïŒãããã»ã¬ã¯ã¿ããå¥ã®ã»ã¬ã¯ã¿ãžã¹ã¿ã€ã«ãç¶æ¿ãããããšã§ãåé·æ§ãæžãããããæŽçãããã³ãŒãããŒã¹ãä¿é²ããŸãããã®ã¬ã€ãã§ã¯ã@extend
ãã£ã¬ã¯ãã£ããæ·±ãæãäžãããã®å©ç¹ããŠãŒã¹ã±ãŒã¹ããã¹ããã©ã¯ãã£ã¹ããããŠæœåšçãªèœãšã穎ã«ã€ããŠæ¢ããŸãã
CSS @extendãšã¯ïŒ
@extend
ãã£ã¬ã¯ãã£ãã¯ãæ¬è³ªçã«ããCSSã»ã¬ã¯ã¿ã§å®çŸ©ãããã¹ã¿ã€ã«ãã³ããŒãããããå¥ã®ã»ã¬ã¯ã¿ã«é©çšããŸããããã¯ãã¯ã©ã¹ïŒã»ã¬ã¯ã¿ïŒã芪ã¯ã©ã¹ïŒã»ã¬ã¯ã¿ïŒããããããã£ãã¡ãœããïŒã¹ã¿ã€ã«ïŒãç¶æ¿ã§ããããªããžã§ã¯ãæåããã°ã©ãã³ã°ã®ç¶æ¿ã®ååã«äŒŒãŠããŸããäž»ãªç®æšã¯ãDRYïŒDon't Repeat Yourself - åãããšãç¹°ãè¿ããªãïŒååã«åŸããéè€ããã³ãŒããæå°éã«æããã¹ã¿ã€ã«ã·ãŒãã®ç®¡çãšæŽæ°ã容æã«ããããšã§ãã
ããã¯ã¹ã€ã³ïŒCSSããªããã»ããµã®ããäžã€ã®äžè¬çãªæ©èœïŒãšã¯ç°ãªãã@extend
ã¯åã«ã¹ã¿ã€ã«ãã³ããŒïŒããŒã¹ãããããã§ã¯ãããŸããã代ããã«ãæ¡åŒµããã»ã¬ã¯ã¿ãå«ãããã«CSSã»ã¬ã¯ã¿ã倿ŽããŸããããã«ãããç¹ã«è€éãªã¹ã¿ã€ã«ãæ±ãå Žåã«ãããå¹ççãªCSSåºåã«ã€ãªããå¯èœæ§ããããŸãã
@extendã䜿çšããã¡ãªãã
- DRYãªCSS: åãã¹ã¿ã€ã«ãè€æ°ã®å Žæã§ç¹°ãè¿ãããšãé¿ããŸããããã«ãããCSSã®èªã¿æžããä¿å®ã容æã«ãªããŸãã倿°ã®ãã¡ã€ã«ã«ããã£ãŠã¹ã¿ã€ãªã³ã°ã«ãŒã«ãæ£åšãããŠã§ããµã€ããä¿å®ããããšãæ³åããŠã¿ãŠãã ãããã°ããŒãã«ãªã¹ã¿ã€ã«ã倿Žããã®ã¯æªå€¢ã§ãã
@extend
ã¯ãã®åé¡ãè§£æ¶ããŸãã - ä¿å®æ§: ã¹ã¿ã€ã«ãæŽæ°ããå¿
èŠãããå Žåãäžç®æã倿Žããã ãã§æžã¿ãŸããããã«ããããšã©ãŒãäžæŽåã®ãªã¹ã¯ãæžå°ããŸãããŠã§ããµã€ãã®CSSå
šäœã§ãã¿ã³ã¹ã¿ã€ã«ãç¹°ãè¿ãå®çŸ©ãããŠããã·ããªãªãèããŠã¿ãŠãã ããããã¹ãŠã®ãã¿ã³ã®ããã£ã³ã°ã調æŽããå¿
èŠãããå Žåããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãèŠã€ããŠä¿®æ£ããªããã°ãªããŸããã
@extend
ã䜿ãã°ãããŒã¹ãšãªããã¿ã³ã¹ã¿ã€ã«ãä¿®æ£ããã ãã§ãæ¡åŒµããŠãããã¹ãŠã®ã¹ã¿ã€ã«ãèªåçã«æŽæ°ãããŸãã - ããã©ãŒãã³ã¹: å Žåã«ãã£ãŠã¯ã
@extend
ã¯åãã¹ã¿ã€ã«ãäœåºŠãè€è£œããããšãé¿ãããããããã¯ã¹ã€ã³ãšæ¯èŒããŠCSSãã¡ã€ã«ãå°ãããªãããšããããŸããããã«ãããããŒãžã®èªã¿èŸŒã¿æéãççž®ããããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãåäžããŸãã - ã»ãã³ãã£ãã¯ãªCSS:
@extend
ã䜿çšãããšãããŒãžäžã®ç°ãªãèŠçŽ éã®æç¢ºãªé¢ä¿ã確ç«ããããšã§ãããã»ãã³ãã£ãã¯ãªCSSãäœæããã®ã«åœ¹ç«ã¡ãŸããäŸãã°ããã¹ãŠã®ã¢ã©ãŒãã®ããŒã¹ã¹ã¿ã€ã«ãäœæãããããããŸããŸãªã¢ã©ãŒãã¿ã€ãïŒæåãèŠåããšã©ãŒïŒã«æ¡åŒµããããšãã§ããŸãã
@extendã®å®è·µçãªäŸ
@extend
ã®åãããã€ãã®å®è·µçãªäŸã§ç€ºããŸããããããã§ã¯ã人æ°ããããåºããµããŒããããŠããCSSããªããã»ããµã§ããSassã®æ§æã䜿çšããŸãããã ãããããã®æŠå¿µã¯Lessã®ãããªä»ã®ããªããã»ããµããå®éšçãª@layer
ã¢ããã«ãŒã«ãæã€ãã€ãã£ãCSSã«ãå¿çšå¯èœã§ãïŒè©³çްã¯åŸè¿°ããŸãïŒã
äŸ1ïŒåºæ¬çãªãã¿ã³ã¹ã¿ã€ã«
ä»ã®ãã¿ã³ããªãšãŒã·ã§ã³ã«é©çšããããã©ã€ããªãã¿ã³ã¹ã¿ã€ã«ããããšããŸãã
Sass:
.btn-primary {
background-color: #007bff;
color: #fff;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.btn-secondary {
@extend .btn-primary;
background-color: #6c757d;
}
.btn-success {
@extend .btn-primary;
background-color: #28a745;
}
ã³ã³ãã€ã«åŸã®CSS:
.btn-primary, .btn-secondary, .btn-success {
background-color: #007bff;
color: #fff;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.btn-secondary {
background-color: #6c757d;
}
.btn-success {
background-color: #28a745;
}
ã³ã³ãã€ã«åŸã®CSSããåãããŒã¹ã¹ã¿ã€ã«ãå ±æããã»ã¬ã¯ã¿ãã©ã®ããã«ã°ã«ãŒãåããŠãããã«æ³šç®ããŠãã ãããããã¯ãåãã¿ã³ããªãšãŒã·ã§ã³ã§ããŒã¹ã¹ã¿ã€ã«ãè€è£œãããããå¹ççã§ãã
äŸ2ïŒãã©ãŒã èŠçŽ
@extend
ã䜿çšããŠããã©ãŒã èŠçŽ ã«äžè²«ããã«ãã¯ã¢ã³ããã£ãŒã«ãäœæã§ããŸãã
Sass:
.form-control {
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
width: 100%;
}
.form-input {
@extend .form-control;
}
.form-textarea {
@extend .form-control;
height: 150px;
}
äŸ3ïŒã¢ã©ãŒãã¡ãã»ãŒãž
ç°ãªãã¿ã€ãã®ã¢ã©ãŒãã¯ãå ±éã®ã¹ã¿ã€ã«ãå ±æãã€ã€ãç¬èªã®è²ãã¢ã€ã³ã³ãæã€ããšãã§ããŸãã
Sass:
.alert {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
}
.alert-success {
@extend .alert;
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-info {
@extend .alert;
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-warning {
@extend .alert;
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger {
@extend .alert;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
@extendã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
@extend
ã¯åŒ·åãªããŒã«ã§ãããæœåšçãªåé¡ãé¿ããããã«ã¯ãæ
éã«äœ¿çšãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ãã
- ã»ãã³ãã£ãã¯ãªã»ã¬ã¯ã¿ãšå
±ã«äœ¿çšãã:
@extend
ã¯ãé床ã«è©³çްãªã»ã¬ã¯ã¿ïŒäŸïŒ#content .article p
ïŒã§ã¯ãªããã»ãã³ãã£ãã¯ãªã»ã¬ã¯ã¿ïŒäŸïŒ.button
ã.form-control
ïŒãšå ±ã«äœ¿çšãããšæã广çã§ãã詳现ãªã»ã¬ã¯ã¿ãæ¡åŒµãããšããªãã¡ã¯ã¿ãªã³ã°ãå°é£ãªå¯çµåããCSSã«ãªãå¯èœæ§ããããŸãã - ãã¡ã€ã«éã§ã®æ¡åŒµãé¿ãã: ç°ãªãCSSãã¡ã€ã«éã§ã»ã¬ã¯ã¿ãæ¡åŒµãããšãã¹ã¿ã€ã«éã®é¢ä¿ãçè§£ããã®ãé£ãããªãããšããããŸããéåžžã¯ãæ¡åŒµãåããã¡ã€ã«ãŸãã¯ã¢ãžã¥ãŒã«å ã«çããã®ãæåã§ãã
- ã»ã¬ã¯ã¿ã®è©³çŽ°åºŠã«æ³šæãã:
@extend
ã¯ã»ã¬ã¯ã¿ã®è©³çŽ°åºŠã«åœ±é¿ãäžããå¯èœæ§ããããŸããæ¡åŒµããã»ã¬ã¯ã¿ã¯ãæ¡åŒµãããã»ã¬ã¯ã¿ã®è©³çŽ°åºŠãç¶æ¿ããŸããæ³šæããªããšãäºæãã¬åäœã«ã€ãªããããšããããŸããäŸãã°ãIDã»ã¬ã¯ã¿ãæ¡åŒµãããšãæ¡åŒµããã¯ã©ã¹ãåæ§ã«é«ã詳现床ãæã¡ãŸãã - ãã¬ãŒã¹ãã«ããŒã»ã¬ã¯ã¿ã®äœ¿çšãæ€èšãã: ãã¬ãŒã¹ãã«ããŒã»ã¬ã¯ã¿ïŒäŸïŒSassã®
%base-styles
ïŒã¯ã@extend
ãšå ±ã«äœ¿çšããããã«ç¹å¥ã«èšèšãããŠããŸãããããã¯æ¡åŒµãããªãéããæçµçãªCSSã«ã¯åºåãããŸãããããã¯ãç¶æ¿ã®ããã ãã«äœ¿çšããããŒã¹ã¹ã¿ã€ã«ãå®çŸ©ããã®ã«äŸ¿å©ã§ãã - æ¡åŒµãææžåãã: ã©ã®ã»ã¬ã¯ã¿ãäœãæ¡åŒµããŠããããæç¢ºã«ææžåããŸããããã«ãããä»ã®éçºè ïŒãããŠæªæ¥ã®èªåïŒãCSSã¢ãŒããã¯ãã£ãçè§£ãããããªããŸãã
- 培åºçã«ãã¹ããã:
@extend
ã䜿çšããåŸã¯ãã¹ã¿ã€ã«ãæ£ããé©çšãããäºæãã¬å¯äœçšããªãããšã確èªããããã«ãåžžã«CSSã培åºçã«ãã¹ãããŠãã ãããããã¯ãå€§èŠæš¡ãŸãã¯è€éãªãããžã§ã¯ãã§äœæ¥ããå Žåã«ç¹ã«éèŠã§ãã
@extendã®æœåšçãªèœãšã穎
ãã®å©ç¹ã«ããããããã@extend
ã¯æ³šæããŠäœ¿çšããªããšãããã€ãã®æœåšçãªåé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã
- 詳现床ã®å¢å : åè¿°ã®éãã
@extend
ã¯ã»ã¬ã¯ã¿ã®è©³çŽ°åºŠãé«ããå¯èœæ§ããããåŸã§ã¹ã¿ã€ã«ãäžæžãããã®ãé£ãããªãããšããããŸãã - é ããäŸåé¢ä¿:
@extend
ã«ãã£ãŠäœæãããã»ã¬ã¯ã¿éã®é¢ä¿ã¯é ããŠããŸãããšããããCSSã¢ãŒããã¯ãã£ãäžç®ã§çè§£ããã®ãé£ãããªããŸãã - æå³ããªãçµæ: è€æ°ã®å Žæã§äœ¿çšãããŠããã»ã¬ã¯ã¿ãæ¡åŒµãããšããã®ã¹ã¿ã€ã«ãæ¡åŒµããã»ã¬ã¯ã¿ã«äžèŽãããã¹ãŠã®èŠçŽ ã«é©çšããããããæå³ããªãçµæãæãããšããããŸãã
- 埪ç°äŸå:
@extend
ã§åŸªç°äŸåãäœæããããšãå¯èœã§ãïŒäŸïŒã»ã¬ã¯ã¿Aãã»ã¬ã¯ã¿Bãæ¡åŒµããã»ã¬ã¯ã¿Bãã»ã¬ã¯ã¿Aãæ¡åŒµããïŒãããã¯CSSã®ã³ã³ãã€ã«äžã«ç¡éã«ãŒããåŒãèµ·ããå¯èœæ§ããããé¿ããã¹ãã§ãã - è©³çŽ°åºŠã®æŠäº:
@extend
ã®é床ãªäœ¿çšãš`!important`ã®ä¹±çšã¯ãã«ã¹ã±ãŒãã¹ã¿ã€ã«ã®æªå€¢ã容æã«çã¿åºããŸãã@extend
ãæŽ»çšããéã«ã¯ã詳现床ããã¶ã€ã³ã«ã©ã®ããã«åœ±é¿ããããèæ ®ããããšãéèŠã§ãã
@extend vs. ããã¯ã¹ã€ã³
@extend
ãšããã¯ã¹ã€ã³ã¯ã©ã¡ããCSSããªããã»ããµã®åŒ·åãªæ©èœã§ãããããå¹ççãªCSSãæžãã®ã«åœ¹ç«ã¡ãŸãããããããããã¯ç°ãªãæ¹æ³ã§åäœããç°ãªããŠãŒã¹ã±ãŒã¹ããããŸãã
@extend:
- ããã»ã¬ã¯ã¿ããå¥ã®ã»ã¬ã¯ã¿ãžã¹ã¿ã€ã«ãç¶æ¿ããŸãã
- æ¡åŒµããã»ã¬ã¯ã¿ãå«ãããã«CSSã»ã¬ã¯ã¿ã倿ŽããŸãã
- å Žåã«ãã£ãŠã¯ãCSSãã¡ã€ã«ãå°ãããªãããšããããŸãã
- é¢é£ããèŠçŽ éã§ããŒã¹ã¹ã¿ã€ã«ãå ±æããã®ã«æé©ã§ãã
ããã¯ã¹ã€ã³:
- çŸåšã®ã»ã¬ã¯ã¿ã«ã¹ã¿ã€ã«ãã³ããŒïŒããŒã¹ãããŸãã
- åŒæ°ãæž¡ããŠã¹ã¿ã€ã«ãã«ã¹ã¿ãã€ãºããããšãã§ããŸãã
- å€çšãããšCSSãã¡ã€ã«ã倧ãããªãå¯èœæ§ããããŸãã
- ã«ã¹ã¿ãã€ãºå¯èœãªãªãã·ã§ã³ïŒäŸïŒãã³ããŒãã¬ãã£ãã¯ã¹ãã¬ã¹ãã³ã·ããã¬ãŒã¯ãã€ã³ãïŒãæã€åå©çšå¯èœãªã³ãŒããããã¯ãäœæããã®ã«æé©ã§ãã
äžè¬çã«ãé¢é£ããèŠçŽ éã§ããŒã¹ã¹ã¿ã€ã«ãå
±æãããããã¹ã¿ã€ã«ãã«ã¹ã¿ãã€ãºããå¿
èŠããªãå Žåã¯@extend
ã䜿çšããŸããã«ã¹ã¿ãã€ãºå¯èœãªãªãã·ã§ã³ãæã€åå©çšå¯èœãªã³ãŒããããã¯ãäœæããå¿
èŠãããå Žåã¯ãããã¯ã¹ã€ã³ã䜿çšããŸãã
ãã®äŸãèããŠã¿ãŸãããïŒ
// Using Extend
.base-button {
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.primary-button {
@extend .base-button;
background-color: blue;
color: white;
}
// Using a Mixin
@mixin button-styles($bg-color, $text-color) {
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
background-color: $bg-color;
color: $text-color;
}
.secondary-button {
@include button-styles(green, white);
}
ãã€ãã£ãCSSã®ä»£æ¿æ¡ïŒã¹ã¿ã€ã«ç¶æ¿ã®æªæ¥
@extend
ã¯äž»ã«CSSããªããã»ããµã«é¢é£ä»ããããŠããŸãããç°ãªãã¢ãããŒããå¶éã¯ãããã®ã®ãåæ§ã®æ©èœãæäŸããæ°ãããã€ãã£ãCSSæ©èœãç»å ŽããŠããŸãããã®äžã€ã@layer
ã¢ããã«ãŒã«ïŒCSSã«ã¹ã±ãŒãã¬ã€ã€ãŒïŒã§ãã
CSSã«ã¹ã±ãŒãã¬ã€ã€ãŒïŒ@layerïŒ
ã«ã¹ã±ãŒãã¬ã€ã€ãŒã¯ãCSSã«ã¹ã±ãŒãã®åªå
é äœãå¶åŸ¡ããæ¹æ³ãæäŸããŸãã@extend
ã®çŽæ¥çãªä»£æ¿ã§ã¯ãããŸããããåæ§ã®ã¬ãã«ã®ã¹ã¿ã€ã«ç¶æ¿ãšæŽçãå®çŸããããã«äœ¿çšã§ããŸãã
@layer
ã®äž»ãªèãæ¹ã¯ãã¹ã¿ã€ã«ã®æç¢ºãªã¬ã€ã€ãŒãå®çŸ©ãããã®é©çšé åºãå¶åŸ¡ããããšã§ããããã«ãããåŸã®ã¬ã€ã€ãŒã§ããå
·äœçãªã¹ã¿ã€ã«ã«ãã£ãŠç°¡åã«äžæžããããããŒã¹ã¹ã¿ã€ã«ãäœæã§ããŸããããã¯ããµãŒãããŒãã£ã®ã©ã€ãã©ãªãè€éãªCSSã¢ãŒããã¯ãã£ãæ±ãéã«ç¹ã«åœ¹ç«ã¡ãŸãã
äŸ:
@layer base {
.button {
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
}
@layer theme {
.button {
background-color: blue;
color: white;
}
}
.special-button {
@layer theme;
background-color: red;
}
æ§æã¯åäžã§ã¯ãããŸãããããã®æ§é ã¯ã¹ã¿ã€ã«ã®ãbaseãã¬ã€ã€ãŒãšãthemeãã¬ã€ã€ãŒãäœæããŸãã`theme`ã¯`base`ã®åŸã«ã¬ã€ã€ãŒåãããŠãããããããŒã¹ã¹ã¿ã€ã«ãäžæžãããŸãã æ³šæïŒã«ã¹ã±ãŒãã¬ã€ã€ãŒã¯ãŸã æ¯èŒçæ°ããããã¹ãŠã®ãã©ãŠã¶ã§å®å šã«ãµããŒããããŠããããã§ã¯ãããŸãããæ¬çªã§äœ¿çšããåã«ãå¿ ããã©ãŠã¶ã®äºææ§ã確èªããŠãã ããã
çµè«
CSSã®@extend
ã¯ãããã¯ãªãŒã³ã§ä¿å®æ§ãé«ããå¹ççãªCSSãæžãããã®åŒ·åãªããŒã«ã§ãããã®å©ç¹ããŠãŒã¹ã±ãŒã¹ããã¹ããã©ã¯ãã£ã¹ããããŠæœåšçãªèœãšã穎ãçè§£ããããšã§ãCSSã¢ãŒããã¯ãã£ãæ¹åãããŠã§ãéçºã®ã¯ãŒã¯ãããŒãå¹çåããããã«æŽ»çšã§ããŸããã«ã¹ã±ãŒãã¬ã€ã€ãŒã®ãããªãã€ãã£ãCSSã®ä»£æ¿æ¡ãç»å ŽããŠããŸããã@extend
ã¯ãç¹ã«SassãLessã®ãããªCSSããªããã»ããµã§äœæ¥ããéã«ã¯ãäŸç¶ãšããŠäŸ¡å€ã®ãããã¯ããã¯ã§ãããããžã§ã¯ãã®ããŒãºãæ
éã«æ€èšãããã®ã¬ã€ãã§æŠèª¬ãããã¬ã€ãã©ã€ã³ã«åŸãããšã§ãã¹ã¿ã€ã«ç¶æ¿ããã¹ã¿ãŒããäžçäžã®ã©ãã«ãªãŒãã£ãšã³ã¹ãããããšãããŠã§ããããžã§ã¯ãã®ããã«é«å質ã§ä¿å®æ§ã®é«ãCSSãäœæããããšãã§ããŸãã
ãããªãåŠç¿
- Sass ããã¥ã¡ã³ããŒã·ã§ã³: https://sass-lang.com/documentation/at-rules/extend
- Less ããã¥ã¡ã³ããŒã·ã§ã³: http://lesscss.org/features/#extend-feature
- CSS ã«ã¹ã±ãŒãã¬ã€ã€ãŒ: https://developer.mozilla.org/en-US/docs/Web/CSS/@layer