ã¡ãã£ã¢ã¯ãšãªã®ãããªã³ã°ã¯çŽ æŽãããã§ããïŒ
header {
color: green;
<strong i="6">@media</strong> only screen (max-width: 500px) { color: red; }
}
footer {
color: green;
<strong i="7">@media</strong> only screen (max-width: 500px) { color: red; }
}
Lessã¯ãlessãã¡ã€ã«ã§å®£èšããããã³ã«mediaqueryã»ã¬ã¯ã¿ãŒãç¹°ãè¿ããããããªãè¥å€§åããã³ãŒããçæããŸãã
header {
color: green;
}
<strong i="11">@media</strong> only screen (max-width: 500px) {
header {
color: red;
}
}
footer {
color: green;
}
<strong i="12">@media</strong> only screen (max-width: 500px) {
footer {
color: red;
}
}
ã¡ãã£ã¢ã¯ãšãªãåäžã§ããå Žåãããããã°ã«ãŒãåã§ãããšäŸ¿å©ã§ãã
header {
color: green;
}
footer {
color: green;
}
<strong i="16">@media</strong> only screen (max-width: 500px) {
header {
color: red;
}
footer {
color: red;
}
}
ã¹ããŒãã¡ã³ããåç·šæããããšã§ãæå³ãå€ããå¯èœæ§ãªãã«ãã©ã®ããã«ãããè¡ãã®ã§ããïŒ
æå³ãå€ããããšã¯ãªããšæããŸãã ããã¯ãéåžžã®åé·ã¿ã°ãæããããã®ãšãŸã£ããåãã§ãã äŸãã°ïŒ
body {
background: white;
}
body {
padding: 0;
margin: 0;
}
次ã®ããã«æããããŸããŸãïŒ
body {
background: white;
padding: 0;
margin: 0;
}
ã¡ãã£ã¢ã¯ãšãªã¯ãéåžžã®èŠçŽ ã»ã¬ã¯ã¿ãŒã®äžã«ããã³ã³ãããŒã«ã¬ã€ã€ãŒãšããŠæ©èœããç¹å¥ãªãããã¬ãã«ã»ã¬ã¯ã¿ãŒã§ãããããããã¯ããã«åœãŠã¯ãŸããŸãã åºæ¬çã«ããããã¯åäžã®æå³ããæããããã¡ã€ã«å ã®æ®ãã®cssã®åœ±é¿ãåããŸããã
ããã«ãããã«ã¡ãã£ã¢ã¯ãšãªã®é åºããã§ã«ç¶æããŠããããã§ã¯ãªãããŸã£ããåãã¯ãšãªã«å¯ŸããŠå€ãã®åé·ã»ã¬ã¯ã¿ãŒãäœæããã ãã§ãã ãããããããã¡ãªã³ã°ããŠãåŠçã®æåŸã«åäžã®ã¯ãšãªã«æžã蟌ãããšãã§ããã°ãããã¯ã¯ããã«ãã£ããããããå°ããªcssåºåãçæããŸãã
ã¡ãã£ã¢ã¯ãšãªå
ã®ã»ã¬ã¯ã¿ãŒã®è€éãã«é¢ããã«ãŒã«ã¯äœã§ããïŒ ãã
ã¯ãšãªã¯è€éããå¢ããé åºãäžæžãããŸããïŒ äœãææã§ããŸãã
ã¹ããã¯ïŒ
åºæ¬çã«ãã¯ãã ã¡ãã£ã¢ã»ã¬ã¯ã¿ãŒã¯ãéåžžã®ã¹ã¿ã€ã«ã«ãŒã«ãã©ããã¢ã©ãŠã³ãããã¯ãšãªã®æ¡ä»¶ãæºããããå Žåã«ã®ã¿é©çšãããIFã¹ããŒãã¡ã³ãã®ãããªãã®ã§ãã ããšãã°ããã©ãŠã¶ã®å¹ ãç¹å®ã®ãã¯ã»ã«æ°æªæºã®å Žåãã¯ãšãªå ã®ã«ãŒã«ããªã³ã«ãªããæ¢åã®ã«ãŒã«ãäžæžããããŸãã
ãããã£ãŠããããããåäžã®ã¹ã¿ã€ã«ãæã€å€æ°ã®åäžã®ã¯ãšãªãæã€ããšã¯ããã¹ãŠã®ã¹ã¿ã€ã«ãå«ãŸãã1ã€ã®ã¯ãšãªãšæ©èœçã«åäžã«ãªããŸãã ã¯ãšãªãåãã§ããéãã
ãããMozillaã®ããã¥ã¡ã³ãã§ã
ç§ãæå³ããã®ã¯ããã®äŸã§ããdivãèµ€ã«ãªããŸããã€ãŸããã¡ãã£ã¢ã¯ãšãªïŒäž¡æ¹ãšãç»é¢ïŒã䞊ã¹æ¿ãããšãcssã®æå³ãå€ãããŸãã
<strong i="6">@media</strong> screen {
div {
background-color: green;
}
}
div {
background-color: red;
}
<strong i="7">@media</strong> screen {
div.pink {
background-color: pink;
}
}
ã«ãŒã«ã»ãããäºãã«çŽæ¥ç¶ãå Žåã«ã®ã¿çµã¿åãããå¿ èŠããããŸãã
ããã¯@Soviutã®å ã®äŸã«ã¯å«ãŸããŠããããIMOã§ã®äœ¿çšãå¶éãããŠãããã®æ©èœãªã¯ãšã¹ããäœæããŠããŸã
åæããŸããããããããã«ã¡ãã£ã¢ã¯ãšãªã«ã©ã®ããã«é©çšããããããããŸãããïŒ ããã«åãããã¯ãšãªã¯ãæ§æäžã®ç³è¡£æ§æã®ãããã§ããããšãå¿ããªãã§ãã ããã éåžžãå¥ã®ã»ã¬ã¯ã¿ãŒå ã«ã¡ãã£ã¢ã¯ãšãªãåã蟌ãããšã¯ã§ããŸããã ãããã£ãŠããããªã³ã°ã¯ãšãªã«ééãããšãã¯ãã€ã§ããå°çããé åºã§åäžã®ãããªã³ã°ã¯ãšãªãšã°ã«ãŒãåããããšãå®å šã«æ³å®ã§ããŸãã
çµã¿åãããããšãã§ãã2ã€ã®ããã«ã¡ãã£ã¢ã¯ãšãªãé£ãåã£ãŠããå Žåããããããå°ãªãããããšã¯éåžžã«æçœã ãšæããŸããã¡ãã£ã¢ã¯ãšãªãçµã¿åãããããšãå®å šã§ããããããçã«ããªã£ãŠããå®éã®äŸãæããŠãã ãããããããããå°ãªãä¿ã€ããã«ïŒ
網èç»åãåŠçããå Žåãè€éãªã¡ãã£ã¢ã¯ãšãªãããã¯ã¹ã€ã³å ã«ã©ããããã¹ãã©ã€ãããã¯ã¹ã€ã³ãäœæããã®ã§ããããããããšããã«ãããŸã...åºåCSSãå¢å ããŸãããããä¿å®ãããããªããŸãã
ããšãã°ãã¹ãã©ã€ãããã¯ã¹ã€ã³ã¯æ¬¡ã®ãšããã§ãã
.sprite(<strong i="7">@spritePath</strong>, <strong i="8">@hdpiPath</strong>, <strong i="9">@x</strong>, <strong i="10">@y</strong>, <strong i="11">@size</strong>: auto) {
background-image: url(@spritePath);
background-repeat: no-repeat;
background-position: -1 * <strong i="12">@x</strong> -1 * @y; // Negativize the value
.background-size(@size);
<strong i="13">@media</strong> <strong i="14">@mediaRetina</strong> {
background-image: url(@hdpiPath);
}
}
@mediaRetina
ã¯æ¬¡ã®ãšããã§ãã
<strong i="19">@mediaRetina</strong>: ~"only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 4/3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 124dpi), only screen and (min-resolution: 1.3dppx)";
次ã«ã以äžã®ããã«ãåã¹ãã©ã€ãèŠçŽ ãã©ããããããã®ããã¯ã¹ã€ã³ãããã«äœæããŸãã
#sprite
{
.header-logo()
{
.sprite(<strong i="23">@globalSpritePath</strong>, <strong i="24">@global2XSpritePath</strong>, 22px, 0, 384px 288px);
width: 94px;
height: 59px;
}
}
ãããŠã次ã®ãããªä»ã®LESSãã¡ã€ã«ã§äœ¿çšããŸãã
h1 {
width: 94px;
height: 59px;
a {
#sprite > .header-logo();
}
}
ãã®å ŽåãçæãããCSSã¯æ¬¡ã®ããã«ãªããŸãã
h1 a {
background-image: url("/images/sprite-global.png");
background-repeat: no-repeat;
background-position: -22px 0;
-webkit-background-size: 384px 288px;
-moz-background-size: 384px 288px;
-o-background-size: 384px 288px;
background-size: 384px 288px;
width: 94px;
height: 59px;
}
<strong i="31">@media</strong> only screen and (-webkit-min-device-pixel-ratio: 1.3),
only screen and (min--moz-device-pixel-ratio: 1.3),
only screen and (-o-min-device-pixel-ratio: 4/3),
only screen and (min-device-pixel-ratio: 1.3),
only screen and (min-resolution: 124dpi),
only screen and (min-resolution: 1.3dppx) {
h1 a {
background-image: url("/images/[email protected]");
}
}
ããã§ããã®ã±ãŒã¹ãäœåºŠãç¹°ãè¿ãããããšãæ³åããŠãã ããã ã°ã«ãŒãåããã«ããã®äœåãªéã¿ã軜æžããå¯äžã®æ¹æ³ã¯ããã¹ãŠã®ç¶²èã¹ã¿ã€ã«ãå°çšã®LESSãã¡ã€ã«ã«ç§»åããããšã§ããããã¯ãå°ããªãµã€ãã§ã¯æ©èœããå¯èœæ§ããããŸããã倧ããªãµã€ãã§ã¯éçŸå®çã§ãã
ããã¯ãç¹ã«ã¢ãžã¥ãŒã«ãå€æ°ãã倧èŠæš¡ãªãµã€ãïŒç§ãã¡ã®ãããªïŒãããå Žåã«ãããããã°ã«ãŒãåããŠåé¢ããŠããããšãçã«ããªã£ãŠããå Žæã§ãã
ãã ããã¹ã¿ã€ã«ã®ãªãŒããŒã©ã€ãã«ã€ããŠããªããäœãæå³ããã®ãã¯ç¥ã£ãŠããŸããããã¶ã€ããŒãæãå¯èœæ§ã®ããã«ã¹ã±ãŒããæ··ä¹±ãããããšãªãããã®æ£ç¢ºãªæ©èœãå®å šã«å®è£ ã§ãããã©ããã¯ããããŸããã
ç§ã«ã¯ãããã¯ãã»ã¯ã·ã§ã³ãïŒãã¬ãŒã¹ãã«ããŒïŒãå®çŸ©ããŠãããèšè¿°ãããŠããé åºã«é¢ä¿ãªããããã«é 眮ããã¹ã¿ã€ã«ãå®çŸ©ã§ããããã«èãããŸãã ããã¯ãµãŒããŒåŽã®ãã³ãã¬ãŒãã§ã¯ããªãäžè¬çã§ãããµãŒããŒåŽã®ãã³ãã¬ãŒãã§ã¯ããã¹ã¯ãªããããŸãã¯ãããããã»ã¯ã·ã§ã³ããããããŒãžãèªã¿èŸŒãŸãããšãã«ããŒãžã«ã³ã³ãã³ããæ¿å ¥ã§ããŸãã
ãããã£ãŠãåºæ¬çã«LESSãã¡ã€ã«ã§ãããå®è¡ã§ããããã«ããããšæããŸãã
<strong i="39">@media</strong> { // retina query
@renderSection("retina")
}
// in another file
h1 {
<strong i="40">@section</strong> retina {
// retina styles
}
}
@section
ã¯ãã³ã³ãã€ã«æã«çŸåšã®ã»ã¬ã¯ã¿ãŒã«çœ®ãæããããŸãã
ãããã£ãŠãç§ã®ã¹ãã©ã€ãããã¯ã¹ã€ã³ã¯æ¬¡ã®ããã«ãªããŸãã
.sprite(<strong i="46">@spritePath</strong>, <strong i="47">@hdpiPath</strong>, <strong i="48">@x</strong>, <strong i="49">@y</strong>, <strong i="50">@size</strong>: auto) {
background-image: url(@spritePath);
background-repeat: no-repeat;
background-position: -1 * <strong i="51">@x</strong> -1 * @y; // Negativize the value
.background-size(@size);
<strong i="52">@section</strong> retina {
background-image: url(@hdpiPath);
}
}
ãã®æ§æïŒãŸãã¯å®è£ ïŒã§ããå¿ èŠã¯ãããŸãããASP.NETRazoræ§æã«åºã¥ããŠããŸããããã¯ãç§ãããç¥ã£ãŠããæ§æã§ãããæ§æãæ°ã«å ¥ã£ãŠããããã§ãã
ãã®è¯ãäŸ..ãããŠè¯ããŠãŒã¹ã±ãŒã¹..ããªãã¯ããããšãã§ããŸã
@media-section
ïŒãŸãã¯media-groupïŒããã«ãããã¡ãã£ã¢ãã°ã«ãŒãåããããã«æ瀺ãããªããªããŸãïŒãªãã·ã§ã³ã§ãã¡ãã£ã¢ã¯ãšãªã«ã¡ãã£ã¢ããã§ã«ååšããå Žåã¯ãã«ãŒã«ãã©ãã«ã§ã移åã§ããããã«ããŒãžããŸãïŒãã©ãããæå³ã§ããïŒ
ç§ã¯ãããè¯ãèãã ãšæããããªããŸãïŒãããŠå®è£ ããã®ã¯ããã»ã©é£ãããããŸããïŒ
@ media-groupã®å Žåã¯+1
+1 @ media-group
ãã1ã€ã®ãªãã·ã§ã³ã¯ãtrue / falseãã°ã«ãŒãåããããã®ã°ããŒãã«ãªãã·ã§ã³ãæã€ããšã§ãã
ããŒããããã¯ããããè¯ãèãã§ãã éžæçãªã°ã«ãŒãåãå¿ èŠã«ãªãå Žåã¯ãããŸããïŒ
ã»ãšãã©ã®å Žåã人ã ã¯ã¡ãã£ã¢ã¯ãšãªããã£ãšã³ã³ãã¯ãã«ããããšæã£ãŠããã®ã§ãä»ã®ãšããã°ããŒãã«ãªãã·ã§ã³ãéãããããŸããã éžæçãªã°ã«ãŒãåãå¿ èŠã ãšäž»åŒµãã人ãããå Žåã¯ãåŸã§æ°ããããŒã¯ãŒããè¿œå ã§ããŸãã
ã°ããŒãã«ã°ã«ãŒãåãªãã·ã§ã³ã®å Žåã¯+1ã
ã¯ã.. @import
ã§ãè€æ°ã®ããŒã¯ãŒããè¿œå ããããšã¯æ¹æ³ã§ã¯ãªãããªãã·ã§ã³ãè¿œå ããããšã¯ããŸãè°è«ã®äœå°ããªãããšãããã£ãããã§ãã
ãªãã·ã§ã³ãè¿œå ãããšãããã«åœ¹ç«ã¡ãäœæãããå Žåã«éžæçãªã€ã³ããŒãã䜿çšããŠãªãŒããŒã©ã€ããšããŠå ±åã§ãããããè¿œå ãããšæããŸãã
ããã«ã¡ã¯ãç§ã¯ãã®åé¡ãèŠãŠãã¡ãã£ã¢ã¯ãšãªãã°ã«ãŒãåããå¿ èŠããããšãã«äœæããå°ããªã¢ããªãå ±æããããšæããŸããã ããã¯å®æããã¢ããªã§ã¯ãããŸããã å°æ¥ã®ããŒã«ã®ããã®ããã€ãã®ç 究ã®ãããªãã®ã§ãã ã§ããããç§ã¯ããªãã«ãã®èãã瀺ããããšæããŸãããªããªããããã¯æ¬åœã«å®è¡ãããªããã°ãªããªããã®ã ãšæãããã§ãã ïŒãã°ããã®ä»ã®åé¡ãããå¯èœæ§ããããŸãïŒããTwitterããŒãã¹ãã©ãããå«ãæåŸã®ãããžã§ã¯ãã§ãã¹ãããŸããããæ£ããåäœããŸãã ïŒã«ãŒã«ã®é åºã«åé¡ã¯ãããŸããïŒç§ã«ç¥ãããŠãã ãã;ïŒ
ããã«ã¡ã¯ïŒ
誰ããããã«å²ãåœãŠãããŠããŸããïŒ ããã¯ãå°ãªããã¡ã€ã«ã§äœæãããšãã«cssãã¡ã€ã«ãæžããã®ã«éåžžã«åœ¹ç«ã€å¯èœæ§ãããåªããæ©èœã§ãã ãã®ããã«ããŠãéçºè ã¯ããããã¹ãŠã®@mqãç°¡åã«æäœã§ããããã«ãªããŸãã
@AoDev mqhelperã¯ééããªãæ£ããæ¹åãžã®äžæ©ã§ãããä»ã®ãšããCSS
ã¯ãããã ããç§ã®ã¢ããªã®ç®æšã¯ããå®éã®ããŒã«ãã®äžéšã«ãªãããšã§ã¯ãããŸããã ããã§å€ãã®äººãã¡ãã£ã¢ã¯ãšãªã®ã°ã«ãŒãåãåé¡ã«ãªãã®ã§ã¯ãªãããšèãããããå¯èœã§ããããšã瀺ãããã£ãã®ãèŠãŸããã ã³ãŒãã¯ãã¢ã€ãã¢ãæã¡ããã®äžéšã䜿çšãããå Žåãããå°ãªãéçºè ã®ããã«ãããŸãã ããããå¿ èŠã«å¿ããŠãããããå®éã®ãã¢ãžã¥ãŒã«ã«ããããšãã§ããŸã:)
ç§ã¯ãã§ã«ããã管çããŸãããããã¯çŽ æŽãããäœåã§ããããããšãã
@ Soviut @ lukeapageéžæçãªã°ã«ãŒãåãæãçã«
<strong i="8">@tablet</strong>: (max-width: 979px);
.a {
color: yellow;
<strong i="9">@media</strong> <strong i="10">@tablet</strong> group {
color: red;
}
}
.b {
background: black;
<strong i="11">@media</strong> <strong i="12">@tablet</strong> group {
background: white;
}
}
//output
.a { color: yellow; }
.b { background: black; }
<strong i="13">@media</strong> (max-width: 979px) {
.a { color: red; }
.b { background: white; }
}
ããã«ã¡ã¯ãã¡ãã£ã¢ã¯ãšãªã®ã°ã«ãŒãåã¯æ¬åœã«çŽ æŽãããè¿œå ã«ãªãã§ãããã ãããŸã§ã®éãç§ã¯ãã®ã¢ã€ãã¢ãæãã€ããŸããããããããã£ã®éè€ãé¿ããããã«ãä»åŸã®:extend
æ©èœã§äœ¿çšã§ãããã©ããçåã«æããŸãã
// Define the media queries
<strong i="7">@step1</strong>: ~"only screen and (max-width: 960px)";
<strong i="8">@step2</strong>: ~"only screen and (min-width: 961px)";
// Default empty mixins
.step1() {}
.step2() {}
// Custom styles
.test { color: blue; }
// Change the style in the media queries
.step1() {
.test { color: red; }
}
.step2() {
.test { color: green; }
}
// Finally render the media queries
<strong i="9">@media</strong> <strong i="10">@step1</strong> { .step1(); }
<strong i="11">@media</strong> <strong i="12">@step2</strong> { .step2(); }
@AoDevã«ãã£ãŠäœæãããããŒã«ã¯ãããªãŒã«ãªã¢ããã·ã³ã°ãã¢ãããŒããå®éã«éèŠã§ã¯ãªãããšã瀺ãã®ã«æé©ã§ãã ã¡ãã£ã¢ã¯ãšãªã®ã°ã«ãŒãåã¯ãã¹ã¿ã€ã«ã®ã°ã«ãŒãå/䞊ã¹æ¿ããšåãå¯äœçšãåããŸããã ãªãŒã«ãªã¢ããã·ã³ã°ã¡ãœããã«æ¬ é¥ãããããšã瀺ãå®éã®äŸïŒ @AoDevã«ãã£ãŠäœæãããããŒã«ã«å¯ŸããŠãã¹ãæžã¿ïŒã誰ããæäŸã§ããŸããïŒ
@kamranayubã¯ãç§ãæ±ã£ãŠããæ£ç¢ºãªç¶æ³ãå®å šã«èª¬æããŸããã å人çã«ã¯ããã®å®è£ ã®äœããã®åœ¢ãèŠãããšæããŸãã @DesignByOnyx ã以äžã®ãã¹ãã³ãŒãã¯@AoDevã®ããŒã«ã§æ£ããã³ã³ãã€ã«ãããŸããã ç§ã¯ãkamranayubãè¿°ã¹ããããªãã®çš®ã®ã¹ã¿ã€ãªã³ã°ãããããšæããŸãã 倧èŠæš¡ãªãµã€ãã§è€æ°ã®å°ãªããã¡ã€ã«ãåŠçããå Žåã¯ãã¯ããã«ã¯ãªãŒã³ã§ãã
.footer ul {
margin: 10px;
<strong i="9">@media</strong> @layout-tablet, @layout-full {
font-size: 13px;
font-weight: bold;
}
<strong i="10">@media</strong> @layout-mobile {
font-size: 10px;
padding-left: 10px;
}
li {
background: black;
color: white;
padding: 10px;
<strong i="11">@media</strong> @layout-tablet, @layout-full { .border-radius(@radius) }
<strong i="12">@media</strong> @layout-mobile { .border-radius(@radius-mobile) }
}
}
䜿çšããæ§æãå°ãªããããæ©èœããŸããã ããã¯åãããšãæå³ããŸã
CSSã䜿çšããŸãã
2013幎7æ2æ¥ååŸ9æ19åããPMacomã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
@kamranayub https://github.com/kamranayubã¯ãæ£ç¢ºãªèª¬æãå®å šã«èª¬æããŸãã
ç§ãæ±ã£ãŠããç¶æ³ã å人çã«ã¯ãäœããã®åœ¢ãèŠããã§ã
ãã®å®è£ ã®ã @DesignByOnyx https://github.com/DesignByOnyx ã
以äžã®ãã¹ãã³ãŒãã¯ã @ AoDevhttpsïŒ//github.com/AoDevã§æ£ããã³ã³ãã€ã«ãããŸããã
éå ·ã ç§ã¯ãkamranayubãè¿°ã¹ããããªãã®çš®ã®ã¹ã¿ã€ãªã³ã°ãããããšæããŸãã
倧èŠæš¡ãªãµã€ãã§è€æ°ã®å°ãªããã¡ã€ã«ãåŠçããå Žåã¯ãã¯ããã«ã¯ãªãŒã³ã§ãã.footer ul {
ããŒãžã³ïŒ10px;
@media @ layout-tabletã@ layout-full {
ãã©ã³ããµã€ãºïŒ13px;
ãã©ã³ãã®å€ªãïŒå€ªå;
}
@media @ layout-mobile {
ãã©ã³ããµã€ãºïŒ10px;
ããã£ã³ã°-å·ŠïŒ10px;
}li {
background: black; color: white; padding: 10px; <strong i="34">@media</strong> @layout-tablet, @layout-full { .border-radius(@radius) } <strong i="35">@media</strong> @layout-mobile { .border-radius(@radius-mobile) }
}
}â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/less/less.js/issues/950#issuecomment-20369038ã§è¡šç€ºããŠãã ãã
ã
LESSãåŠçãããåŸã @ AoDevã®ããŒã«ã§äœ¿çšãããããžãã¯ãå®è¡ãããšããææ¡ã¯ãããŸããïŒ ãããé ã®ãŠã£ãºãããæãã§ããããšã§ã¯ãªãå Žåã¯èããããŸããã
LESSãåŠçãããåŸã @ AoDevã®ããŒã«ã§äœ¿çšãããããžãã¯ãå®è¡ãããšããææ¡ã¯ãããŸããïŒ ãããé ã®ãŠã£ãºãããæãã§ããããšã§ã¯ãªãå Žåã¯èããããŸããã
ããã¯æ«å®çãªãªãã·ã§ã³ã ãšæããŸãã @ AoDevã®ãœãªã¥ãŒã·ã§ã³ãgrunt.jsã¢ãžã¥ãŒã«ã§ã©ããããŠãLESSãåŠçãããåŸã«èªåçã«å®è¡ã§ããããã«ããããšãæ€èšããŸãïŒããã¯ãååŠçãè¡ãããŠãããšããåæã«åºã¥ããŠããŸãïŒãªã³ã¶ãã©ã€ã§ã¯ãªããå±éåã«å®è¡ïŒ
äžå¹³ãèšãã¿ã¹ã¯ã¯ãæ«å®çã«ã¯ç¢ºãã«çŽ æŽããããçã®CSSã«æ®éçã«åœ¹ç«ã¡ãŸãã ãã ãã @ media magic LESSããã§ã«å®è¡ããŠããéãèæ ®ãããšãã°ã«ãŒãåãªãã·ã§ã³ã¯è«ççã§ããããã«æãããŸãã
ç¹°ãè¿ãã«ãªããŸãããGruntã¿ã¹ã¯ã¯ãã¢ãã€ã«ã¹ã¿ã€ã«ã·ãŒãããã®å Žã§ããŒãããã人ã®ããã«ãã¡ãã£ã¢ã¯ãšãªãç¬èªã®ãã¡ã€ã«ã«å®å šã«åé¢ã§ããå¯èœæ§ããããšè¿°ã¹ãŸããã
ããªããããã«ã€ããŠèšåããã®ã§ãã¹ã¿ã€ã«ã·ãŒããåé¢ããããšã¯æã£ãŠãã䟿å©ãªãªãã·ã§ã³ã§ã-çŸåšãããªãã¯ãããããããã«ããªãã®ãœãŒã¹ãã¡ã€ã«ãç¹å¥ã«æ§ç¯ããå¿ èŠãããã§ãããã
ãããããã¡ãã£ã¢ã¯ãšãªãã°ã«ãŒãåãããªãã·ã§ã³ã§åå²ããããã®åå¥ã®ã¡ãã£ã¢ã¯ãšãªãªããã£ãã€ã¶ãŒããŒã«ã®äœå°ããããŸããïŒ
絶察ã CSSOãããããã§ã«è¡ã£ãŠãããã©ããã¯ããããŸãããç§ãç¥ã£ãŠããå¯äžã®CSSãªã©ã€ã¿ãŒã§ãããGruntã¿ã¹ã¯ãé¢é£ä»ããããŠããŸãã ãã ããã¡ãã£ã¢ã¯ãšãªãªã©ãåå¥ã®ãã¡ã€ã«ã«åå²ããããšã¯ã§ããŸããã åæ§ã«ããã®æžãæãã¯ãDOMæ§é ãšã¯å¯Ÿç §çã«ãåäžã®ã»ã¬ã¯ã¿ãŒãšå±æ§ã«åºã¥ããéåžžã«åºæ¬çãªãã®ã§ãã
Mqhelperã¯ãã§ã«åã
ã®ã¡ãã£ã¢ã¯ãšãªãè¿ããŸãgithubããã§ãã¯ããŠãã ãã
詳现ã«ã€ããŠã¯ãããŒãžãã芧ãã ããã åé¢ãããcssãã¡ã€ã«ã¯ããããæ§ç¯ã§ããŸãã
2013幎7æ5æ¥åå10:08ããSoviutã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
絶察ã å¯äžã®CSSã§ããCSSOããã§ã«ãããè¡ã£ãŠãããã©ããã¯ããããŸãã
ç§ãç¥ã£ãŠãããªã©ã€ã¿ãŒã«ã¯ãGruntã¿ã¹ã¯ãé¢é£ä»ããããŠããŸãã ããã§ã
ã¡ãã£ã¢ã¯ãšãªãªã©ãåå¥ã®ãã¡ã€ã«ã«åå²ããããšã¯ã§ããŸããã åæ§ã«ã
ãã®æžãæãã¯éåžžã«åºæ¬çã§ãããåäžã®ã»ã¬ã¯ã¿ãŒãšå±æ§ã«åºã¥ããŠããŸãã
DOMæ§é ãšã¯å¯Ÿç §çã§ããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/less/less.js/issues/950#issuecomment-20505834ã§è¡šç€ºããŠãã ãã
ã
ããã»ã©é·ãã¯ãªããããã»ã©é£ãããªããã®ã®ããã«èãããŸã
ïŒã°ã«ãŒãåãªãã·ã§ã³ãšåå¥ã®ãã¡ã€ã«ãªãã·ã§ã³ã®äž¡æ¹ïŒ
å®è£
ãããç§ã¯ããªãã«å©ããäžããããšãã§ããŸã...
ãããå®è£
ããããã«ãããçš®ã®ãã»ã¯ã·ã§ã³ããŸãã¯ãã°ã«ãŒããã®ã¢ã€ãã¢ã«ç§»è¡ããããšãæããšã©ãŸãããããããŸããïŒããã¯è¯ãããšã ãšæããŸãïŒã ãã ãã誰ããéåžžã®cssçšã«å®çŸ©ãããŠããã³ãŒãã§@media
ããããã£æ
å ±ãå®çŸ©ããæ©èœãåžæããŠããããã³ãŒãã®ä»ã®å Žæã§åäžã®@media
ã¯ãšãªã«ã°ã«ãŒãåãããŠããå Žåã¯ã LESSæ©èœã§çŸåšå®è¡ã§ããå°ãªããšã2ã€ã®æ¹æ³ã§ãããé
眮ãé©åã«å¶åŸ¡ã§ããŸãããææ¡ããããœãªã¥ãŒã·ã§ã³ãå¿
èŠãšãã以äžã®è¿œå ã®ã³ãŒãã£ã³ã°ã䜿çšããããšã¯ç¢ºãã§ãïŒãããã£ãŠãå¿
ãäœæ¥ãç¶ããŠãã ããïŒã æ€èšïŒ
<strong i="8">@media</strong> screen {
.my-class > .mediaScreen();
#screenSpace1(screen);
#screenSpace2(screen);
}
//technique #1 only works for a top level class or id that can act as a namespace
//and would not handle a deep nesting very well
.my-class {
regular-property: value;
.mediaScreen(<strong i="9">@selectorString</strong>: ~'.my-class') { //full path needs repeat here if deeply nested
@{selectorString} {
media-screen-property: value;
}
}
}
//technique #2 allows for tag selectors and easier deeper nesting
#screenSpace1(<strong i="10">@place</strong>: noMedia) {
div > ul {
.setProps() when (<strong i="11">@place</strong> = noMedia) {
regular-property: value;
}
.setProps() when (<strong i="12">@place</strong> = screen) {
screen-property: value;
}
.setProps();
li {
.setProps() when (<strong i="13">@place</strong> = noMedia) {
regular-property: value;
&:hover { regular-property: value; }
}
.setProps() when (<strong i="14">@place</strong> = screen) {
screen-property: value;
&:hover { screen-property: value; }
}
.setProps();
}
}
}
#screenSpace1();
.more-classes-not-needing-media {property: value;}
#screenSpace2(<strong i="15">@place</strong>: noMedia) {
.someClass {
.setProps() when (<strong i="16">@place</strong> = noMedia) {
regular-property: value;
}
.setProps() when (<strong i="17">@place</strong> = screen) {
screen-property: value;
}
.setProps();
> a {
.setProps() when (<strong i="18">@place</strong> = noMedia) {
regular-property: value;
&:hover { regular-property: value; }
}
.setProps() when (<strong i="19">@place</strong> = screen) {
screen-property: value;
&:hover { screen-property: value; }
}
.setProps();
}
}
}
#screenSpace2();
ããã¯ãã®cssãçæããŸãïŒ
<strong i="23">@media</strong> screen {
.my-class {
media-screen-property: value;
}
div > ul {
screen-property: value;
}
div > ul li {
screen-property: value;
}
div > ul li:hover {
screen-property: value;
}
.someClass {
screen-property: value;
}
.someClass > a {
screen-property: value;
}
.someClass > a:hover {
screen-property: value;
}
}
.my-class {
regular-property: value;
}
div > ul {
regular-property: value;
}
div > ul li {
regular-property: value;
}
div > ul li:hover {
regular-property: value;
}
.more-classes-not-needing-media {
property: value;
}
.someClass {
regular-property: value;
}
.someClass > a {
regular-property: value;
}
.someClass > a:hover {
regular-property: value;
}
ç§ã¯æ¬¡ã®ãããªããšãããããšæã£ãŠããŸããïŒ
/*
* Span mixins
* adapted from Gridpak Beta LESS
* http://gridpak.com/
* Created by <strong i="6">@erskinedesign</strong>
*/
.mixin-span(<strong i="7">@num</strong>, <strong i="8">@gutter_pc</strong>, <strong i="9">@padding</strong>, @max_columns) when (<strong i="10">@num</strong> > @max_columns) {
.mixin-span(<strong i="11">@max_columns</strong>, <strong i="12">@gutter_pc</strong>, <strong i="13">@padding</strong>, @max_columns);
}
.mixin-span(<strong i="14">@num</strong>, <strong i="15">@gutter_pc</strong>, <strong i="16">@padding</strong>, @max_columns) when (<strong i="17">@num</strong> =< @max_columns) {
<strong i="18">@one_col</strong>: (100% - (<strong i="19">@gutter_pc</strong> * (<strong i="20">@max_columns</strong> - 1))) / @max_columns;
width:(<strong i="21">@one_col</strong> * @num) + (<strong i="22">@gutter_pc</strong> * (<strong i="23">@num</strong> - 1));
padding:@padding;
margin-left:@gutter_pc;
}
.mixin-span_first() {
margin-left:0;
}
// end of adapted Gridpak LESS
// Namespaced mixin sets
#mob{
<strong i="24">@max_columns</strong>: 1;
<strong i="25">@padding</strong>: 0 1.5%;
<strong i="26">@gutter_pc</strong>: 5%;
.span(@col){
<strong i="27">@media</strong> screen and (max-width:300px){
.mixin-span(<strong i="28">@col</strong>, <strong i="29">@gutter_pc</strong>, <strong i="30">@padding</strong>, @max_columns);
.mixin-span_first;
}
}
}
#desk{
<strong i="31">@max_columns</strong>: 10;
<strong i="32">@padding</strong>: 0 3%;
<strong i="33">@gutter_pc</strong>: 5%;
.span(@col){
<strong i="34">@media</strong> screen and (min-width:301px){
.mixin-span(<strong i="35">@col</strong>, <strong i="36">@gutter_pc</strong>, <strong i="37">@padding</strong>, @max_columns);
}
}
}
//assign different layouts per namespaced breakpoint
/* ----- Header ----- */
#header{
#mob > .span(2);
#desk > .span(4);
.mixin-span_first;
background-color:#888;
color:#fff;
}
/* ----- Main ----- */
#main{
#mob > .span(1);
#desk > .span(6);
background-color:#eee;
color:#111;
}
ããããã°ã«ãŒãåãããŠããªãå Žåãçæãããcssã¯å°ãããã°ããŸã
/* ----- Header ----- */
#header {
margin-left: 0;
background-color: #888;
color: #fff;
}
<strong i="41">@media</strong> screen and (max-width: 300px) {
#header {
width: 100%;
padding: 0 1.5%;
margin-left: 5%;
margin-left: 0;
}
}
<strong i="42">@media</strong> screen and (min-width: 301px) {
#header {
width: 37%;
padding: 0 3%;
margin-left: 5%;
}
}
/* ----- Main ----- */
#main {
background-color: #eee;
color: #111;
}
<strong i="43">@media</strong> screen and (max-width: 300px) {
#main {
width: 100%;
padding: 0 1.5%;
margin-left: 5%;
margin-left: 0;
}
}
<strong i="44">@media</strong> screen and (min-width: 301px) {
#main {
width: 58%;
padding: 0 3%;
margin-left: 5%;
}
}
ãã®https://github.com/buildingblocks/grunt-combine-media-queriesã«ã¯è§£æ±ºçããããŸãããçŸæç¹ã§ã¯æå°å¹ ã§æ³šæããã ããªã®ã§ãäž»ã«ã¢ãã€ã«ãã¡ãŒã¹ããµã€ãã§åœ¹ç«ã¡ãŸãã
IMOåé¡ãã¹ã³ãŒãã°ã«ãŒãåå¶åŸ¡ã«äžè¬åããããšã¯çã«ããªã£ãŠããŸããããã«ãããåé¡ïŒ930ã®è§£æ±ºçãæäŸãããŸãã
çŽ æŽãããããŒã«@krava ïŒ ããããšã
çŽ æŽããã!!! IMOã¯ãKRAVAã®æ©èœãLESSã«å®è£ ããã®ãçã«ããªã£ãŠããŸã
+1
ãã©ã°ã€ã³ãšããŠããããã§ãã ããã»ã©é£ãããªãã¯ãã§ãã ããããšãå€ãããïŒ
ãã©ã°ã€ã³ã¯ããã©ã°ã€ã³ãèªåããŒãããã·ã¹ãã ïŒoptions.jsonïŒãããåªå 床ãäœãããå¿ èŠããããšæããŸãã ããããã¯ãããã©ã°ã€ã³ã¯ä»å çãªæ©èœãšããŠæå³ããããŸãã
ãã®ãªãã·ã§ã³ã¯ãŸã å®è£
ãããŠããŸããïŒ
ããã«ãããã³ã³ããŒãã³ãå
ã§ã¡ãã£ã¢ã¯ãšãªã䜿çšãããããåºåãããcssãååã«åæžãããåºå段éã§ã°ã«ãŒãåãããŸãã
ã¹ã¬ã¯ã¿ãŒã®äžŠã¹æ¿ãã«é¢ããŠããgroupãããŒã¯ãŒãã䜿çšããŠäœããã°ã«ãŒãåãããšãçŸåšã®è«çãããŒããåé€ãããã°ã«ãŒãåãããé åã«é 眮ãããããšã«æ³šæããŠãã ããã
http://helloanselm.com/2014/web-performance-one-or-thousand-media-queries/
ãã®èšäºã«ãããšãã¡ãã£ã¢ã¯ãšãªãã°ã«ãŒãåããå¿
èŠã¯ãããŸããã
ãããããã©ã°ã€ã³ã¯åªããŠããŸãã
çµæã®CSSãã¡ã€ã«ã®ãµã€ãºã§ãããããããã©ãŒãã³ã¹ã®åé¡ã§ã¯ãããŸããã æ°åã®<strong i="5">@media</strong> screen and (max-width: 480px)
æååããCSSãã¡ã€ã«ãµã€ãºã®èŠ³ç¹ããå ç®ããå§ããŸãã
ç§ã¯SOã«ã€ããŠãã®è³ªåãããŸãããã誰ãããã®åé¡ã«éšåçã«çããŸããã
@ Seven-phases-maxã¯ããªãã«çããäžãã圌ã®çãã®äžã§ãã®åé¡ã«æ»ã£ãŠèšåããŸããã éåžžã«ã¡ã¿;ïŒ
ã¡ãã£ã¢ã¯ãšãªãåŸåŠçããã®ã§ã¯ãªããããã¯ã¹ã€ã³æ¹åŒã§ããŒãžããæ¹ãééããªã奜ãã§ãã ããã«ãããå ¥åãç°¡åã«ãªããäœãã©ã®ããã«ããŒãžãããããã现ããå¶åŸ¡ã§ããŸãã
ããã®ã³ã¡ã³ãã§ãç§ããã¹ãŠã®ãããžã§ã¯ãã§äœ¿çšããŠãããœãªã¥ãŒã·ã§ã³ãèŠãããšãã§ããŸãã
https://github.com/less/less.js/issues/950#issuecomment -17723748
æ€çŽ¢ãè¡ã£ããšãããã¡ãã£ã¢ã¯ãšãªã®ã°ã«ãŒãåãè¡ã2ã€ã®gruntãã©ã°ã€ã³ãèŠã€ãããŸããã
https://github.com/buildingblocks/grunt-combine-media-queries
ã¡ãã£ã¢ã¯ãšãªã®çµã¿åããã¯ã gulpã§ãå©çšã§ããŸãã
http://github.com/konitter/gulp-combine-media-queries
v2以éããã©ã°ã€ã³ã䜿çšã§ããããã httpsïŒ//github.com/bassjobsen/less-plugin-group-css-media-queries ïŒããã³https://github.com/bassjobsen/less-plugin-pleeeaseïŒãåç §ããŠ
ããã¯ãã©ã°ã€ã³ã§ãµããŒããããŠãããã³ã¢ã«ç§»è¡ããããšã¯åªå ãããªããããçµäºããŸãïŒAFAIK-ãããééã£ãŠããå Žåã¯@ less / adminãæ£ããïŒã
@gyopiazzaäžèšã®https://github.com/less/less.js/issues/950#issuecomment-17723748ã«ã€ããŠè³ªåããã
@nfqããã¯å®å
šãªåæåã§ã¯ãªããåã«ãããã©ã«ããã®ç©ºã®å®çŸ©ã§ãã ã«ã¹ã¿ã ã®.step*()
ããã¯ã¹ã€ã³ãæäŸããªãå Žåã«å¿
èŠã§ãïŒã€ãŸãããããã©ã«ããã®.step*()
å®çŸ©ãªã©ãããŸããŸãªãã¡ã€ã«ã«ãããã®ãã®ãå«ãŸããŠããå¯èœæ§ãããããããã®ã¬ã³ããªã³ã°ã¯äžè¬çãªãã®ã§ãããšæ³å®ãããŸãããŠãŒãã£ãªãã£/ã©ã€ãã©ãªã³ãŒããã«ã¹ã¿ã .step*()
å®çŸ©ã¯ããŒã/ãããžã§ã¯ãåºæã®ã³ãŒãã«ãããŸãïŒã
@nfqå®éã«ã¯å¿
èŠãããŸããã
@ Seven-phases-maxãè¿°ã¹ãããã«ãã¡ãã£ã¢ã¯ãšãªã¯ååšããªãããã¯ã¹ã€ã³ãåŒã³åºããããã³ãŒãã§ããã¯ã¹ã€ã³ã䜿çšããªãå Žåã«ãšã©ãŒãåé¿ãããšäŸ¿å©ã§ãã
ãšããã§ããã®ææ³ã®å©ç¹ã¯ãã¡ãã£ã¢ã¯ãšãªãçµã¿åããããšãã³ã³ãã€ã«æéãïŒå°ãïŒé ããªãããšã§ãã
@gyopiazzaè¿ éãªè¿ä¿¡ããããšãããããŸãã ã³ã³ãã€ã«æéã¯æ°ã«ãªããŸããã倧èŠæš¡ãªãããžã§ã¯ãã®å Žåã¯ããã¹ãŠã®ã¡ãã£ã¢ã¯ãšãªãã¡ã€ã³ã®ã¹ã¿ã€ã«ã·ãŒãã®äžéšã«ã°ã«ãŒãåããããšã匷ããå§ãããŸãã ç§ã¯ããã€ãã®ãã©ã°ã€ã³ãè©ŠããŸããããç§ãã¡ã®ãŠãŒã¹ã±ãŒã¹ã«ãšã£ãŠæãç°¡åã§äŸ¿å©ãªæ¹æ³ãèŠã€ããŸããã ããããšãïŒïŒ
@ Seven-phases-maxããããšããããªãã®çãã¯çã«ããªã£ãŠããŸãã ç§ã¯ããŸã䜿çšããŸããããç¹å®ã®ããšãéæããããã®æè¯ã®æ¹æ³ããŸã ç解ããŠããŸããïŒ
ãŸããclean-cssã¯v3以éã®@mediaããŒãžããµããŒãããŠããã less-plugin-clean-cssããµããŒãããŠããããšã«æ³šæããŠãã ããã
main.lessã§ïŒ
header {
color: green;
<strong i="9">@media</strong> only screen (max-width: 500px) { color: red; }
}
footer {
color: green;
<strong i="10">@media</strong> only screen (max-width: 500px) { color: red; }
}
lessc --clean-css="advanced" main.less
åºåïŒ
footer,header{color:green}<strong i="15">@media</strong> only screen (max-width:500px){footer,header{color:red}}
less-plugin-clean-cssã¯ãããã©ã«ãã§--skip-advancedãtrueã«èšå®ããŸãã @ mediaã®ããŒãžã«ã¯ã advanced
ãªãã·ã§ã³ãæ瀺çã«èšå®ããå¿
èŠããããŸãã
@nfq ãããã¯ã¹ã€ã³ã¢ãããŒããã§ã¯ãã¡ãã£ã¢ã¯ãšãªã¯åŒãç¶ãäžéšïŒãŸãã¯å®£èšããå ŽæïŒã§ã³ã³ãã€ã«ãããŸãã
@gyopiazzaããããšããããã ãã®ã¢ãããŒãã«æºè¶³ïŒ
@bassjobsenç§ã¯ééããªãããããã倧ããªãããžã§ã¯ãã§äœ¿çšããŸãã ç§ã¯ãŸã å®éã«Lessãã©ã°ã€ã³ã䜿ãå§ããŠããŸããã ãã³ããããããšãïŒ