ãã®æ©èœãªã¯ãšã¹ãã¯ããã®åé¡ã®è§£æ±ºçãšããŠææ¡ãããŸããhttps://github.com/cloudhead/less.js/issues/1155
ããã¯ããããã§ã
ããã¯ã¹ã€ã³ã®çŽ æŽãããç¹ã¯ãéçºãã¹ããŒãã¢ããããäœæ¥é¢ããããã«ä¿ã¡ãäžåºŠã ãæžã蟌ãã ãã§ãã³ã³ãã€ã«ãããçµæãã©ããªãããç¥ã£ãŠããããšã§ãã ãã ããããã¯ã¹ã€ã³ã®æ¬ ç¹ã¯ããã©ã€ã§ã¯ãªãããšã§ãã ç¹ã«ãclearfixã®ããã«ãããŠãŒãã£ãªãã£ãããã¯ã¹ã€ã³ãé »ç¹ã«äœ¿çšããå Žåã ããã¯ãextends_could_ãã¯ããã«åªãããªãã·ã§ã³ã§ããå Žåã§ãã å®éãããã¯ããã¯ã¹ã€ã³ãæ¡åŒµããå Žåã ãããã£ãŠããããè¡ãå ŽåïŒ
.clearfix() {
// stuff
}
.navbar {
&:extend(.clearfix());
}
.banner {
&:extend(.clearfix());
}
ã³ã³ãã€ã«ãããçµæã¯æ¬¡ã®ããã«ãªããŸãã
.navbar,
.banner {
// clearfix stuff
}
ãããã£ãŠãããã¯ã¹ã€ã³ã®ããããã£ã¯ããããæ¡åŒµããã»ã¬ã¯ã¿ãŒã«ãã£ãŠåŒãç¶ãç¶æ¿ãããŸãããããã¯ã¹ã€ã³ïŒã»ã¬ã¯ã¿ãŒïŒèªäœã¯ã³ã³ãã€ã«ãããçµæã«è¡šç€ºãããŸããã
ããã«ããããšã¯ã¹ãã³ããšããã¯ã¹ã€ã³ã®äž¡æ¹ããããèªäœãããã¯ããã«åŒ·åã«ãªããŸãã
ç§ã¯ããã奜ãã§ããããããã æ確ã«ããããã«..ããã¯ããªããåã«ã§ããªãã£ãäœããããããšãèš±ããŸãããããã¯ããªããåŸãããšãåã«æå³ããŸã..
.navbar,
.banner {
// clearfix stuff
}
ããããã
.navbar {
// clearfix stuff
}
.banner {
// clearfix stuff
}
ãŸãã¯ç§ã¯èª€è§£ããŸãããïŒ
ãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ãšéåžžã®ããã¯ã¹ã€ã³ã®äž¡æ¹ã欲ããã§ã
.navbar,
.banner {
// clearfix stuff
}
.....
ãŸã
.clearfix,
.navbar,
.banner {
// clearfix stuff
}
....
å¿ èŠãªãšãã¯ãã€ã§ãããããããã¯ã¹ã€ã³ããã§ã«ã©ã®ããã«æ©èœããããšåãæ¹æ³ã§ããããšãç§ã¯ç¥ã£ãŠããŸãããããã£ãŠã質åã¯äž»ã«ãæé©åã®èŠ³ç¹ããæçµçãªCSSåºåãããé©åã«åŠçããããã®æè»æ§ãšæ¹æ³ãæã£ãŠããŸãã
ãã¡ãã
.clearfix,
.navbar,
.banner {
// clearfix stuff
}
ããçã
.clearfix {
// clearfix stuff
}
.navbar{
// clearfix stuff
}
.banner {
// clearfix stuff
}
ãããŠãéèŠã«ãªãå¯èœæ§ã®ããããè€éãªäŸã«ã€ããŠã¯ããã®äžè¶³ã®ããã«SASSã«åãæ¿ãã人ãããããšãç§ã¯ç¥ã£ãŠããŸã
éåžžã®ããã¯ã¹ã€ã³ã¯å€æŽã§ããŸããã§ããã ãããã¯ã»ãšãã©Lessã®ååã§ãã @agatronic ããããç§ãããæããŸãã ãã ããããã«ã¯èª²é¡ããããŸããããšãã°ããã©ã¡ããªãã¯ããã¯ã¹ã€ã³ãæ¡åŒµã§ããã§ããããã ãããããªããããã¯ã©ã®ããã«æ©èœããŸããïŒ ããããµããŒããããŠãããšä»®å®ããŠããã©ã¡ããªãã¯ããã¯ã¹ã€ã³ã2åæ¡åŒµãã次ã®ããã«æ¯åç°ãªãå€æ°ã䜿çšãããšããŸãã
.transition(@transition) {
-webkit-transition: @transition;
-moz-transition: @transition;
-o-transition: @transition;
transition: @transition;
}
.navbar {
&:extend(.transition(opacity .2s linear));
}
.banner {
&:extend(.transition(opacity .3s linear));
}
ç§ã¯ãããããã¯ã¹ã€ã³ã®2ã€ã®ã³ããŒãäœæãããããããªããšæ³åããŸããããã¯ã³ãŒãããå°ãªããªããéåžžã®ããã¯ã¹ã€ã³ã«åãå©ç¹ã¯ãããŸããïŒ
.navbar {
-webkit-transition: opacity .2s linear;
-moz-transition: opacity .2s linear;
-o-transition: opacity .2s linear;
transition: opacity .2s linear;
}
.banner {
-webkit-transition: opacity .3s linear;
-moz-transition: opacity .3s linear;
-o-transition: opacity .3s linear;
transition: opacity .3s linear;
}
ãã ãããã®ç¹å®ã®mixinå€ã䜿çšããå ŽåããããŸãã®ã§ãããªãã¯åã³äžã®ããã¯ã¹ã€ã³ã䜿çšãããšãã«.dropdown
ãšåãå€æ°ãš.banner
ãããã¯ãã®äžã«ãªãå¯èœæ§ããããŸãïŒ
.navbar {
-webkit-transition: opacity .2s linear;
-moz-transition: opacity .2s linear;
-o-transition: opacity .2s linear;
transition: opacity .2s linear;
}
.banner,
.dropdown {
-webkit-transition: opacity .3s linear;
-moz-transition: opacity .3s linear;
-o-transition: opacity .3s linear;
transition: opacity .3s linear;
}
ãããŠããããç§ã«ãšã£ãŠãããé¢çœãããŠããçç±ã§ãã ä»ã®äººããã®ãã£ãŒãããã¯ãèãã®ã¯è¯ãããšã§ã
@jonschlinkertã¯ããããã¯ããã«è¯ãã€ã©ã¹ãã§ããããããšãã ç§ãèšã£ãããã«ããããäž¡æã§ïŒ ããããããã¯å¥ã®ã¬ãã«ã®å ±ç¯ãè¿œå ããŠããã®ã§ãæ éã«è¡ãå¿ èŠããã/è¡ããªãå¿ èŠãããããšãç解ããŠãã ãã
åç §ããŠããã¡ãœããã®æ¡åŒµã¯ã次ã®ãã¿ãŒã³ã§éåžžã«ç°¡åã«å®çŸã§ããŸãã
.transition(@transition) {
-webkit-transition: @transition;
-moz-transition: @transition;
-o-transition: @transition;
transition: @transition;
}
.quickOpacity1(){
.transition(opacity .2s linear);
}
.quickOpacity2(){
.transition(opacity .3s linear);
}
.navbar{
.quickOpacity1();
}
.banner,
.dropdown{
.quickOpacity2();
}
äžèšã¯ã2ã€ã®æ°ãã宣èšã«åæ¡åŒµããã¯ã¹ã€ã³ãæ¿å ¥ããŠããŸãã
clearfixã®å Žåã以äžã®åæ§ã®ãã¿ãŒã³ã䜿çšããã®ãç°¡åã§ããããã«ãããclearfixãã¯ã©ã¹ãšããŠäœæãããã ãã§ãªãããããã®clearfixã¹ã¿ã€ã«ãæ°ãã宣èšã«æ¿å ¥ãããŸãã
.clearfix{
//clearfix stuff
}
.navbar,
.banner {
.clearfix;
}
@krismeisterããã«ã¯æ··ä¹±ããããããããªããšæããŸãã 説æãããã¿ãŒã³ã¯ãå®éã«ã¯ãã¹ããããããã¯ã¹ã€ã³ããŸãã¯ããã¯ã¹ã€ã³ç¶æ¿ãã¿ãŒã³ã§ãã ãã®éã§äœæ¥ãæ¡åŒµããŸãã
@jonschlinkertMixinã®ç¶æ¿-çŽ æŽãããååã§ãã äžèšã®äž¡æ¹ã®äŸã§ã¯ã芪ããåºåãç¶æ¿ããããšããŠããããã«èŠããŸãããããã¯æ¡åŒµæ©èœã®ã³ã¢æ©èœã§ãã ããªãã¯ããããç§ã®äŸã®åºåãããªãã®æåŸ ãããåºåã§ãã£ãããšã«åæããã§ãããã
ãã ããå ã®ã³ã¡ã³ããèªã¿çŽããŠç解ããŸãããåºåã1ã€ã®CSSã«ãŒã«ã«çµåããå¿ èŠããããŸãã ããšããš2ãšæžãããŠããŸãããã
å®éã :extend
ã¯ããªãçŽ æŽãããã§ãã ç§ã¯å®å
šãªãªã¿ã¯ã«è¡ãã€ããã§ãããããã¯ãã¹ãŠãäœãã©ãã«ç§»åããããã«åž°çããŸãã ãããã¯ã¹ã€ã³ã®ããããã£ããããã䜿çšããã»ã¬ã¯ã¿ãŒã«éä¿¡ããããããªããã¯ã¹ã€ã³ãèããŠã¿ãŠãã ããã ãããŠã :extend
ããã®éããããã䜿çšããã»ã¬ã¯ã¿ãŒãããã¯ã¹ã€ã³èªäœã«ããŒã ããããšèããŠãã ããã _selectorã®ããããã£ã§ã¯ãªããã»ã¬ã¯ã¿ãŒèªäœã ãã§ãã ãããã£ãŠããããè¡ã£ãå ŽåïŒ
.some-mixin() {
padding-top: 100px;
background: #f7f7f7;
}
// a selector that is extending the mixin
.alert:extend( .some-mixin() ) {
border: 1px solid #e5e5e5;
}
// another selector extending the mixin
section:extend(.some-mixin()) {
margin: 20px 0;
}
ãã®çµæã次ã®ããã«ãªããŸãã
// The selectors that extended the mixin are now where the mixin used to be.
.alert,
section {
padding-top: 100px;
background: #f7f7f7;
}
// And the properties of the mixin did not get copied down below
// so we saved a line or two of code.
.alert {
border: 1px solid #e5e5e5;
}
section {
margin: 20px 0;
}
ããŸãããã°ãããã¯ãã£ãšçã«ããªã£ãŠããŸãã ãã€ã§ãåãã§ãæäŒããããŠããã ããŸãã
@ agatronic ã @ matthewdl ã @ DesignByOnyx ãã¡ãã£ãšèããŠ:extend[N]
å€æŽããããšã«ã€ããŠã©ãæããŸããã
ããã¯ã¹ã€ã³ãæ¡åŒµãããšãç®ã«ãç°¡åã«ãªããšæããŸãã
section:extend[.some-mixin(), .another-mixin()] {
margin: 20px 0;
}
ã©ã¡ãã«ããŠã倧äžå€«ã§ãããè§ãã£ãã«ã€ããŠäœããæ£ãããšæããŠããŸãã
@jonschlinkert - []
ã¯ãé
åã§ã¯ãªãcssã®å±æ§ãæå³ããŸãããç䌌ã»ã¬ã¯ã¿ãŒãžã®ãªã³ã¯ã®ããã«:extend()
ãéžæããããããéåžžã®è§ãã£ãã䜿çšããå¿
èŠããããšåŒ·ãæããŸãã
è¯ãç¹ãç§ã¯åæããŸãã
è§ãã£ãã¯èŠãç®ãèªã¿ãè¯ããšæããŸããããã§ã«éžæããæ§æã«åºå·ããå¿ èŠããããŸãã
extendïŒNïŒæ§æãé«ãè©äŸ¡ãã@ agatronicãšåãçç±ã§èªç¶ã®CSSã®ããã«æããŸã
ããã¯ã¹ã€ã³ãæ¡åŒµããããšã¯æªãèãã§ã¯ãããŸããã æ§æäŸ@jonschlinkertã«ã€ããŠã¯ããããããŸããã ç§ã¯ããã奜ãã§ã¯ãªããšããããã§ã¯ãããŸããã ç§ã¯ããªããæžãããã®ãå®éã«ç解ããŠããŸããã
ã€ãŸããåãããã¯ã¹ã€ã³ã³ã³ãã³ããããã«ã€ã³ãããã¯ã©ã¹ãå®çŸ©ãããããçµæã®CSSã§ã¯å®éã«ã¯ç¹°ãè¿ããªããšããããšã ãšæããŸãã ç§ã¯ãããæ¡åŒµããã¯ã¹ã€ã³ãšã¯åŒã³ãŸããã ã€ãŸããïŒæ¡åŒµå®çŸ©ãã»ã¬ã¯ã¿ãŒã«å¯ŸããŠè¡ãã®ãšåãæ¹æ³ã§ïŒããã¯ã¹ã€ã³å®çŸ©ãå€æŽããã®ã§ã¯ãªããå®éã«çµæã®ã¯ã©ã¹ãå€æŽïŒæ¡åŒµïŒããŸãã
ã ãããç§ãééã£ãŠãããªãç§ãèšæ£ããŠãã ããããããããªãã®ããã²ãŒã·ã§ã³ããŒ/ãããŒ/ããããããŠã³ã®äŸã¯ä»¥äžã«ãã£ãŠãµããŒããããŸããïŒ
.navbar {
.transition(opacity .2s linear);
}
.banner {
.transition(opacity .3s linear);
}
.dropdown:extend(.banner) { }
ã€ãŸããéåžžã©ããã«ã¯ã©ã¹ãæ¡åŒµããŸããïŒ ç§ã¯ããªãã®äœ¿çšãã¿ãŒã³ã«é ãæ©ãŸããããšããŠããŸãããããã¯ã¹ã€ã³ã«extendã䜿çšããããšã¯ãã»ã¬ã¯ã¿ãŒãæ¡åŒµããããã®äœ¿çšæ³ãåœåæ³ãšççŸããŠããããã§ãã ããã¯ã¹ã€ã³ãåç §ããã»ã¬ã¯ã¿ãŒãæ¡åŒµããã«ãæ¡åŒµåŒã³åºãã§ããã¯ã¹ã€ã³ãåç §ããå¿ èŠããã/å¿ èŠãªçç±ã«ã€ããŠãããã«è©³ãã説æããŠããã ããŸããïŒ
ãããç§ããããåŸãæ¹æ³ã§ã
å¿ èŠãªæçµCSSåºå
.sometingShared,
.anotherClass,
.anotherYetClass,
.yetClass {
// amount of shared code here
}
.anotherClass,
.anotherYetClass {
// did something dynamic with a
}
.yetClass {
// did something dynamic with b
}
.anotherClass {
// native another class code
}
.anotherYetClass {
// native another yet class code
}
.yetClass {
// native yet class code
}
å¿ èŠãªåºåãååŸããããã«ãçŸåšã®ããŒãžã§ã³ã®LESSã䜿çšããå¿ èŠãããæ¹æ³
.somethingShared,
.anotherClass,
.anotherYetClass,
.yetClass {
// amount of shared code here
}
.someMixin(@val) {
// do something dynamic with val
}
.anotherClass,
.anotherYetClass {
.someMixin(a);
}
.yetClass {
.someMixin(b);
}
.anotherClass {
// native another class code
}
.anotherYetClass {
// native another yet class code
}
.yetClass {
// native yet class code
}
ææ¡ãããå°ãªãæ§æ
.somethingShared {
// amount of shared code here
}
.someMixin(@val) {
// do something dynamic with val
}
.anotherClass:extend(.sometingShared, .someMixin(a)) {
// native another class code
}
.anotherYetClass:extend(.sometingShared, .someMixin(a)) {
// native another yet class code
}
.yetClass:extend(.sometingShared, .someMixin(b)) {
// native yet class code
}
æ¡åŒµæ©èœã¯ãå ±æã³ãŒããå®éã«å€§éã«ããå Žåã«ã®ã¿åœ¹ç«ã€å¯èœæ§ããããŸããããã以å€ã®å Žåã¯ãéåžžã®ããã¯ã¹ã€ã³ã®äœ¿çšãæå©ã§ãã
ãããŠãã¡ãã£ãšéãã§ã¿ãããšãç®çãšããã©ã€ããããŒãµã³ãã«
http://jsbin.com/opekon/1/edit
http://jsbin.com/opekon/2/edit
http://jsbin.com/opekon/3/edit
http://jsbin.com/opekon/4/edit
ãã§ã«è¿°ã¹ãããã«ãç¹å®ã®ç¶æ³ã§ã¯ãç§ã®ããã«æ æ°ãªäººã«ãšã£ãŠã¯ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããå¯èœæ§ããããŸã:)æè»æ§ã«åœ±é¿ããããšããçç±ã ãã§ãLESSã³ãŒããæé©åãã
ããã¯ãSASSãæ¡åŒµæ©èœãåŠçããæ¹æ³ã«é¢ããããã€ãã®ããšãã«ããŒããæ¡åŒµæ©èœã«é¢ããçŽ æŽãããããã°æçš¿ã§ããä»ã®äººããããã©ã®ããã«è¡ã£ããããåŠã¶ããšã¯ããããè³¢æã§ãã http://designshack.net/articles/css/semantic-grid-class-naming-with-placeholder-selectors-in-sass-3-2/
ç¹ã«ãããã¯ã¹ã€ã³ãæ¡åŒµãããšããç§ã®ææ¡ã¯ãSASSã®ããã¬ãŒã¹ãã«ããŒããšæ¬è³ªçã«åãæçµçµæãéæãããšæããŸããã圹ã«ç«ããªãäœåãªãã¬ãŒã¹ãã«ããŒã®ã¿ã®ã¯ã©ã¹ãäœæããå¿ èŠã¯ãããŸããã
ç·šéïŒã¯ããããã«ãã¬ãŒã¹ãã«ããŒãããŸããŸãšããå¥ã®æçš¿ããããŸãã ããã¯ãŸãã«ç§ãããã¯ã¹ã€ã³ãæ¡åŒµããããšã§ææ¡ããŠãããã®ã§ãhttp://maximilianhoffmann.com/article/placeholder-selectors
ç§ã¯å人çã«ãä»ã®ãã¹ãŠã®æ¡åŒµé¢é£æ©èœãããããã奜ã¿ãŸãã çãããªãã ããã¯åŒ·ãçºèšã§ãããä»ã®äººãåæããªãå Žåãç§ã¯ããã説æããã®ã«è¯ãä»äºãããŠããªããšæããŸãã ããã¯éåžžã«åŒ·åãªãã®ã§ãã
SASSã ãšæããŸã
%tile {
width: 200px;
height: 200px;
margin-right: 20px;
}
ã¯ãæä»çã«æ¡åŒµããããã«èšèšããããã©ã¡ããªãã¯ããã¯ã¹ã€ã³ãšåçã§ãããé¢å¿ã®åé¢ãšããç¹ã§ã¯ããããããã»ã©æªãã¯ãããŸããã ãããããããããã¯CSSã§ãããå¯èœãªéãåçŽã§ãããšã¯æãããŸãããïŒ
@agatronicã«ã€ããŠè©±ããŠããéããã®æ¡åŒµhttps://github.com/agatronic/less.js/blob/master/lib/less/tree/extend.jsã¯äœã§ãããšæ³å®ãããŠããŸããïŒ ããã¯ãã§ã«ã¡ã€ã³ã¬ã¹ãã©ã³ãã«ããããšã«æ³šæããŠãã ããã noobã®è³ªåã¯ç³ãèš³ãããŸããã
@ dmi3y1.4.0ã®æºåãã§ãããã«ãªã¯ãšã¹ããããã«ãããextendã®æåã®ããŒãžã§ã³ã§ã-ããã¯extendããŒããè¡šããŸã
ããããšã@agatronic ãä»ç§ã¯ç§ãã©ãã ãéãããããããŸã;ïŒ
@ dmi3yã¯ãåŒãç¶ãäŒè©±ã«è¿œå ããŠãã ãããçµè«ãå°ãåºãããšãã§ããããã«ããã®åé¡ãããé«ãã¬ãã«ã«ä¿ã€ããã«ããŠãã ããã ãŸããå人çã«ç§ã«é»åã¡ãŒã«ãéã£ãŠãã ãããããã¯ã¹ã€ã³ãšãšã¯ã¹ãã³ããã©ã®ããã«æ©èœãããã«ã€ããŠè©±ãåãããšãã§ããŸãïŒç§ã®é£çµ¡å æ å ±ã¯ç§ã®ãããã£ãŒã«ã«ãããŸãïŒã ãŸãããã®ã¹ã¬ããã§ã®ãããªãæ··ä¹±ãé¿ããããã®ç°¡åãªã³ã¡ã³ãã ããªãã®äŸïŒ
%tile {
width: 200px;
height: 200px;
margin-right: 20px;
}
ããã¯ãSCSSããã¬ãŒã¹ãã«ããŒãã®æ§æã§ããããã¯ãããã¯ã¹ã€ã³ã®æ¡åŒµã§ææ¡ããŠãããã®ãšåæ§ã®ããšãå®çŸããããã«SCSSä»æ§ã«å®è£ ãããŸããã ããããããã¯ãã©ã¡ããªãã¯ã§ããããšãšã¯äœã®é¢ä¿ããããŸããã ãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ã¯ãåã«_ãã©ã¡ãŒã¿ãŒãåãå ¥ããããã¯ã¹ã€ã³_ã§ããã€ãŸãã䜿çšãããã³ã«å€ãå€ããå¯èœæ§ããããŸãã
@matthewdl
ã€ãŸããåãããã¯ã¹ã€ã³ã³ã³ãã³ããããã«ã€ã³ãããã¯ã©ã¹ãå®çŸ©ãããããçµæã®CSSã§ã¯å®éã«ã¯ç¹°ãè¿ããªããšããããšã ãšæããŸãã
ãš
ããªãã®ããã²ãŒã·ã§ã³ããŒ/ãããŒ/ããããããŠã³ã®äŸã¯...ã«ãã£ãŠãµããŒããããŠããŸãããïŒ
ããããæè¡ã®ãã€ã³ãã倱ãããŠããŸããããã¯ãŸã£ããéã§ãã ãããããç§ã®äŸã§ã¯ãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ã«çŠç¹ãåãããã®ãééããããã«æ··ä¹±ãçããŸããã
ãããã£ãŠãæåã«ããã¹ãŠã®ããã¯ã¹ã€ã³ããã©ã¡ããªãã¯ã§ãããšã¯éãããå€ãã¯ãã©ã¡ãŒã¿ãŒãåãå ¥ããªãããã«äœæãããŠããããšã説æããããšãéèŠã ãšæããŸãã clearfixãªã©ã®äžéšã®ããã¯ã¹ã€ã³ã¯ã䜿çšæã«å€æ°ãå€æŽããã«äœåºŠã䜿çšãããŸãã ãããã¯ãããã¯ã¹ã€ã³ã®æ¡åŒµãæå©ã§ããçç±ã®å®ç§ãªãŠãŒã¹ã±ãŒã¹ã§ãã
ãã©ã¡ããªãã¯ã§ããããšãªããããšããã¹ãŠã®æ å ã®ããã¯ã¹ã€ã³ã«ã¯ã䜿çšãããã³ã«ãã®ããããã£ãéè€ãããšããæ¬ ç¹ããã
ããªãã®äŸãèãããšã2ã€ã®å®å šã«ç¬ç«ããç¡é¢ä¿ãªãã€ã³ããäœæããå¿ èŠããããŸãã
ããããããã¯ã»ãã®äžäŸã§ãã Twitter Bootstrapã®ããæç¹ã§ã .clearfix()
ããã¯ã¹ã€ã³ã ããä»ã®ã»ã¬ã¯ã¿ãŒå
ã§20å以äžäœ¿çšããã .container-fixed()
ã .make-row()
ãªã©ã®ä»ã®4ã€ãŸãã¯5ã€ã®æ§é ããã¯ã¹ã€ã³å
ã«ããã¹ããããŠãããšèããŠãã ããã #grid > .core()
ã ã€ãŸãããããã®ããã¯ã¹ã€ã³ã¯ã䜿çšããããã³ã«
ããã¯ãã£ãšæå³ããããŸããïŒ ãããã£ãŠãclearfixããã¯ã¹ã€ã³ã®ããããã£ã20å以äžè€è£œãã代ããã«ãmixinèªäœã®ä»£ããã«clearfixããã¯ã¹ã€ã³ã䜿çšããã»ã¬ã¯ã¿ãŒãã°ã«ãŒãåããããããã£ã¯1åã ã宣èšã
ãããŠãäžèšã®ç§ã®2çªç®ã®äŸã¯ãæ¡åŒµããã©ã¡ããªãã¯ããã¯ã¹ã€ã³ã§ã©ã®ããã«æ©èœãããã«çŠç¹ãåœãŠãŠããã®ã§ãããŸãããã°ãããã§å šäœåãå®æããä»ã§ã¯ãã£ãšæå³ããããŸããïŒ ããã§ãªãå Žåã¯ãäžèšã«ãªã³ã¯ããèšäºã§æ··ä¹±ã解æ¶ãããã¯ãã§ãã ããã¯ã¹ã€ã³ã®æ¡åŒµã¯éåžžã«åŒ·åã§äŸ¿å©ã§ããããã¹ããããã»ã¬ã¯ã¿ãŒãæ¡åŒµããã®ãšåãæçµçµæãéæã§ããŸããããã¹ããããã»ã¬ã¯ã¿ãŒã®ä»£ããã«ããã¯ã¹ã€ã³ã䜿çšããŸãã ããã«ãããåžæããçµæãæäŸããå¯èœæ§ãæãé«ãæ¹æ³ã§ã»ã¬ã¯ã¿ãŒãç·šæããæå³ããªãçµæãåé¿ã§ããŸãã @ DesignByOnyx ã @ agatronic ã @ matthewdl ãããã§æ¬ ããŠãããã®ãå¿ããŠãããã®ã¯ãããŸããïŒ æ··ä¹±ã解æ¶ããããã«ç§ãã¡ã«ã§ããããšã¯ãããŸããïŒ
ããããšãã ç§ã¯ãŠãŒã¹ã±ãŒã¹ãç解ããŠãããšæããŸãããããŠç§ã¯ãã®è¡ããããæãããèšã£ãŠãããšæããŸãïŒ
ãããŒã¯ã©ã¹ã¯ããã¯ã¹ã€ã³ã§ããã䜿çšãããå ŽåïŒæ¡åŒµãŸãã¯æ··åãããå ŽåïŒã«ã®ã¿çµæã®CSSã«è¡šç€ºãããŸã
ããã¯ç§ã«ã¯çã«ããªã£ãŠããŸãã ããããç§ããã³ã°ã¢ããããŠããã®ã¯ãå
šäœçãª:extend
æ§æããŸã æçµçã§ã¯ãªããšããããšã§ãã ããããããªãã¯èª¬åŸåã®ãã䞻匵ãããŸãã
ã»ã¬ã¯ã¿ãŒãããã¯ãå®æãããåŸãããã¯ã¹ã€ã³ãæ¡åŒµããåäœãã»ã¬ã¯ã¿ãŒãæ¡åŒµããåäœãšäžèŽããããã«ãªã£ãå ŽåïŒäž»ãªéãã¯ãå ã»ã©èšã£ãè¡ã§ãããæ¡åŒµãããCSSã«ã¯ã»ã¬ã¯ã¿ãŒãåºåãããªããšããããšã§ãïŒæåã®äœ¿çšæ³ããªãéãïŒãããã¯ç§ã«ã¯çŽæçã§ãã
ã€ãŸãã次ã®ãããªããšïŒãŸãã¯åçã®æ§æïŒãå®è¡ã§ããå Žåã¯ã次ã®ããã«ãªããŸãã
.facebook-button:extend( .button() all ) {
border: 1px solid #e5e5e5;
}
...ããããç§ãã芪æãç«ãŠãŸãã ããããç§ã«ãšã£ãŠã¯ãããã¯ãã¹ãŠãã»ã¬ã¯ã¿ãŒã®:extend
ã解決ãããã©ãã/æ¹æ³/ãã©ããã«ãã£ãŠç°ãªããŸãã ããããæ§æã¯ããŠãããæ©èœã®ã¢ã€ãã¢ãšããŠãããªãã¯æ£ããã§ããããã¯å¥å
šã§ãã
@jonschlinkertããããšãããããŸããããªãã®æ¯æã«æè¬ããŸãããããŠç¢ºãã«ç§ãã§ããéãæ確ã«ç§ã®èãã眮ãããšã§æåãå°œãããŸãã å°æ¥ã®éçºã§äœãèµ·ãã£ãŠããã®ããèãã®ã¯ããªããšããµã€ãã£ã³ã°ã ãšæããŸãã çãããããã§çŽ æŽãããä»äºãããŠãã ããã
ã¯ãããã®äŸã§ã¯ã以åã®æçš¿ã§æ瀺ããå¿ èŠããããŸããã
%tile {
width: 200px;
height: 200px;
margin-right: 20px;
}
JonãæäŸããSASSãã¥ãŒããªã¢ã«ããåãããŠããããã®äž»ãªç®çã¯ã䜿çšãããªãã¯ã©ã¹ããã®CSSã®åºåãç Žæ£ããªãããã«ããããšã§ãã ãããã£ãŠããã®ç¹å®ã®è§åºŠã§ã¯ãLESSã®ç©ºã®ãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ã®ããã«èŠããå¯èœæ§ããããŸãã 䜿çšããããçµäºã¹ã¿ã€ã«ã·ãŒãã«åºåããããªãå Žåã
ç§ã¯ãã®è°è«ã«é£ã³ã€ãã次ã®ã³ã¡ã³ãã«ã€ããŠèªåèªèº«ã«æ確ãããããããããšæããŸãã
ãããŒã¯ã©ã¹ãããã¯ã¹ã€ã³ã®å Žåã䜿çšãããïŒæ¡åŒµãŸãã¯æ··åãããïŒå Žåã«ã®ã¿ãçµæã®CSSã«è¡šç€ºãããŸãã
ãããã£ãŠãããäžè¬çãªclearfixã®äŸã䜿çšãããšãããã¯LESSã§ãããçµæã®CSSã§ããïŒïŒ
.clearfix() {
&:before,
&:after { content: " "; display: table; }
&:after { clear: both; }
}
.something:extend( .clearfix() ) { }
/*
.clearfix:before,
.clearfix:after,
.something:before,
.something:after {
content: " ";
display: table;
}
.clearfix:after,
.something:after {
clear: both;
}
*/
ç§ã¯åœåã .clearfix
ã¯ã©ã¹ãã³ã³ãã€ã«ãããCSSããçç¥ããããŸãŸã«ãªãããšãæåŸ
ããŠããŸããã å人çã«ã¯ãã³ã³ãã€ã«ãããCSSã§ã¯ã©ã¹ããå¿
èŠããšã¯ããŸãããããŒã¯ã¢ããã§äœ¿çšãããCSSã§äœåãªãã€ãã䜿çšããããã§ãã ã©ã¡ãã«ããŠã匷ãæèŠã¯ãããŸãããããã®ç¹ãæ確ã«ããããšã§ãä»åŸã®ã³ã¡ã³ããå¢ããããšãã§ããŸãã ããããšãã
ããã¯...çµæã®CSSã§ããïŒïŒ
ç§ã¯ããªããæ±ããŠããå¬ãããã ãã©ããããå¯äžã®.something
ã¯ã©ã¹ã¯ãåŸãããCSSã«è¡šç€ºãããŸãã ã§ããããããªãã¯åœåã®æåŸ
ã«æ£ããã£ãã®ã§ãã
ãã¬ãŒã¹ãã«ããŒã®ãªã³ã¯ãèªãã§ãã ãããããã§ããããã¯ã¹ã€ã³ãæ¡åŒµããæ¹ããç©äºãå®è¡ããŠåãæ©èœãååŸããããã®ããè¯ãæ¹æ³ã§ãããããå°ãªãæ¹æ³ã ãšæããŸãã
ããªãã®äžèšã®ç¹ãå·ããããã«
.clearfix() {
&:before,
&:after { content: " "; display: table; }
&:after { clear: both; }
}
.something:extend( .clearfix() ) { }
/*
.something:before,
.something:after {
content: " ";
display: table;
}
.something:after {
clear: both;
}
*/
ããããã .clearfix() {
å®çŸ©ã.clearfix {
å Žåãæ¡åŒµå®çŸ©å
ã§è§ãã£ããä»ããŠããŸãã¯ä»ããã«åŒã³åºããŠããåºåã«éãã¯ãããŸããã
æ¡åŒµæ©èœã«ç䌌ã¯ã©ã¹æ§æã䜿çšããããšã¯å®å
šã«ééã£ãŠããŸãã
ãextendsthãã¯ãmatchsthããšçãããªããããã»ã¬ã¯ã¿ãŒããã¹ãDOMæ§é ã«ã€ããŠã¯äœã®æå³ããããŸããã
ããªãã¯å°ãªã人ãå€ãã®æªãèãããçºæãããŸããã æãæåãªã®ã¯ãããã¯ã¹ã€ã³è¡šèšãšããŠã®ãreuseã.xxxïŒã¯ã©ã¹ã»ã¬ã¯ã¿ãŒïŒã§ããå°ãªããšãããã¬ãŒã³CSSããããªããã»ããµãžã®ç§»è¡ã容æã«ãªããŸããããããïŒextendæ§æã¯ç§ãèããäžã§ææªã®ã¢ã€ãã¢ã§ãã
ç§ãã¡ã®åé¡ã«ã€ããŠãã®çš®ã®æŽèšãåšå³ãæããããã¯ãããŸãããããããã®ããšãèããã®ã¯ãããåããŠã§ã¯ãªãã®ã§ãCSSã«ã€ããŠè©±ããŠç©ºæ°ããããã«ããŸãããã
ããªãã¯å°ãªã人ãå€ãã®æªãèãããçºæãããŸããã æãæåãªãã®ã¯ãããã¯ã¹ã€ã³è¡šèšãšããŠã®ãåå©çšã.xxxïŒã¯ã©ã¹ã»ã¬ã¯ã¿ãŒïŒã§ãã....ïŒextendæ§æã¯ç§ãä»ãŸã§èããäžã§ææªã®ã¢ã€ãã¢ã§ãã
.xxx
ã¯æé»çãªããã¯ã¹ã€ã³ãšåŒã°ããŸãã ããã¯æ©èœããç解ããããã§ãã å®éããã®æ§æã¯ãCSSä»æ§ã§ã¯ãããšãã°ãå®éã®ã¹ã¿ã€ã«èšå®ã«at-rulesã䜿çšããã»ã©ã䟵襲çãã§ã¯ãããŸããã @keyframes
ã¯ãã¹ã¿ã€ãªã³ã°ãšããŠèª¬æããããã®ã«æãè¿ããCSSæ§æã§ã®èå¥åã®çæã«äžèŽããèå¥åã䜿çšããããããç§ãèšã£ãŠããããšã®äŸå€ãšèŠãªãããå¯èœæ§ããããŸãã ããŒãã¬ãŒã ãè¶
ããŠãäžè¬ã«CSS at-rulesã¯ãäž»ã«é«ã¬ãã«ã®æ§æãšãæåãšã³ã³ãŒãïŒ @charset
ïŒãªã©ã®ã¹ã¿ã€ã«èªäœã®å€éšãæå³ãããå€éšãæ
å ±ã«åºã¥ãã¹ã¿ã€ã«ãŸãã¯ã¹ã¿ã€ã«ã·ãŒãã®æäœã®ããã«äºçŽãããŠããŸããããã€ã¹åºæã®æ¡ä»¶ã«å¿çããïŒ @media
ïŒã
ãã®äžãç§ã¯ãã£ãšæªãèããèããããšãã§ããŸãã ã¹ã¿ã€ãªã³ã°ã«at-rulesã䜿çšããã®ãšåæ§ã«ãåãæ©èœã«2ã€ã®at-rulesã䜿çšããã®ãå¥ã®æ¹æ³ã§ãã ãã¡ãããããã¯ãã¹ãŠããªãã®ç®æšã«äŸåããŸããå人çã«ã¹ã¿ã€ã«ã«è§Šããã«ããã°ã©ã ã§ã¹ã¿ã€ã«ãæäœãããå Žåã¯ãããŒãµãŒãç解ãããããããéããŠæçœãªææ³æ§é ã䜿çšããããšã«ã¯ããããå©ç¹ããããŸãã Stylusã䜿çšããŠããããã«èŠããã®ã§ãä»ã®æ§æãæå©ã§ããçç±ã«ã€ããŠã®ããªãã®èŠè§£ãèããŠã¿ãããšæããŸãã
ãextendsthãã¯ãmatchsthããšåãã§ã¯ãããŸãããã»ã¬ã¯ã¿ãŒããã¹ãDOMæ§é ã«ã€ããŠã¯äœãæå³ããŸããã
æ£ããã nth
_something_ãæã€ç䌌ã¯ã©ã¹ã¯ãCSSä»æ§ã§ã¯ãæ§é çãç䌌ã¯ã©ã¹ãšããŠèšè¿°ãããŠããŸãã ãã ããç䌌ã¯ã©ã¹ã«ã¯ããåçãããåŠå®ãããã¿ãŒã²ããããã空çœãããUIèŠçŽ ã®ç¶æ
ãããèšèªãã®6çš®é¡ããããŸãã CSSä»æ§ãå®éã«ãæ¡åŒµãæ©èœãèšè¿°ããŠããå Žåãããã¯ãåŠå®ããšãã¿ãŒã²ãããã®ç䌌ã¯ã©ã¹ã®éã®ã«ããŽãªãšããŠéåžžã«ãšã¬ã¬ã³ãã«äœçœ®ããå¯èœæ§ããããŸãã
ç䌌ã¯ã©ã¹ã§ã¯ãããã¥ã¡ã³ãããªãŒã®æ å ±ã«åºã¥ããŠéžæã§ããŸãããããã¯æ¡åŒµæ©èœã®æé©ãªäœ¿çšæ³ã§ã¯ãªãå¯èœæ§ããããŸãã
å®å šã«ééã£ãŠãã
ä»ã®ãã¹ãŠã®ããªããã»ããµãçµã¿åããããã®ããã倧ããã³ãã¥ããã£ã¯ééããããŸããã ä»ã«äœãèšãããšããããŸããïŒ
@hax - :extend
ã¹ã¬ããã§ä»ã®ã¿ããªãšåãããã«ç¬èªã®ãœãªã¥ãŒã·ã§ã³ãææ¡ããå Žåããã€ã³ãã¬ã¹ãããŒãªã³ã°ã¯ç¥èã«åºã¥ããè°è«ã«å€ããå¯èœæ§ããããŸãã çµéšè±å¯ãªããã³ããšã³ãéçºè
ãšLESSã®ãããŒãŠãŒã¶ãŒã®éã§äœé±éã«ããããããŸããŸãªææ¡ãšå¯©è°ãçµãŠã :extend
æ§æã§æºè¶³ã®ãã解決çã«ãã©ãçããŸããã ããè¯ãææ¡ãããã°ãç§ãä¿¡ããŠãã ãã-ç§ãã¡ã¯çè³ã§ãã
@jonschlinkertã«è¿œå ããã«ã¯ã .this:not(.that) { }
ãš.this:matches(.that) { }
ãš.this:extend(.that) { }
ã¯ã«ããŽãªçã«é¡äŒŒããŠããŸãã ã€ãŸãããã»ã¬ã¯ã¿ãŒ 'this'ãæå®ãããããã»ã¬ã¯ã¿ãŒ 'that'ã«ç¹å®ã®æ¹æ³ã§é¢é£ä»ããŸããã LESSã¯ãCSSã§å°å
¥ãããæŠå¿µãšæ§æãæ¡åŒµããããšãå€ããããèšèªã®ããªãè«ççãªæ¡åŒµã§ãã ç§ãã¡ã¯CSSä»æ§ã«çŽ°å¿ã®æ³šæãæãããã®çµæããã®ç¹ç°æ§ãåæ ããŠããŸãã æŠå¿µã«å¥åŠãªç¹ãããå Žåã¯ãCSSããå§ããããšããå§ãããŸãã ãã®ãããããã¯ã¹ã€ã³ã¬ââãŒãã§ã¯ããANDãã¯ãandããšããåèªã§è¡šããããORãã¯ã³ã³ãã§è¡šãããŸããããã¯ãã¡ãã£ã¢ã¯ãšãªã§ã®æ¹æ³ã ããã§ãã ç§ãã¡ã®ç®æšã¯ãCSSãä¿®æ£ãŸãã¯å€æŽããããšã§ã¯ãªããCSSã®æäœãã¯ããã«ç°¡åã«ããCSSäœæè
ã«ãšã£ãŠLESSãå®å
šã«éŠŽæã¿ã®ãããã®ã«ããããšã§ãã :extend
ã¯ãã®äžäŸã§ãã :not
䜿çšæ¹æ³ãç¥ã£ãŠããå Žåã¯ã :extend
䜿çšæ¹æ³ãç¥ã£ãŠããŸãã
ããã«ãã£ãšãæé»ã®ãæ§æã䜿çšããŠã芪ã®ãã¹ããåé¿ãããã©ã¡ããªãã¯ããã¯ã¹ã€ã³ã®æ¡åŒµã容æã«ããå Žåã¯ã©ããªãã§ããããã
ä»æ¥ãç§ãã¡ã¯æ¬¡ã®ãããªãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ã䜿çšããŠããŸãã
.square {
.border-radius(9px);
}
ãã®ããã«ããã¯ã¹ã€ã³ãæ¡åŒµããã®ã§ã¯ãªãïŒéåžžã®ã¯ã©ã¹ãæ¡åŒµããå¯èœæ§ãããããïŒïŒ
.square {
&:extend(.border-radius);
}
ãã®ããã«æ¡åŒµã§ããŸãïŒ
.box {
.border-radius:extend(9px);
}
.square {
.border-radius:extend(9px);
}
.rectangle {
.border-radius:extend(4px);
}
åºå¥ãã»ãã³ãã³ã§ãæ¡åŒµãããããã¯ã¹ã€ã³ãã¯çµäºãšããããšã§ãããšãæ¬åŒ§å
ã®å€ãŸãã¯å€ã宣èšããŸã.border-radius:extend(9px);
ããããæ¬åŒ§å
æ¡åŒµããã¯ã©ã¹ãäžèŠ§è¡šç€ºããäžæ¬åŒ§ã§æ°ããã»ã¬ã¯ã¿ãããã¯ãéå§ãããããã .border-radius:extend(.some-class) {}
ã IMHOãããã¯æé»ã®ããã¯ã¹ã€ã³ïŒ .border-radius;
ïŒãšåãããã埮åŠã§ããããã¯ãLESSã®æãã¯ãŒã«ãªæ©èœã®1ã€ã§ããããã¯ãIMHOã§ãã
ã¬ã³ããªã³ã°ãããåºåã§ã¯ããæ¡åŒµãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ãã¯ã次ã®ããã«å ã®ããã¯ã¹ã€ã³ã®å Žæã«ã¬ã³ããªã³ã°ãããŸãã
.box,
.square {
-webkit-border-radius: 9px;
-moz-border-radius: 9px;
border-radius: 9px;
}
.rectangle {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.some-other-class,
.another-class,
.and-another {
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
}
ã ããç§ã¯å人çã«ããã奜ãã§ãããªããªããã»ã¬ã¯ã¿ãŒãããã¯å ã®ãéåžžã®ãæ¡åŒµæ§æããååã«éžè±ããŠãäœãèµ·ãã£ãŠããã®ããååã«æããã«ããäœã説æããããå¿ èŠããªãæ¢åã®ããå°ãªãèŠåã®åŸ®åŠãã䌎ãããã§ããããªãã¯ã³ãŒãã§éæããããšããŠããŸãã ãã®æ©èœã¯ééããªãç§ã®å人çãªãŠã£ãã·ã¥ãªã¹ãã®äžçªäžã«ãããŸãã
å ã®ãªã¯ãšã¹ãã§æå®ããclearfixã®äŸã䜿çšãããšã次ã®ããã«ãªããŸããæ¹èšãããæ§æã§ã¯æ¬¡ã®ããã«ãªããŸãã
.clearfix() {
// ...
}
.navbar {
.clearfix:extend(); // instead of &:extend(.clearfix());
}
.banner {
.clearfix:extend();
&:extend(.some-class); // "implicit mixin" being extended
}
ç§ã¯ããªããããã§è¡ããšããã奜ãã§ãã ãããã¬ã³ããªãŒãªã¢ãããŒãã¯ã次ã®ããã«_existing_mixinæ§æã®æåŸã«:extend
ã䜿çšããããšã ãšæããŸãã
.box {
.border-radius(9px):extend;
}
.square {
.border-radius(9px):extend;
}
.rectangle {
.border-radius(4px):extend;
}
:extend
åŸã«èŠªãçç¥ããããšã«ã€ããŠã®äœãã¯ããããæ¢åã®æ¡åŒµæ§æãšã¯ç°ãªãç®çãæãããŠããããã«æããå Žåã«åœ¹ç«ã¡ãŸãã
ç§ã¯ããã§äœã§ãã§ããŸãããæ¡åŒµæ§æãšäžè²«ããŠããã®ã§.border-radius:extend(9px);
ã奜ã¿ãŸããIMOã¯ãããããã¯ã¹ã€ã³ã§ããããšã¯æããã§ããããã©ã¡ãŒã¿ãŒ/å€ãæ¡åŒµãããŠããããšãæå³ããŸã-ããã¯èª¬æã«åœ¹ç«ã¡ãŸãåºåããã°ã«ãŒãåããããçç±ã
@ jonschlinkert-ãã®æç¹ã§ãç§ã¯ããªãã®æèŠãéåžžã«é«ãè©äŸ¡ããããªããæåã ãšæã決å®ããµããŒãããŸãã ããªãã®ã¡ãœããã¯ãããã¯ã¹ã€ã³èªäœã«æž¡ãããã®ã§ã¯ãªãã9pxããæ¡åŒµãã«æž¡ãããŠããããã«æããŸã...ããããç§ã¯ã©ã¡ãã§ããã£ãããã§ãã
@DesignByOnyx芪åãªèšèãããããšãã ããªããèšã£ãŠããããšã¯éåžžã«çã«ããªã£ãŠããŸããç§ã®ãã¬ã³ãºãã®æ¡åŒµïŒLessïŒã¯æ¬¡ã®ãããªãã®ã§ããïŒ
.this:extend(.that) {}
ã§ããããããªãã®äž»åŒµã¯ç§èªèº«ã®èŠè§£ãšäžèŽããŠããŸãã @matthewdlãŸãã¯@lukeapageã©ã¡ãããããã«ã€ããŠäœãæèŠ/æèŠãæã£ãŠããŸããïŒ äž¡æ¹ã®æ§æãæ©èœããå¯èœæ§ããããšæããŸããïŒããããä»ã®æ§æãïŒã確ãã«ã©ã¡ãã®æ§æã§ããå°æ¥ã®ä¿èšŒãã«çŠç¹ãåœãŠãŠããªãã£ããããã©ã¡ããã§ããã€ãã®èœãšãç©Žãããå¯èœæ§ããããŸãã ãããèµ·ããã®ã楜ãã¿ã«ããŠããŸããããã¯ã¹ã€ã³ã®æ¡åŒµã¯Lessã«ãšã£ãŠãšããµã€ãã£ã³ã°ãªæ©èœã ãšæããŸããçŸæç¹ã§èããããä»ã®ã©ã®æ©èœããããDRYã³ãŒãã®çæã«å€ãã®å¹æããããŸãã
ãªãLessã³ã³ãã€ã©ã¯èªåçã«ãæ£ããããšããããããšãã§ããªãã®ã§ããïŒ èšãæãããšããã®ããã¯ã¹ã€ã³ãã³ãŒãã§å®£èšããŠããå ŽåïŒ
.someMixin {
color: red;
}
ãããŠåŸã§ç§ã¯ããã次ã®ããã«äœ¿çšããŸãïŒ
#someElement {
.someMixin;
}
ã³ã³ãã€ã©ããã®Lessã³ãŒãããã®CSSã«æé©åããã®ã«ååè³¢ããªãã®ã¯ãªãã§ããïŒ
.someMixin,
#someElement
{
color:red;
}
ãã®åäœãå®çŸããããã«ããŠãŒã¶ãŒãšããŠïŒextendsããŒã¯ãŒããæåã§è¿œå ããå¿ èŠãããã®ã¯ãªãã§ããïŒ ã³ã³ãã€ã©ãŒã¯ããã®æé©åãå®è¡ã§ããããšãèªèããŠå®è¡ã§ããã»ã©è³¢ããªããã°ãªããŸããã
å人çã«ã¯ãããã¯ïŒextendsã®ã¢ã€ãã¢ãæ··ä¹±ããŠãããšæããŸãã ãextendsãããŒã¯ãŒãã®æŠå¿µå šäœã¯ãããããXã«ããŠãAãBãããã³Cãè¿œå ãããããšãæå³ããŸãã ãããããã®æèã§ã¯ãæ¡åŒµãåå®çŸ©ããããšãææ¡ããŸããããã®ããšXã¯å®éã«ã¯Yãšåããªã®ã§ãYãšXãçãããšå®£èšããŠãäžåºŠæžãã ãã§ããã ããã¯ãäœãããæ¡åŒµããããšããæšæºçãªæŠå¿µã«åããŸãã
ãããç§ã¯ä»¥åã«åãããšãèããŠããŠããããæçš¿ããã€ããã§ãããããããèããåŸãããã¯ã¹ã€ã³ã«ãæ¡åŒµåäœããèªåçã«é©çšããããšã¯ãLess.jsã«ã¯ããŸãã«ãæèŠãå€ããšå€æããŸããã å ·äœçã«ã¯ãã»ã¬ã¯ã¿ãŒã®ç¶æ¿ïŒæ¡åŒµïŒã¯ã³ãŒãã®åæžã«éåžžã«æçãªçŽ æŽãããæŠå¿µã§ããããã®æ©èœã«ã€ããŠç§ãèªãã äžæºã®å€§éšåã¯ãã³ãŒããããŸãªã調ã¹ãããšãå°é£ã«ããæœè±¡åã¬ã€ã€ãŒãè¿œå ããããšã§ãåé¡ãããå Žåã¯ãããã°ããŸãã
çŽ æŽãããå¿ã¯åãããã«èããŸãããç§ã¯å人çã«ãã®ã¢ã€ãã¢ã«å察祚ãæããŸãããªããªããaïŒ extend
æ©èœãå®å
šã«å®å®ããä»æ§ãããå®å
šã«ãªããŸã§ããéåžžã®ãããã¯ã¹ã€ã³ãããã£ãŠã¯ãããªãããã§ããbïŒå€ãã®éçºè
ãèªåã§ãã®åŒã³ãããããããšæã£ãŠãããšæããŸããcïŒåé¡ã®äºå®ãããªããäœãããã¯ã¹ã€ã³ã«ã€ããŠã®å€ãã®é¢šå€ãããªããšãå¿ããŠãããšããããšã§ãããšããç©äºã¯ãã°ãã°ãšãŠãæçœã§ã«ããã¢ã³ããã©ã€ã«èŠããŸãææ¡ã¯å°ãªããšãå®è£
ããã®ãé£ãããããããéçºè
ãç§ãã¡ãæã£ãŠãããã¹ãŠã®ãããã¯ã¹ã€ã³ããã¯ãã䜿çšã§ããããã«ããªããå®è£
ããããšã¯äžå¯èœã§ã...ãããšã圌ãã¯ç¥ããæããããã«ãªããŸããã
ïŒextendsïŒïŒæ§æã¯ãŸã ããªãäžåšçšãªããã¯ã§ãããçŽæçã§ã¯ãªããæ°ãããŠãŒã¶ãŒã«èª¬æããã®ãå°é£ã§ãã
ããè¯ã解決çã¯ããŠãŒã¶ãŒãé©åãªåºåã¹ã¿ã€ã«ïŒå§çž®ãæé©åãªã©ïŒãéžæãããšãã«ãäžèšã®ããã«ã³ã³ãã€ã©ãŒã«CSSãèªåçã«æé©åãããããšã§ãã ãŠãŒã¶ãŒãéå§çž®åºåã¹ã¿ã€ã«ãéžæããå Žåãã³ã³ãã€ã©ãŒã¯ãããã®æé©åãåé¿ããçæããDRYã³ãŒããå°ãªãããå¿ èŠããããŸãã
ããã«ããœãŒã¹ãããã䜿çšããŠãããã°ã®åé¡ã解決ã§ããŸãã 圌ãã¯ãLessããã¯ã¹ã€ã³ããæ¥ãã³ã³ãã€ã«ãããCSSã®å Žæãç°¡åã«ææããããšãã§ããŸãã
@bdkjonesã¯ãã³ãŒãã§ãããå®çŸããæ¹æ³ã«ã€ããŠã®ææ¡ãšãšãã«ããCSSãèªåçã«æé©åãããããã®æ°ããæ©èœãªã¯ãšã¹ããäœæããŠãã ããã ãã®çš®ã®å ¥åã¯ãã€ã§ãæè¿ã§ãã
ãã€ã³ããåã£ãïŒ ç§ã¯æåŸã®ã³ã¡ã³ãã§ããã»ã©å³ããããšãæå³ããŠããŸããã§ããã ç§ã¯æã 倢äžã«ãªããŸãã
ã³ãŒãã«é¢ããŠã¯ãCodeKitã§å¿ããã®ã§ã¯ãªãããšæããŸãã ç§ã¯ããªããã¡ã«èšèªãããã·ã¥ãããŸãïŒ
å šããªãïŒ æ¬åœã«ãããªããCodeKitã«é¢äžããŠããã®ãèŠãŸãããããªãã®ç¶ç¶çãªã€ã³ããããæãã§ããŸãã ãã¹ãŠã®æ©èœããã¹ãŠã®äººãæºè¶³ãããããã§ã¯ãããŸãããããã£ãŒãããã¯ãšåŒ·ãæèŠã ããè»èŒªãåãç¶ããŸãïŒ
@bdkjonesåé¡ã¯ã«ã¹ã±ãŒãã§ãã ãŠãŒã¹ã±ãŒã¹ã§ã¯æ©èœããŸãããã»ã¬ã¯ã¿ãŒã®ã°ã«ãŒãåã¯ããã¹ãŠã®å Žåã«æãŸããçµæããããããšã¯éããŸãããããã¯ãã»ã¬ã¯ã¿ãŒãããã¥ã¡ã³ãå ã®ãåãã«ç§»åããŠããããã®ã»ã¬ã¯ã¿ãŒãäžæžããã宣èšãé²ãå¯èœæ§ãããããã§ãã
ããããããã§é²åããããã¯ã¹ã€ã³æ¡åŒµæ§æã«å¯Ÿããããªãã®å£°æã«åæããŸãã ã»ã¬ã¯ã¿ãŒXã¯ã»ã¬ã¯ã¿ãŒãŸãã¯ããã¯ã¹ã€ã³Yãæ¡åŒµããå¿ èŠããããããããã¯å¥åŠã«æããŸãã
.border-radius(9px):extend;
æ¡åŒµæ§æã誀çšããŠãããšæããŸãã ååšããæ¡åŒµæ§æãããã¯ã¹ã€ã³ã«é©åããªãå ŽåïŒããã¯å®å šã«ãã£ãšããããã§ãïŒã @ bdkjonesãææããããã«ãã¡ã¿ãã¡ãŒãæ··ä¹±ãããæ¹æ³ã§æ¡åŒµæ§æãæ¡åŒµããã®ã§ã¯ãªããããã¯ã¹ã€ã³ã«é©åãªæ§æãèŠã€ããããšããå§ãããŸãã¢ãŠãã
æ¡åŒµæ§æã誀çšããŠãããšæããŸã
åæããŸããã åäœããå Žåã¯ãããã䜿çšããŠãã ããã çç±ããªãæ°ããæ§æãäœæããã®ã¯ãªãã§ããïŒ ææ¡ãããæ§æã«ã¯çŽ æŽãããåäŸããããšæããŸããææ¡ã®èåŸã«ããè±å¯ãªäŸãšè£ä»ããšãªãçç±ã瀺ããŸãããææ¡ãããæ§æã«ã€ããŠã®ããªãã®æèŠã¯éåžžã«äž»èŠ³çãªããã§ãã ãããŠãæè¿ãã®å£°æãæ°åè¡ã£ãã®ã§ãæ§æãä¹±çšãããŠãããšæãçç±ã説æã§ããŸããïŒ ãŸãã¯ãæ§æãæªçšãããŠããã®ã¯ã©ã®æç¹ã§ãããã説æããŸããïŒ ãŸãã¯ããextendãæ§æã䜿çšããã«ãããã¯ã¹ã€ã³ãæ¡åŒµããæ¹æ³ã«ã€ããŠã®èããå ±æããŸããïŒ
ãŠãŒã¹ã±ãŒã¹ã§ã¯æ©èœããŸãããã»ã¬ã¯ã¿ãŒã®ã°ã«ãŒãåã¯ããã¹ãŠã®å Žåã«æãŸããçµæããããããšã¯éããŸãããããã¯ãã»ã¬ã¯ã¿ãŒãããã¥ã¡ã³ãå ã®ãåãã«ç§»åããŠããããã®ã»ã¬ã¯ã¿ãŒãäžæžããã宣èšãé²ãå¯èœæ§ãããããã§ãã
..ã
æ¡åŒµæ§æã誀çšããŠãããšæããŸãã ååšããæ¡åŒµæ§æãããã¯ã¹ã€ã³ã«é©åããªãå ŽåïŒããã¯å®å šã«ãã£ãšããããã§ãïŒãbdkjonesãææããŠããããã«ãã¡ã¿ãã¡ãŒãæ··ä¹±ãããæ¹æ³ã§æ¡åŒµæ§æãæ¡åŒµããã®ã§ã¯ãªããããã¯ã¹ã€ã³ã®æ£ããæ§æãèŠã€ããããšããå§ãããŸãã
ãããã圌ã¯äœãææããŸããã§ããã圌ã¯ç§ãã¡ã«ã䜿ãããããæžããããã«ä¿ããŸãããããã圌ã®åçã§ããã 圌ãææ¡ããæ¹æ³ã¯ééã£ãŠããŸããããæå³ã¯è¯ãã£ãã§ãã 圌ãèããŠããªãã£ãã®ã¯ãããªããä»ææããã«ã¹ã±ãŒãã§ãã äžè¬ã«extendã䜿çšããå Žåã¯ãã«ã¹ã±ãŒããèæ ®ããå¿ èŠããããŸãã ããã¯ã¹ã€ã³ã®ä»£ããã«extendã䜿çšãã人ã¯èª°ã§ããããç¥ã£ãŠãããšæããŸãã ãããã£ãŠãLess.jsã§ã¯ãæå³ãããå Žåã«äœ¿çšããããæå³ããªãå Žåã«äœ¿çšããªãããéžæã§ããŸãã CSSã®æåã®ãCããã«ã¹ã±ãŒããè¡šããšããäºå®ã¯ãã«ã¹ã±ãŒããéèŠã§ãªãå Žåã«éè€ããã¹ã¿ã€ã«ãçµ±åããå©ç¹ãåŠå®ãããã®ã§ã¯ãããŸããã ããã§äœãæ¬ ããŠããŸããïŒ
ããã§ãããªãã¯ããªãã®ææ ãæ確ã«ããããšãã§ããŸããïŒ ãã®æ©èœããŸãã¯æ§æã«å察ã§ããïŒ æ§æã«å察ããŠããå Žåã¯ãç©äºãåããç¶ããããã«äœãä»ã®ãã®ãææ¡ããŠãã ãããããã§ãªãå Žåã¯ããã®èšèªã«ãšã£ãŠææãªæ©èœã®é²è¡ã劚ããªãããã«ããŠãã ããã
ãã®æ©èœããŸãã¯æ§æã«å察ã§ããïŒ
ç§ã¯çµ¶å¯Ÿã«ãã®æ©èœã«è³æã§ãã ããã¯æãããªæ¹åã§ãã ãã®ã¹ã¬ããã§æ§æãå床確èªããŸããã ããã€ãã®èãïŒ
ãŸããããã¯ç§ã«ãšã£ãŠåä»ã§ãïŒ
.something:extend( .clearfix() ) { }
äºéæ¬åŒ§ã¯å¥åŠã§ãã ããããããã¯æ¢åã®æ¡åŒµæ§æãå¿ å®ã«æ¡çšããŠãããããååã«å ¬å¹³ã§ãã ã ãããç§ã¯äœãä»ã®ãã®ãããããæ¡åŒµä»¥å€ã®ãã®ãæå±ããŠããã®ã§ãã
ããããããªããææ¡ããããããããŸããç§ã¯åæ§ã®çç±ã§èããŸãïŒ
.border-radius(9px):extend;
...æ¢åã®æ¡åŒµä»æ§ã«åããŠããããã«èŠããã®ã§ãã¢ã¬ã«ã®ãŒåå¿ããããŸããã ã ãããããã¯ç§ã«ã¯èª€çšã®ããã«æãããšããã§ãã
ããã
å®éã«ã¯2ã€ã®éžæè¢ãããããšã«æ°ã¥ããŸããã 1ã€ã¯ãããã¯ã¹ã€ã³ã«å¯ŸããŠå¥ã®ããšãè¡ãããšã§ãã ããããä»ã®ãªãã·ã§ã³ã¯ã次ã®ãããªããã¯ã¹ã€ã³ãå«ããã¹ãŠã®ãã®ã«ã€ããŠãæ¢åã®æ¡åŒµä»æ§ãæ¹èšããããšã§ãã
#namespace {
.box-template {
.subelement {
// we'll add the all flag to extend everything here
}
}
}
.clearfix() {
// a clearfix mixin
}
.text-shadow(@shadow) {
-moz-text-shadow: @shadow;
text-shadow: @shadow;
}
.some .random .selector {
// with properties
}
.mybox {
.clearfix:extend;
#namespace > .box-template:extend !all;
.text-shadow:extend(2px 2px #ff0000);
.some .random .selector:extend;
}
ããã....å®å
šãªã»ã¬ã¯ã¿ãŒïŒ .some .random .selector
ïŒã䜿çšãããšãèªã¿åããééã£ãŠããŸããŸãã .selectorã ãã«æ¡åŒµåãä»ããŠããããã§ãã ãããŠããæ¡åŒµããããšããèšèã¯ããã®å®£èšã®éèŠãªèšèã§ãããšãã«å€±ããå§ããŸãã &:extend()
æžããããšãã¯ããã§ã¯ãããŸãã
ã ãããç§ã¯ãããã®ãªãã·ã§ã³ã®1ã€ãææ¡ããŸãïŒ
// Migrating existing syntax, but ommitting a parens requirement when used with &:
.mybox {
&:extend .clearfix;
&:extend #namespace > .box-template !all;
&:extend .text-shadow(2px 2px #ff0000);
&:extend .some .random .selector;
}
// Adopting something similar to the SASS approach
.mybox {
<strong i="24">@extend</strong> .clearfix;
<strong i="25">@extend</strong> #namespace > .box-template !all;
<strong i="26">@extend</strong> .text-shadow(2px 2px #ff0000);
<strong i="27">@extend</strong> .some .random .selector;
}
ããã¯ã¹ã€ã³ãšã¡ãã£ã¢ã¯ãšãªã®æ¡åŒµã«é¢ããè°è«ã¯ãç¹ã«è€æ°ã®ã»ã¬ã¯ã¿ãŒãšããã¯ã¹ã€ã³ãæ¡åŒµãããå Žåã :extend
ãžã®å
ã®æ§æã¢ãããŒãã¯ããã»ã©æè»ã§ã¯ãªãããšã匷調ãããšæããŸãã
ïŒextendãæ£ããååŸããããšãéèŠã ãšæããŸãã ããã¯ã¹ã€ã³ã«ãextendãã䜿çšãããå Žåã¯ãextendæ§æãä¿®æ£ããå¿ èŠããããšæããŸãã
ç§ã¯.border-radius(9px):extend;
ææ¡ããŸãã@ DesignByOnyxã¯.border-radius:extend(9px);
ãææ¡ããŸãã
ããããã©ã¡ãã®æ§æã§ãåé¡ãããŸããã ãŸãã¯ã .border-radius(9px) !extend;
ãŸãã¯.border-radius:shamallamadingdongscoobiedoo(9px):extendmyass
ïŒjkïŒãå®è¡ããããšãã§ããŸãããããã¯ã¹ã€ã³ã®åäœã«ãã£ãŠäœãå€ãããªããããŸã£ããæ¡åŒµãããªããããç§ã«ã¯é¢ä¿ãããŸããã
ã ãããããªããããããã¹ãŠãè¡ãå¿ èŠæ§ãã©ã®ããã«æãã€ããŠããã®ãããããŸãããããªãã¯ããããããªãèªèº«ã®ããã«ç©äºãé床ã«è€éã«ããŠããã§ãããã
ãã®æ©èœèŠæ±ã¯mixin_ã®ä»£ãã_toããã¯ã¹ã€ã³ã®ç¶æ¿ãããããããã£ãã³ããŒããæ©èœãæã£ãŠããããšã«ã€ããŠæ瀺çã§ãããããã¯ãã§ã«ãããçŸåšã®ããã¯ã¹ã€ã³ã®æ¯ãèãã§ç¢ºç«ãããã«ãŒã«ã«åŸã£ãŠãä»ãããŠåªå
é äœãšåãæ¯ãèããæã£ãŠããŸã<strong i="14">@import</strong> (reference)
æ©èœïŒãšããã§ãç§ã¯å®éã«ããªã䜿çšããŠããŠã倧奜ãã§ãïŒã äžèšã§èšãã°ïŒ
2幎éã®èšè«ã100ãè¶
ããæçš¿ãå€ãã®èª¿æ»ã®åŸã§ãæ§æã«é¢ããèšè«ãåããã·ã¥ããŠå»¶é·ãããçç±ãããããŸããããã§ã«ã @extend
ãããã¯ããã«æè»ã§ãããšããã±ãŒã¹ããããŸãã
ãšããã§ãç§ã¯ããªããããã§äœãæå³ããã®ãããããŸããïŒ
å®å šãªã»ã¬ã¯ã¿ãŒïŒ.some .random .selectorïŒã䜿çšãããšã誀ã£ãèªã¿åããéå§ããŸãã .selectorã ãã«æ¡åŒµåãä»ããŠããããã§ãã ãããŠããæ¡åŒµããããšããèšèã¯ããã®å®£èšã®éèŠãªèšèã§ãããšãã«å€±ããå§ããŸãã
ãããçŸåšå®éã«æ©èœããŠããã®ã§ãç§ã¯ãããæ··ä¹±ããŠããããšã«åæããŸããã ãCSSéçºè
ã¯ã°ã«ãŒãåãããã»ã¬ã¯ã¿ãŒãã©ã®ããã«æ©èœããã®ãããããªãããšèšã£ãŠãããããªãã®ã§ã¯ãããŸãããïŒ :hover
ãŸãã¯:after
ã©ãã§ããïŒ CSSéçºè
ã¯ãä»ã®pseduosãšåãããã«æ©èœããããããããããŸãç解ã§ãããšæããŸãã
.some .random .selector:extend(.something) {}
.some .random .selector
ã§ã¯ãªã.selector
.some .random .selector
ã§ããã»ã¬ã¯ã¿ãŒã«æ¡åŒµãé©çšããããã»ã¬ã¯ã¿ãŒãããã¯å
ã«æŒã蟌ãããšãã§ããã®ã§ããããããããæè»æ§ãæ°ã«å
¥ã£ãŠããŸãã
ããã¯ã¹ã€ã³ãšã¡ãã£ã¢ã¯ãšãªã®æ¡åŒµã«é¢ããè°è«ã¯
ããã¯ã¹ã€ã³ãæ¡åŒµããããšã§è§£æ±ºã§ããããšã«æ°ä»ããã®ã§ãã¡ãã£ã¢ã¯ãšãªã®åé¡ãéããŸããã ããã¹ãŠã®éã¯_____ã«éããŠããŸããããã¯ã¹ã€ã³ãæ¡åŒµããŸãã ;-)
ç¹ã«:extend( .some-selector )
ããã§ã«ç¢ºç«ãããŠãããæªæãæã£ãŠè°è«ãããŠããããã2ã»ã³ããæå
¥ããŠãparenså
ã®parensïŒ :extend( .some-mixin() )
ïŒã¯ããã»ã©æ°ã«ãªããŸããã ç§ã¯ãäºéã®èŠªã決ããŠçæ³çã§ã¯ãªãããããã¡ãã£ãšå¥åŠã«æããããšã«åæããŸãã ããããããã¯ã¹ã€ã³ãšã»ã¬ã¯ã¿ãŒããæ¡åŒµãã«é¢ããŠåãããã«æ±ãããšãéèŠã ãšæããŸããããã¯ãåŸæ¥ã®Lessã§åãããã«æ±ãããã®ãšã»ãŒåãã§ãã
header {
.some-selector;
.some-mixin;
.some-mixin();
}
ãã®ããã«ãç§ã¯ãããè¡ãããšã«ãã£ãŠå®éã«ããã»ã©æªãïŒãŸãã¯å¶éãããŠããïŒãšã¯æããŸããïŒ
header {
&:extend( .some-selector );
&:extend( .some-mixin );
&:extend( .some-mixin() );
}
ããããããã¯ã¹ã€ã³ãšã»ã¬ã¯ã¿ãŒããæ¡åŒµãã«é¢ããŠåãããã«æ±ãããšãéèŠã ãšæããŠããŸããããã¯ãåŸæ¥ã®Lessã§åãããã«æ±ãããã®ãšã»ãŒåãã§ãã
ç§ã¯ãã®ç¹ã§åãããŒãžã«ããŸãã
2幎éã®èšè«ã®åŸã100ãè¶ ããæçš¿ã延é·ããããã«ãæ§æã«é¢ããèšè«ãåããã·ã¥ãããçç±ãããããŸããã
ããã¯ããããšããåé¡ã§ã¯ãããŸããã ããããããããããŸããã ããããåœæã¯ãåŸã§åŠçããããã«ããã¯ã¹ã€ã³ãã·ã£ããã«ããŸããã ãã®æ§æããã¹ãŠã«å¯ŸããŠæ©èœããããã«æ©èœãããã©ããã確èªãããã ãã§ãã 質åãæ©èœããªãããŸãã¯äžéšã®çšéã§ã¯ãšã¬ã¬ã³ãã§ãªããšæããå Žåã¯ã質åãåæ€èšããŠãåé¡ã¯ãããŸããã LESSã¯é·ãéååšãç¶ããŠããŸããã è¿ éã«è¡ãããããæ£ããè¡ãããšãéèŠã§ãã
ã ãããç§ãã¡ã¯ããã§ã¯ãŒã«ã§ããïŒ
.mybox {
&:extend(.clearfix());
&:extend(#namespace > .box-template all);
&:extend(.text-shadow(2px 2px #ff0000));
&:extend(.some .random .selector);
}
parenså ã®parens-ïŒextendïŒ.some-mixinïŒïŒïŒ-ç¹ã«ïŒextendïŒ.some-selectorïŒããã§ã«ç¢ºç«ãããŠããã®ã§ãããã»ã©æ°ã«ãªããŸãã
ã¯ããããã§ããå®éãLess.jsã§ããæ¢åã®æ¡åŒµæ§æã䜿çšããããã«ãã¢ã¬ã³ã®åäŸããã§ã«ãããŸãã ãããŠããã§ã«èšå®ãããŠããå äŸã¯ãç§ãã¡ãããã¯ã¹ã€ã³ã§ææ¡ããŠãããã®ã»ã©ç®ã«ã¯ç°¡åã§ã¯ãããŸããã çŸåšããããè¡ãããšãã§ããŸãïŒ
.one:nth-child(5) {
color: red;
}
// We can extend psuedos
.two:extend(.one:nth-child(5)) {
background: blue;
}
// And attributes
.two:extend(.one, [hidden]) {
width: 2px;
}
æ¢åã®CSSæ§æã«ããã¹ãããã芪ããã
ãããã£ãŠãããã«ã¯_nestedparens_ãš_nestedpseudo-class_ã®äž¡æ¹ã®æ§æããããŸãã ãããŠãç§ã¯ããã§åé¡ã¯ãããŸãããããã¯æãããªIMOã§ãã
ã ããç§ã¯@DesignByOnyxã«åæã
å®éãå ã®æ§æã§ã¯ãè€æ°ã®ã³ã³ãåºåãã®ã¯ã©ã¹ãŸãã¯ããã¯ã¹ã€ã³ãæ¡åŒµã§ããŸãã
.banner {
&:extend(.clearfix(), .border-radius(4px), .alert, .navbar-fixed-top, [hidden]);
}
ããã¯ä»äºãããŸãããããŠããã¯ãã€ãã§ãã ããã«äžæºã¯ãããŸããã
ã ãããç§ãã¡ã¯ããã§ã¯ãŒã«ã§ããïŒ
ããã å®å šã«ã ããã¯ãã§ã«CSSã®ããæ¹ã§ãã ã ããç§ã¯ããã§ããã§ãã
ããã å®å šã«ã ããã¯ãã§ã«CSSã®ããæ¹ã§ãã ã ããç§ã¯ããã§ããã§ãã
ã ãããããã¯åæ Œããããã«ãªãã§ãããã
質åãçŸåšïŒextendã§è€æ°ã®ã»ã¬ã¯ã¿ãŒããµããŒããããŠãããšã¯æããªãã®ã§ããallãããŒã¯ãŒãããã®åœ¢åŒã®ã©ãã«åãŸãã®ãçåã«æããŸãããããã¯ããããå¥ã®åé¡ã®äžéšã§ããã¯ãã§ãã
ã·ã¥ãªã³ã±ã«ããããããªãã¯ããªãã®äž»åŒµãããŸããã ããªãã¯æ³åŸãå¶å®ãã¹ãã ã£ãã ;ïŒ
çŸåšãïŒextendã§è€æ°ã®ã»ã¬ã¯ã¿ãŒããµããŒãããŠãããšã¯æããŸããã
ããããç§ãã¡ã¯ããããŸã;-)ç§ã¯ãããåºç¯å²ã«è¡ããŸããã ã¡ããã©ä»¥åã«ãããããŸããïŒ
.global-nav {
// Extend and override bootstrap styles
&:extend(.navbar, .navbar-fixed-top all, .navbar-inverse); // this works, and it's pretty handy
&.hidden:extend(.navbar.hidden) {}
&.visible:extend(.navbar.visible) {}
&:hover {
background: lighten(@brand-primary, 5%);
}
.navbar-brand {
padding-left: 20px;
}
.navbar-nav > .active > a {
&, &:hover, &:focus {
background-color: darken(@brand-primary, 5%);
}
}
}
ã·ã¥ãªã³ã±ã«ããããããªãã¯ããªãã®äž»åŒµãããŸããã ããªãã¯æ³åŸãå¶å®ãã¹ãã ã£ãã ;ïŒ
Pfftãç¬ãããããŠïŒ
ç§ã¯ãã®æ§æã ãšæãããšãè¿œå ãããã ãã§ãïŒ
.foo {
&:extend( .bar() );
}
çŽ æŽãããã§ãã ãã£ããæ°ãŸããæãã¯ãŸã£ãããããŸããã
ããããäž»ã«ç§ã¯ããªããã¡ã«æ¥ãã§ãããããã®ã§ãç§ããæ°ã«å ¥ãã®ããªããã»ããµã§SASSã§åãçµãã§ãããã¹ãŠã®ã¯ãŒã«ãªããšãè¡ãããšãã§ããŸãïŒD
ãã£ãŒãããã¯ãããããšãã @ mgerring ïŒ
+1ãã®æ©èœãåŸ ã£ãŠããŸãã è¯ãä»äºãç¶ããŠãã ãã:)
å ã®æçš¿ãžïŒ
.clearfixed {
// stuff
}
.clearfix() {
&:extend(.clearfixed);
}
.navbar {
.clearfix();
}
.banner {
.clearfix();
}
ãã¶ãããã¯æçš¿æã«æ©èœããŸããã§ãããïŒ ããããããã¯ããªããæãã§ãããã®ã«éåžžã«è¿ãäœãããããããŸãïŒ
.clearfixed,
.navbar,
.banner {
// stuff
}
@aaronmw ãã¯ãã確ãã«ããªãã®äŸã¯åãã§ããããã®ææ¡ã®éèŠãªãã€ã³ãã¯ãä»ã®å Žæã§å®çŸ©ãããããã¯ã¹ã€ã³ãæ¡åŒµããæ©èœã§ãïŒã€ãŸããããã¯ã¹ã€ã³èªäœãå€æŽã§ããªãããŸãã¯å€æŽããããªãå Žåãããšãã°ä»ã®ãã¡ã€ã«ãå ±æã©ã€ãã©ãªãªã©ïŒ
ããã@ Seven-phases-maxã®ãã€ã³ãã«ããã°ãããã¯ããªãã説æããæ¹æ³ã§è¡ãããšãã§ããŸãããæ £çšçã§ã¯ãããŸããã
ããã§ãâç³ãèš³ãããŸããããç§ã¯ä»ãã®ã¹ã¬ããããã£ãšèªã¿ãç§ãã¡ãäœãç®æããŠããã®ããèŠãŠããŸããã ç§ã䜿çšãããã¹ã±ã«ãã³ãã¯ã©ã¹ã¯ã.clearfixedã¯ã©ã¹ãããã¯ã¹ã€ã³ã®å€éšã§æ瀺çã«åç §ãããããšã¯æ±ºããŠãªããããã³ã³ãã€ã«ãããåºåã§ã¯åãªããŽãã§ãã ïŒïŒextendïŒ.clearfixïŒïŒïŒã¯ä»ã§ã¯æå³ãããããšãŠããšããµã€ãã£ã³ã°ã§ãã ä»ã®ãšãããCSSãæ£ããããŠããã¹ã±ã«ãã³ã¯ã©ã¹ãæ±ããŸãã
ããã§çŽ æŽãããè°è«ïŒ
ïŒ+1ïŒ
ã§ã¯ããã€ãã®æ©èœãæåŸ ã§ããã®ã§ããããã OOCSSã®ãããªæŠå¿µã§ã¯ããæœè±¡ã¯ã©ã¹ãã®ãããªæ§é ãäœæãããšéåžžã«äŸ¿å©ã§ãã
.a {
color: green;
}
#thing {
.a() {
color: black;
}
}
.b:extend(#thing .a) {} //
.b:extend(.a) {} // and if so is the output wrapped by #thing?
.b:extend(.a()) {} // do I need special format to say extend only that mixin?
æãé£ããã®ã¯ãå®éã«ã©ã®ããã«æ©èœãããã_æ£ç¢ºã«_決å®ããããšã ãšæããŸãã
ãã¹ãã£ã³ã°/ã¹ã³ãŒãããã³ããã¯ã¹ã€ã³ãšéåžžã®ã¯ã©ã¹ã«ã©ã®ããã«å¯ŸåŠãããã決å®ããŸãã
ç§ã¯ããã¯ã¹ã€ã³æ¡åŒµã次ã®ããã«è§£éããããšããŸãïŒ
.b:extend(.a(1, 2, 3)) {}
ã¯ãå
éšã§.a(1, 2, 3)
ãåŒã³åºããéåžžã®æ¹æ³ã§æ¡åŒµãããbãã®ã¹ã³ãŒãå
ã«å¿åã®ãã³ãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ïŒã€ãŸãåçŽãªã»ã¬ã¯ã¿ãŒïŒãäœæããã®ãšåãããã«åäœããå¿
èŠããããŸãã
.a(<strong i="11">@a</strong>, <strong i="12">@b</strong>, @c) {
// ...
}
.b:extend(.a(1, 2, 3)) {}
ãããšçãããªããã°ãªããŸããïŒ
.a(<strong i="16">@a</strong>, <strong i="17">@b</strong>, @c) {
// ...
}
#__anon_a_1_2_3 {.a(1, 2, 3);}
.b:extend(#__anon_a_1_2_3) {}
ïŒ__ anon_a_1_2_3ãåºåã«è¡šç€ºãããªãããšãé€ããŠã ãã®ãããªã¢ãããŒãã¯ãç¹å¥ãªã«ãŒã«ãçºæããããšãªããå€ããå°ãªããç°¡åã«ãªãã¯ãã ãšæããŸãã
ãããã£ãŠãäžèšã®æŠå¿µã#thing .a
äŸã«é©çšãããšã次ã®ããã«ãªããŸãã
.a {
color: green;
}
#thing {
.a() {
color: black;
}
}
.b:extend(#thing .a) {} // since we do ignore parens on mixin call and have ...
// no plans changing this (?), it should probably create .b {color: black}
.b:extend(.a) {} // there's only one .a in this scope so it's -> .b {color: green}
.b:extend(.a()) {} // same as above -> .b {color: green}
äžæ¹ãããªãã·ã§ã³ã®ãã¬ã³ãã¯å®çšçãªèŠ³ç¹ããã¯éåžžã«ãã€ããŒãªãã®ã§ãããããããå³å¯ã«ããŠã extend
å
ã®ãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ã«ãã¬ã³ãèŠæ±ããããšãã§ããŸãïŒå§åã¯ããããŸããïŒã extend
ããšã«ããå®å
šã«äºææ§ããªãããããã¬ãŒã³ãªããã¯ã¹ã€ã³åŒã³åºãæ§æãç¶æ¿ããŸãïŒã
ããã¯ã¹ã€ã³ãåãåŒæ°ãšçµã¿åãããŸããïŒ
çæ³çã«ã¯ããã§ããããã§ãªããšãå šäœã圹ã«ç«ããªããªããŸããäŸïŒ
.b:extend(.a()) {}
.c:extend(.a()) {}
äœæããå¿ èŠããããŸãïŒ
.b, .c {color: green}
ããŒããããŒãžã¯å®è£ ããã®ãæãé£ããããã§ãã
ãã1ã€ã®åé¡ã¯ã¹ã³ãŒãã§ããæè¿ïŒ1730ã§çºçããããã«ãããã¯ã¹ã€ã³ã¯ãçžå¯Ÿãã¹ã³ãŒããã¹ã䜿çšããæ¡åŒµã¯ã絶察ãã䜿çšãããããäž¡æ¹ãçµã¿åããããšäžçš®ã®ç«¶åãçºçããŸãã
.div {color: green}
body {
.div {color: red}
p-a {.div()} // -> body p-a {color: red}
p-b:extend(.div) {} // -> body p-b {color: green}
p-c:extend(.div()) {} // -> ???
}
ãããŠããã®äŸããã©ã¡ããªãã¯ããã¯ã¹ã€ã³ã§æžãçŽããšãããã«æ··ä¹±ããŸãã
ç§ã¯2ã»ã³ããæäŸããŠãä»ã¯äžæ©äžãã£ãŠãæ¡åŒµããã¯ã¹ã€ã³ãã©ã®ããã«äœ¿çšãã¹ããããšèšãã®ã«è¯ãææãããããªããšèšãããã§ã-ãããŠ
.dog() {
.leg { ... }
.ears { ... }
.fur { ... }
}
ãŠãŒã¶ãŒã次ã®ããšãããããšæãç¶æ³ã«çŠç¹ãåœãŠãã¹ãã§ã¯ãªããšæããŸãã
.dog() {
.leg { ... }
.ears { ... }
.fur { ... }
.tail:extend( .leg() ) {
.toes { display:none; }
}
}
ããã¯ããªã³ãžã±ãŒã¹ã·ããªãªIMOã§ããã ãã§ãªãããŠãŒã¶ãŒã¯ãšã«ãã次ã®ãããªã¹ã¿ã€ã«ãäœæããå¿ èŠããããŸãã
.dog() {
.leg, .tail { ... }
.ears { ... }
.fur { ... }
.tail .toes { display:none; }
}
ããã¯ã¹ã€ã³ãæ¡åŒµããããã®99.8ïŒ ã®ãŠãŒã¹ã±ãŒã¹ã¯ãéçºè ãé·å¹Žã«ããã£ãŠèç©ããã¹ã¿ã€ã«ã§ãã£ã±ãã®å€§èŠæš¡ãªLESSã©ã€ãã©ãªã䜿çšã§ããããã«ããããšã§ãã ãã®å€§èŠæš¡ãªã©ã€ãã©ãªã«ã¯ã次ã®ãããªãã®ããããããããŸãã
.clearfix() { ... }
.modal() { ... }
.alert-box() {
&:extend( .modal() );
&.message { ... }
&.warning { ... }
&.error { ... }
}
.grid-wrap() { ... }
.form-input() { ... }
.form-select() { ... }
.button( <strong i="16">@bgColor</strong>, <strong i="17">@textColor</strong> ) { ... }
[... thousands more like this ...]
ãããŠã圌ãã¯ã¹ã¿ã€ã«ãæžãããšã«éäžããããšãã§ããŸãïŒ
.page-wrap:extend( .grid-wrap(), .clearfix() ) { ... }
input[type="text"]:extend( .form-input ) { ... }
textarea:extend( .form-input() );
å¿ èŠã«å¿ããŠãããè¡ãããšãã§ããŸããããã®ãããžã§ã¯ãã§ã¯äœ¿çšãããŠããªãããããã¢ãŒãã«ãã¹ã¿ã€ã«ã¯æçµåºåã«è¡šç€ºãããŸããã
.inline-error:extend( .alert-box.error )
ããã @ DesignByOnyxã«ã¯
@DesignByOnyxãš@calvinjuarezã¯ãç解ããããšã¯ã§ããŸããã
ããªã³ãžã·ããªãªããµããŒãããªãã¢ãããŒããèãåºãããšãã§ããã°ãç§ã¯ãšãŠã幞ãã§ããããã¯ãã¡ã€ã³ã®æ¡åŒµãµããŒãã§ãã£ãããšã®ãããªãã®ã§ãïŒå¿ èŠã«å¿ããŠãããå€ãã®ããŒã¯ãŒãã§æ¡åŒµã§ããŸãïŒãããããäœãã©ã®ããã«ãµããŒãããããã«ã€ããŠã®èšç»ãå¿ èŠã§ãã
äžèšã®éèã®@ seven-phases-maxãç§ã¯ä»ã®ãšãããã©ã¡ããªãã¯ããã¯ã¹ã€ã³ãç¡èŠããŠå¹žãã§ãã
ããŒããããŒãžã¯å®è£ ããã®ãæãé£ããããã§ãã
- ããããããã¯ããŒãžãããŠããŸããïŒ æ¢åã®ãšã¯ã¹ãã³ããšåãã¢ãããŒãã䜿çšããŸããããšãã°ãäžèŽãããã®ãèŠã€ããŠããã«è¿œå ããŸãããããã£ãŠãäž¡æ¹ã®ãšã¯ã¹ãã³ãã3çªç®ã®å Žæã§ããããã¯ã¹ã€ã³ã«é 眮ããã»ã©ããŒãžãããŸãããããã¯ãç¹å¥ãªãã®ãšããŠåºåãããŸãããã®genCSSã®ã±ãŒã¹
ãŸãã@ seven-phases-maxã®ã¹ã³ãŒãã«å¯Ÿãã2çªç®ã®äŸã¯ã誰ãã«åœ±é¿ãäžããå¯èœæ§ãéåžžã«é«ããšæããŸããåãååã®ããã¯ã¹ã€ã³ãšç©ºã®ãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ãå¿ èŠã§ãã
@lukeapage ïŒ+1ïŒ
å®éã@ seven-phases-maxã¯ãããæ£ããè¡ã£ãŠãããšæããŸãã ã ããïŒ+1ïŒããã«ãã
@ lukeapage-ç§ã¯ã:extend
ã¯æ¬¡ã®ããã«æ©èœããããããããŒã«ã«ãã¹ã³ãŒãã®æ©èœããã§ã«è¶
ããŠããããé
ãããŠæ»ãããã§ãŒãºIMOã«å
¥ããŸããã
.block { color: green; }
.component {
.block { color: red; }
div:extend( .block ) {};
}
/*
.block,
.component div {
color: green;
}
.component .block {
color: red;
}
*/
次ã®ã³ãŒããäžèšãšç°ãªãåäœãããçç±ã¯ããããŸãããæçµçãªåºåã«.block
ã¯ã©ã¹ããªããšããå©ç¹ããããŸãã
.block() { color: green; }
.component {
.block() { color: red; }
div:extend( .block() ) { };
}
/*
.component div {
color: green;
}
*/
ãšããã§ãåœåèŠåã«ã¯ããããªããããããŸã:)ããšãã°ãç§ã«ãšã£ãŠããã©ã¡ããªãã¯ããã¯ã¹ã€ã³ããšã¯ããã©ã¡ãŒã¿ãŒã0ã®ããã¯ã¹ã€ã³ãå«ãããã©ã¡ãŒã¿ãŒã§å®çŸ©ãããããã¯ã¹ã€ã³ãæå³ããŸãïŒã€ãŸãã .mixin() {}
ã¯ããã©ã¡ããªãã¯ãããã¯ã¹ã€ã³ã§ãïŒã ãŸããããã³ãã©ã¡ããªãã¯ãããã¯ã¹ã€ã³ã¯åçŽãªã»ã¬ã¯ã¿ãŒã§ãïŒã€ãŸãã .mixin {}
ïŒã ãããŸã§ã®ãšããããã®ããªããã¯èª€è§£ãçãŸãªãã£ããšæããŸãïŒããšãã°ãäžèšã®ã»ãšãã©ã®äŸã§ã¯ã .mixin() {}
ãããã³ãã©ã¡ããªãã¯ãããã¯ã¹ã€ã³ãšåŒã°ãããã©ããã¯ã³ã³ããã¹ãããæãã
ããã¥ã¡ã³ãã§ã¯ãåçŽãªã»ã¬ã¯ã¿ãŒããããã¯ã¹ã€ã³ããšåä»ããããŠããïŒããã¯ã¹ã€ã³ããããšããã«ïŒãèšèšäžããã³ãã©ã¡ããªãã¯ãããã¯ã¹ã€ã³ã§ãããããšããèŠéããªãã ãããã£ãŠãããã³ãã©ã¡ããªãã¯ãã«ã€ããŠã®ã¿.mixin() {}
ãåç
§ããããšã¯ãããªããããŸããªå ŽåããããŸãïŒæè¡çã«ã¯ãåŒæ°ã®æ°ã§ã¯ãªããå®çŸ©æ¬åŒ§ã®æç¡ã«éãããããŸãïŒã
OKãããã¯ç§ã®ãã€ãã®ããŒããŒããŒã§ããã :)
@lukeapage
ä»ã®ãšããããã©ã¡ããªãã¯ããã¯ã¹ã€ã³ãç¡èŠããŠããã£ããšæããŸãã
ã€ãŸãããŒã以å€ã®ãã©ã¡ãŒã¿ãæã€ããã¯ã¹ã€ã³ã®æ¡åŒµããµããŒãããŠããŸãããïŒ ç§ã¯ããã§å€§äžå€«ã§ãã ç§ã¯ãããã©ã®ããã«å®è£ ãããããæšå®ããããšããŠããŸããïŒãŒããšãŒã以å€ã®ãã©ã¡ãŒã¿ãŒã®ããã¯ã¹ã€ã³ãåºåãããšãªãçµ±äžãããæ¹æ³ã§ãåŸè ãæçµçã«ãžã£ã³ããããšãã«ã·ã§ãŒã¹ããããŒã«ãªããªãããã«ïŒã
ããããããã¯ããŒãžãããŠããŸããïŒ ç§ã¯æ¢åã®æ¡åŒµãšåãã¢ãããŒãã䜿çšããŸããããšãã°ãäžèŽãããã®ãèŠã€ããŠããã«è¿œå ããŸãã
ããã§ããããã¯ã¹ã€ã³ã®æ¡åŒµãå®éã®åŒæ°ãšããŒãžããéã«èµ·ããããåé¡ã«ã€ããŠãã£ãšèããŠãããšæããŸããäŸïŒ
.b:extend(.a(1, 2, 3)) {}
.c:extend(.a(1, 2, 3)) {}
äžæ¹ããŒããã©ã¡ãŒã¿ããã¯ã¹ã€ã³ã«ãé ããé©ãããããšæããŸããäŸïŒ
.a {color: red}
.a {width: 2px}
.b:extend(.a) {} // creates two `.b` blocks (it is expected since there're two `.a` blocks anyway)
.c {.a} // creates one `.c` block (OK, this is just how mixins work)
.d() {color: blue}
.d() {width: 10px}
.e {.d()} // creates one `.e` block (OK, this is just how mixins work)
.f:extend(.d()) {} // tada! another room for complains if this creates two `.f` blocks :)
ãŸããå€åããã¯æ·±ãããŸãïŒãããŠãŸãä»ã®ãšãããããå¿é ããã«ã¯å°ããããŸãïŒã
.f:extend(.d()) {} // tada! another room for complains if this creates two
.fblocks :)
ããã®äŸã§ã¯ã .d()
ã¯ãã©ã¡ããªãã¯ã§ããããã2ã€ã®.f
ãããã¯ãäœæããã¹ãã§ã¯ãªãããšããèãã§ïŒ
ãããããã¯ã¹ã€ã³ã次ã®çµæã«ãªãããšãèãããšãç§ã¯ããªãã®ãã€ã³ããèŠãããšãã§ããŸãïŒ
.f {
color: #0000ff;
width: 10px;
}
IMHO段éçã«è¡ãããšãçã«ããªã£ãŠããå Žåã¯ãããã説æããã ããããããŸããããèŠæ èªäœãåé¿ããããã«äœããå®è£ ããããšã¯_ããŸãã_ã ãã¡ãããããã¯ç§ã®2cã§ãã ãŸãã説æããåäœã§å®è£ ãããŠããå Žåã¯ãæ©èœãè¿œå ãããšãã«ããæ¡åŒµã»ã¬ã¯ã¿ãŒããã®CSSãããã¯ãããŒãžãããããã®æ©èœãªã¯ãšã¹ããäœæããŠãèŠæ ãåé¿ããããšãã§ããŸã...ïŒ
ããããç§ã¯èŠæ èªäœãé¿ããããã«äœããå®è£ ããŸããã
ç§ã¯çµ¶å¯Ÿã«åæããŸãã ç§ã¯ããå€æŽããã«ã¯é ãããããã®ã®1ã€ã«ãªãå¯èœæ§ã®ããé©ããããã«äºæž¬ããããšããŠããŸãã
ïŒ+1ïŒãããç§ã¯ããªãã®èãæ¹ã奜ãã§ãïŒ
ç§ã¯ãã®è°è«ããŸã ç¶ããŠããã®ã奜ãã§ãã ãã®è°è«ã®ããã€ãã®ãã€ã³ãã«æ»ããŸãããã ãŸããäžè¬çãªäœ¿çšæ³ã«é¢ããŠã¯ãããã¯åãã§ãã
.mixin {} == .mixin() {}
.mixin {}ãã¯ã©ã¹ãšããŠåºåãããããšãé€ããŠã ããŒãµãŒã§ã¯ããããç°ãªãæ¹æ³ã§åŠçãããããšãç¥ã£ãŠããŸããã䜿çšæ³ã§ã¯ãããããã£ãšå€ã®ãã¢ããã³ãããŸãã
æå³ïŒ
.mixin1() {
color: red;
}
.mixin2 {
color: blue;
}
.use1 {
.mixin1;
foo:bar;
}
.use2 {
.mixin2;
foo:bar;
}
ãã®å°ãªãæ§æå±¥æŽã®ããã«ãç§ããããè¡ãããšãã§ããã®ã¯çã«ããªã£ãŠããŸãïŒ
.mixin1() {
color: red;
}
.mixin2 {
color: blue;
}
.use1 {
&:extend(.mixin1);
foo:bar;
}
.use2 {
&:extend(.mixin2);
foo:bar;
}
ç§ã«ãšã£ãŠãããã¯è°è«ã®äœå°ããããŸãããå ã®ããã¯ã¹ã€ã³ã®äœ¿çšæ³ã®å€ãã®ã€ã³ã¹ã¿ã³ã¹ã®ããããã€ã³çœ®æãšããŠïŒextendã«ã€ããŠãã話ããŸããã
çŽ äººã«ãšã£ãŠãããã¯ããããçŽæçã«åãã§ãããªããªãã.mixin1ã¯ãæ¬åŒ§ã§æžãããŠãããã©ããã«é¢ä¿ãªããæŽå²çã«æ¬¡ã®ããã«åç §ã§ããããã§ãã
.use1 {
&:extend(.mixin1);
foo:bar;
}
.use1 {
&:extend(.mixin1());
foo:bar;
}
ã ãããç§ã¯ãããæåŸ ããŸãïŒ
.mixin1() {
color: red;
}
.use1 {
&:extend(.mixin1());
foo:bar;
}
.use2 {
&:extend(.mixin1());
bar:foo;
}
...åºåãã...
.use1, .use2 {
color: red;
}
.use1 {
foo:bar;
}
.use2 {
bar:foo;
}
ããã¯ã¹ã€ã³ã2åå®çŸ©ãããŠããå Žåããã®å§åŠ¹ã§ããã¯ã©ã¹ã»ã¬ã¯ã¿ãŒãšåæ§ã«ãæ¡åŒµãããš2å眮ãæããããŸãã
.mixin1() {
color: red;
}
.mixin1() {
width: 30px;
}
.use1 {
&:extend(.mixin1);
foo: bar;
}
.use2 {
&:extend(.mixin1);
}
//output
.use1, .use2 {
color: red;
}
.use1, .use2 {
width: 30px;
}
.use1 {
foo: bar;
}
ãã¡ãããããã¯ã¹ã€ã³åãåºåã«è¡šç€ºãããããšãé€ããŠãããã¯ã¹ã€ã³å®çŸ©ã®æ¬åŒ§ãåé€ããå Žåããããåºæ¬çã«extendã®åäœæ¹æ³ã§ãããããã£ãŠãæ¢åã®æ¡åŒµåäœã«åŸãããšã¯çã«ããªã£ãŠããŸãã
ãã©ã¡ãŒã¿ïŒç§ã®90ïŒ ã®ãŠãŒã¹ã±ãŒã¹ïŒã§ã¯ãå ¥åã«ãã£ãŠåºå¥ãããããšãé€ããŠãåãããšã§ãã
.col(@width) {
width: @width;
display: table-cell;
}
.col1:extend(.col(10%)) { }
.col2:extend(.col(10%)) { }
.col3:extend(.col(80%)) { }
//output
.col1, .col2 {
width: 10%;
display: table-cell;
}
.col3 {
width: 80%;
display: table-cell;
}
ç§ã«ãšã£ãŠãããã¯ã¹ã€ã³ãæ¡åŒµããçç±ã¯ããã©ã¡ãŒã¿ãŒãã°ã«ãŒãåããããšã§ãããéåžžã«ç°¡æœãªåºåãçæã§ããããã匷åãªããã¯ã¹ã€ã³ã©ã€ãã©ãªã«ã€ãªãããŸãã ãã©ã¡ãŒã¿ãªãã§ããã¯ã¹ã€ã³ã«ãããã䜿çšããããšã¯ããã»ã©éèŠã§ã¯ãããŸããããªããªããä»æ¥ãæ¢åã®Lessæ©èœã䜿çšããŠãç®çã®çµæãçæã§ããããã§ãã
ãããæšé²ãç¶ããŠãããçããã«æè¬ããŸãã ããªã匷åãªè¿œå ã«ãªããšæããŸãã
ïŒ+1å æ¬çãªå èš³ãããããšã@ matthew-dean-ç§ã¯ããªããã«ããŒãããã¹ãŠã«åæããŸãã æè¿ã®è°è«ã®ãããã¯ã®1ã€ã§ãããã®ã·ããªãªã«ã€ããŠã®ãæèŠããèãããã ããã
.mixin() { color: red; }
.component {
.mixin() { color: blue; }
> li:extend( .mixin() ) { ... }
}
LESSãçŸåšæ©èœããŠããæ¹æ³ã§ã¯ãã°ããŒãã«ã¹ã³ãŒãå ã®ããã¯ã¹ã€ã³ã®ã¿ãæ¡åŒµãããŸããã€ãŸããèµ€ãã¹ã¿ã€ã«ãæ¡åŒµãããŸãã ç§ã¯å人çã«ãã®åäœã«åé¡ã¯ãããŸããã誰ããäžèšã®ã³ãŒããèšè¿°ããŠéãã¹ã¿ã€ã«ãæ®åããããšãæåŸ ããå¯èœæ§ããããŸãããextendsã®ãã°ããŒãã«ãåäœã¯ããã¥ã¡ã³ãã®ã¯ã³ã©ã€ããŒã ãšæããŸãã
// this is ".mixin()", which is being extended
.mixin() { color: red; }
.component {
// this is ".component .mixin()", which is not.
.mixin() { color: blue; }
> li:extend( .mixin() ) { ... }
}
extendsã®ãã°ããŒãã«ããªæ¯ãèãã¯ãããã¥ã¡ã³ãã®ã¯ã³ã©ã€ããŒã ãšæããŸãã
å®å šã«åæããŸãã ããã«ç°è²ã®é åãå°å ¥ããã®ã¯ã²ã©ãèãã ãšæããŸãã
ç§ã«ãšã£ãŠéèŠãªã®ã¯äžè²«æ§ã§ãã çŸåšã®åäœãããŒã«ã«ã¹ã³ãŒãã®ã»ã¬ã¯ã¿ãŒãæ¡åŒµããªãå ŽåããŸãã¯ããã¯ã¹ã€ã³ã䜿çšããå¿ èŠããªãå Žåã åŸã§ããŒã«ã«ã§ã»ã¬ã¯ã¿ãŒãæ¡åŒµããå Žåã¯ãããã¯ã¹ã€ã³ãæ¡åŒµããå¿ èŠããããŸãã 人ã ã¯ãã©ã€ãã©ãªå šäœã§ããïŒextendã®ãã¿ãŒã³ãä¿¡é Œã§ããã¯ãã§ãã
ïŒãã£ãšç°¡æœã«èšãããšãã§ããŸãããã @ jonschlinkertã®ã³ã¡ã³ãã«+1ãã;-)
ãã®æç¹ã§ããã®æ©èœãæ··ä¹±ããããããªãŠãŒã¹ã±ãŒã¹ã誰ããæäŸã§ããŸããïŒ @ matthew-deanããã®ãã®å æ¬çãªæŠèŠãšãã®åŸã®å¿çããå§ããŠ
幞ããªäŒæ¥ã ã¡ãªãŒã¯ãªã¹ãã¹ã ãã§ãªãŒãã§ãã£ãšã¹ã¿ïŒ
æ¬åœã«çŽ æŽãããæŠèŠã @ matthew-deanãšããã«ç¶ããã¹ãŠã®ã³ã¡ã³ãã«åæããŸãã ïŒ+1ïŒ
@ matthew-deanã«ãåæããŸãã 圌ã¯ãããã®ä»²éã®ããã§ãç§ã¯åœŒã®æãæ¯ãããã§ãã
ïŒ-å¿åïŒ
@ matthew-ãã£ãŒã³ã¯ãŒãã ïŒ+1ïŒ
ãã®æ©èœã䜿çšãããšãBootstrapã®ã°ãªããã·ã¹ãã ã³ãŒããéåžžã«ã¯ãªãŒã³ã«ããããšãã§ããŸãã
ïŒ+1ïŒ@cvrebertã«åæããŸããïŒ ããã ããïŒ
ãã å蚪ããŸãã ã»ãŒã³ã³ã»ã³ãµã¹ããããå®è£ ãå¿ èŠã ãšæããŸãããïŒ
ç§ã¯ããã«ã€ããŠãã£ãšæ å ±ãèŠã€ããããšããŠããŸãããããã¯ãã¹ãŠãèªãã§ããè¿·è·¯ã®ãããªãã®ã§ãã ããã¯å®è£ ãããããšããããŸããïŒ ãããããªãã誰ããç§ã«ããã¥ã¡ã³ãã®é©åãªé åãæããŠãããŸããïŒ
@ josh18ããããæ©èœãªã¯ãšã¹ãããŸã éããŠããå Žåãããã¯éåžžãå®è£ ãããŠããªãããšãæå³ããŸãã
ãããããé¡ãããŸããäœãã足ããªãå Žåã«åããŠãããäžåºŠç¢ºèªããããšæããŸããã
ããæç¹ã§ããŠã£ãã®ãªãŒãã³/å®è£ äºå®ã®æ©èœãèŠçŽããããšãèšç»ããŠããŸããããŸã æéããããŸããã
ããæç¹ã§ããŠã£ãã®ãªãŒãã³/å®è£ äºå®ã®æ©èœãèŠçŽããããšãèšç»ããŠããŸããããŸã æéããããŸããã
@ matthew-dean +1
ããã«ã¡ã¯ãã¿ããªïŒ ç§ãç解ããŠããéãããã®æ©èœã¯SASSãã¬ãŒã¹ãã«ããŒã«ãããã䌌ãŠããŸãã ããããã€å®è£ ãããã®ãç¥ãããã ãã§ããïŒ
ããã
èªåã®æéãä»ã®è²¢ç®è
ãäºæž¬ããã®ã¯é£ãããšæããŸã
圌ããèå³ãæã£ãŠããããšãå®è¡ããã®ã§ãããããããŸããã ç§ãèšããã®ã¯
ç§ãã¡ã¯ãããåªå
床ãé«ããšèããŠããŸããããã¯ç§ã®ãªã¹ãã®æ¬¡ã®å€§ããªãã®ã§ãã
ãåçããããšãããããŸãã ãããå®è£ ãããæ©èœããã®ã楜ãã¿ã«ããŠããŸãã :)
ãã®æ©èœã®+1ã CSSã®ãµã€ãºãå°ããããã®ã«éåžžã«åœ¹ç«ã¡ãŸãã
ãã®æ©èœã®+1ã
ãã®æ©èœã®+1ã
+1èŠãŠèå³ãæã£ãŠãããããšãïŒ
ïŒ+1ïŒ
ãã®å·ãäœæãããŠãã2幎ãçµéããŸããã 2014幎11æ以éã®åªå 床ã®é«ãã¿ã°ããã€ã«ã¹ããŒã³ã¯1.6.0ãŸãã¯2.0.0ã§ãã çŽ æŽãããã å°ãªãã®ã¯2.5ã«ãªããŸããã
@Grawl
PRãããæºåãã§ããŠãããšããããšã§ããïŒ
@ seven-phases-maxããã¯ç§ãæã£ãŠãããã®ãšã»ãŒåãã§ãã ãã®ãããªè³æ Œã®è¡šç€ºã ;ïŒ
@ Seven-phases-maxlolãããç§ã¯ãã ã®ããã³ããšã³ã/ãã¶ã€ããŒã§ãã
@Celcã¯æ¬åœã«ã²ã©ãèŠããŸãð
ãã®å·ãäœæãããŠãã2幎ãçµéããŸããã
ããããšã«ãããç§ã¯ããªãã«äœãæã£ãŠããŸããïŒ ;-)
æ®å¿µãªããåå ãæäŒãããšã¯ã§ããŸããããç§ã¯ãã®ãªã¯ãšã¹ãã«å€§ãã«è³æã§ãïŒ
ããã¯ãè€éã§å¹æçãªãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããããã®éåžžã«éèŠãªæ©èœã§ãã
3幎ãšæ°ããŸãã 幞ããªããšã«ãSass v4ãç»å ŽãïŒ sass-*
ãã¬ãã£ãã¯ã¹ä»ãé¢æ°ä»ãïŒãLessãåãé€ãããšãã§ããŸãã
@stevenvachonç§ãã¡ã¯Sassã«å¯ŸããŠæšã¿ãæ±ããŠããŸããã ãã¡ããã圌ãã¯ããæå³ã§ç«¶äºçžæã§ããããããžã§ã¯ãã¯ç°ãªãå²åŠãæã£ãŠãããããããåŒã³åºãããšã«ãã£ãŠç§ãã¡ãå·ã€ããããšããããšã¯ç¡æå³ã§ãã
ãã¡ããã誰ããã§ããã«ãªã¯ãšã¹ããæè¿ããŸãã ãã®æ©èœã䜿çšããŠãæ©èœçãªãã«ãªã¯ãšã¹ããåãã§ããŒãžããŸãã
ç§ã¯èª°ããå·ã€ããããšã¯ããŠããŸãããå®éããããããã®ãããªããšãé²ãããšããŠããŸãã èªåã®æ°æã¡ãããã®çµæãšããŠã®æ°ããæ¹åæ§ãè¡šçŸããã»ãããããšæããŸãã åŸã§ããæ©ãç¥ãæ¹ãè¯ããšæããŸãã ã¿ããªãå»ãåã«ã ããšãã°ãBootstrap v4ã¯Less.jsã䜿çšããªãããããŠãŒã¶ãŒããŒã¹ã«å€§ããªææãäžãããšç¢ºä¿¡ããŠããŸãã ãã¡ãããããªãã¯ãã®ãããªæ¿æ²»ãããªããæããã¹ãŠãç¡èŠããããšãã§ããŸãã
@stevenvachonãªããããªã«ãªããããã¯ãªã®ã§ããïŒ SassãšLessã¯ã©ã¡ããçŽ æŽãããã§ãã ç§ã¯çŽç²ãªJSã倧奜ãã§ãã node-sassãã€ã³ã¹ããŒã«ããã«ã¯acã³ã³ãã€ã©ãå¿ èŠã§ãããããã¯ç°å¢ã«ãã£ãŠã¯é¢åãªå ŽåããããŸãã ãã§ã«LESSã«çµã¿èŸŒãŸããŠããŠããã¹ãŠã®ããŒãºãæºããïŒextendæ©èœã䜿çšããŸããã ãã®åé¡ããŸã 解決ãããŠããªãçç±ããããããŸããã
ã¡ãªã¿ã«ãç§ã¯Railséçºè ã§ãããRubyãããžã§ã¯ãã§ãªãå Žåã¯gulp + LESSã䜿çšããŸãã
ãªããããã¯ïŒ ãã®æ©èœã¯3幎éå®è£ ãããŠããããéåžžã«äŸ¿å©ã§ãã
SassãJSã§æžãããŠãããšããã®ã§ãããããã§ã¯ãªãããããæãéèŠãªããšã§ã¯ãããŸããã ãã®æ©èœã¯ã§ãã Sassã§ã¯ãã¬ãŒã¹ãã«ããŒãæ¡åŒµã§ããŸãããLessã§ã¯ããã¯ã¹ã€ã³ãæ¡åŒµã§ããŸããã
ãŸã£ãã話é¡ããå€ããŠããããã§ã¯ãããŸããããåŸ æã®æ©èœã§ãã ïŒãšã«ããããŸã奜ãã§ã¯ãããŸããããããŸããŸãªçç±ã§ïŒ
ããã¯ãã äœãããããšãæé¡ããŸãã
PSç§ã®å Žåãç§ã¯å®éã«ã¯jsã®ç¥èãå°ããããã¶ã€ããŒã§ãããã»ãšãã©ãdomé¢é£ã®ãã®ã§ãããless.jsã³ãŒãããŒã¹ã«è²¢ç®ã§ããéçºè ããã¯ã»ã©é ãã§ãããšã«ããæ²ãã話ã§ãïŒ
ãããžã§ã¯ãã®éåžžã«èå³ã®ãããµããŒã¿ãŒïŒ
å ¬å ±ãµãŒãã¹ã®æ¡å
ãã€ã§ããã«ãªã¯ãšã¹ããéä¿¡ããããéçºè ãšååããŠãã«ãªã¯ãšã¹ããååŸã§ããŸãããã®æ©èœãçµ±åãããå¯èœæ§ãéåžžã«é«ããªããŸããLess.jsã©ã€ãã©ãªã«ã¯ããã®ã¹ã¬ããã®äººã ã®ãããªå人ããã®ããå®æçãªæçš¿ãå¿ èŠã§ãã ã ããã¯äžäººã®è²¬ä»»ã§ã¯ãããŸããã ããã¯ããã®ã¹ã¬ãããèŠããããã®æ©èœãå¿ èŠãšãããããå®çŸããããã«æéããããäžäººã®å人ã«å®å šã«äŸåããŠããŸãã
éçºè ã§ã¯ãªããšããåçã®å Žåãæ°æ©èœã«å¿ èŠãªããã¥ã¡ã³ããæäŸãããããŠã§ããµã€ãã§ãµããŒããèšèšãããããã¹ããå®è¡ãããããã£ãŒãããã¯ãæäŸããããããªã©ãéçºä»¥å€ã®åœ¹å²ã§ãã®ãããžã§ã¯ãããµããŒãã§ããæ¹æ³ã¯ä»ã«ããããããããŸããåé¡ããããžã§ã¯ã管çãStack Overflowã«é¢ãã質åãžã®åçãããã°æçš¿ã®äœæãLessã«é¢ãããã€ãŒããCSSããã³Webã³ãã¥ããã£ãžã®è²¢ç®ãLessã©ã€ãã©ãªã®äœæã«ã€ããŠã
ãããã®ã¿ã¹ã¯ã®å€ãã¯éçºè ã§ããå人ã«ãã£ãŠè¡ãããŠãããããéçºã«è²¢ç®ã§ããæéã¯ãããã®ä»ã®ã¿ã¹ã¯ã«è²»ããããŸãã
ããªããéçºè ã§ãããããªãã®å¿çããæéããªããã§ããå Žåãããããã®åé¡ãæªè§£æ±ºã®ãŸãŸã§ããæ£ç¢ºãªçç±ã§ãã æ©èœãå®äºãããã©ããã¯100ïŒ èªå次第ãªã®ã§ãã誰ãããå®äºããŠããªãçç±ãå°ããã®ã¯åœ¹ã«ç«ã¡ãŸããã _ããªãã¯ãã®èª°ãã§ãã_ããªãããã®ãããžã§ã¯ãã«åå ããå Žåãç§ã¯ãããèµ·ããããšã_ä¿èšŒããŸã_ã Webäžã§æã人æ°ã®ãããªãŒãã³ãœãŒã¹ããŒã«ã®1ã€ã«åå ããããšãã§ããŸãã ããªãã¯...æ°å人ã®ç掻ã«éããããããããšãã§ããŸããïŒ æ°åäžäººïŒ æ°çŸäžïŒ ãŸããå¯æ¬¡çãªå©ç¹ãšããŠããæ°ã«å ¥ãã®æ©èœãåŸã§ã§ã¯ãªãæ©ãçºçããããã«ããããšãã§ããŸãã
ããªããèµ·ããããã«ããã®ãŸãã¯ä»»æã®æ©èœãå¿ èŠãªå Žåã¯ããããå®çŸããŸãã ãããããé¡ãããŸãã ç§ãã¡ã¯ããªããšäžç·ã«åãããã§ãïŒ ãã®ã³ãã¥ããã£ã倧ãããªãã»ã©ãããå°ãªããã®ãã©ãã©ãè¯ããªã£ãŠãããŸãïŒ
ãããŠãèããŠãã ãããæã ã人ã ãæ¬åœã«è²¢ç®ããæéããŸã£ãããªãã®ã«ãããã§ãç¹å®ã®æ©èœãå®çŸããããšæ¬åœã«æãã§ããããšãæè¬ããŸãã ããã¯ããã§ãã ããªãããã®ã·ããªãªã«ãããªããããªãã¯ããªããå©ããããã«åœŒãã®æéïŒãããŠæã«ã¯ãéïŒãå¯ä»ãã人ã ãžã®å ±æãšæè¬ãç®æããŠãããšç§ã¯èšããŸãããããŠç§ã¯Lessã³ãã¥ããã£ã®ä»ã®äººã ãæåãå°œãããšç¢ºä¿¡ããŠããŸã圌ããã§ããããã«ããããç¶ããŸãã
å¿ããã
Less.jsã³ã¢ããŒã ã®ã¡ã³ããŒãMatthew Dean
ç§ã¯ãã§ã«èªåã®ãããžã§ã¯ãããµããŒãããŠããã圌ãã®æ©èœèŠæ±ã«è³ãåŸããŠããŸãã æ£çŽãªãšãããLess.jsã³ã¢ãæãäžããæéããããŸããã
sassãã¬ãŒã¹ãã«ããŒïŒãŸãã¯ããµã€ã¬ã³ãã¯ã©ã¹ãïŒã®ãµããŒãã®ããã«ããã«æ¥ã人ã¯ããã®ã³ã¡ã³ããèªãã§ãã ããã ïŒïŒ1851ãšãã®ãããªã¯ã©ã¹ããåç §ããã¡ã€ã«ã«ãªãããïŒãããŸã§å°éããããšã¯ã§ããŸããããäœããªãããã¯ãŸãã§ãã
æãåèã«ãªãã³ã¡ã³ã
å ¬å ±ãµãŒãã¹ã®æ¡å
ãã€ã§ããã«ãªã¯ãšã¹ããéä¿¡ããããéçºè ãšååããŠãã«ãªã¯ãšã¹ããååŸã§ããŸãããã®æ©èœãçµ±åãããå¯èœæ§ãéåžžã«é«ããªããŸããLess.jsã©ã€ãã©ãªã«ã¯ããã®ã¹ã¬ããã®äººã ã®ãããªå人ããã®ããå®æçãªæçš¿ãå¿ èŠã§ãã ã ããã¯äžäººã®è²¬ä»»ã§ã¯ãããŸããã ããã¯ããã®ã¹ã¬ãããèŠããããã®æ©èœãå¿ èŠãšãããããå®çŸããããã«æéããããäžäººã®å人ã«å®å šã«äŸåããŠããŸãã
éçºè ã§ã¯ãªããšããåçã®å Žåãæ°æ©èœã«å¿ èŠãªããã¥ã¡ã³ããæäŸãããããŠã§ããµã€ãã§ãµããŒããèšèšãããããã¹ããå®è¡ãããããã£ãŒãããã¯ãæäŸããããããªã©ãéçºä»¥å€ã®åœ¹å²ã§ãã®ãããžã§ã¯ãããµããŒãã§ããæ¹æ³ã¯ä»ã«ããããããããŸããåé¡ããããžã§ã¯ã管çãStack Overflowã«é¢ãã質åãžã®åçãããã°æçš¿ã®äœæãLessã«é¢ãããã€ãŒããCSSããã³Webã³ãã¥ããã£ãžã®è²¢ç®ãLessã©ã€ãã©ãªã®äœæã«ã€ããŠã
ãããã®ã¿ã¹ã¯ã®å€ãã¯éçºè ã§ããå人ã«ãã£ãŠè¡ãããŠãããããéçºã«è²¢ç®ã§ããæéã¯ãããã®ä»ã®ã¿ã¹ã¯ã«è²»ããããŸãã
ããªããéçºè ã§ãããããªãã®å¿çããæéããªããã§ããå Žåãããããã®åé¡ãæªè§£æ±ºã®ãŸãŸã§ããæ£ç¢ºãªçç±ã§ãã æ©èœãå®äºãããã©ããã¯100ïŒ èªå次第ãªã®ã§ãã誰ãããå®äºããŠããªãçç±ãå°ããã®ã¯åœ¹ã«ç«ã¡ãŸããã _ããªãã¯ãã®èª°ãã§ãã_ããªãããã®ãããžã§ã¯ãã«åå ããå Žåãç§ã¯ãããèµ·ããããšã_ä¿èšŒããŸã_ã Webäžã§æã人æ°ã®ãããªãŒãã³ãœãŒã¹ããŒã«ã®1ã€ã«åå ããããšãã§ããŸãã ããªãã¯...æ°å人ã®ç掻ã«éããããããããšãã§ããŸããïŒ æ°åäžäººïŒ æ°çŸäžïŒ ãŸããå¯æ¬¡çãªå©ç¹ãšããŠããæ°ã«å ¥ãã®æ©èœãåŸã§ã§ã¯ãªãæ©ãçºçããããã«ããããšãã§ããŸãã
ããªããèµ·ããããã«ããã®ãŸãã¯ä»»æã®æ©èœãå¿ èŠãªå Žåã¯ããããå®çŸããŸãã ãããããé¡ãããŸãã ç§ãã¡ã¯ããªããšäžç·ã«åãããã§ãïŒ ãã®ã³ãã¥ããã£ã倧ãããªãã»ã©ãããå°ãªããã®ãã©ãã©ãè¯ããªã£ãŠãããŸãïŒ
ãããŠãèããŠãã ãããæã ã人ã ãæ¬åœã«è²¢ç®ããæéããŸã£ãããªãã®ã«ãããã§ãç¹å®ã®æ©èœãå®çŸããããšæ¬åœã«æãã§ããããšãæè¬ããŸãã ããã¯ããã§ãã ããªãããã®ã·ããªãªã«ãããªããããªãã¯ããªããå©ããããã«åœŒãã®æéïŒãããŠæã«ã¯ãéïŒãå¯ä»ãã人ã ãžã®å ±æãšæè¬ãç®æããŠãããšç§ã¯èšããŸãããããŠç§ã¯Lessã³ãã¥ããã£ã®ä»ã®äººã ãæåãå°œãããšç¢ºä¿¡ããŠããŸã圌ããã§ããããã«ããããç¶ããŸãã
å¿ããã
Less.jsã³ã¢ããŒã ã®ã¡ã³ããŒãMatthew Dean