.guard () when (@variable) {
a {
color: red;
}
}
๋ณ์๊ฐ ์ ์๋์ง ์์์ผ๋ฏ๋ก ์ถ๋ ฅ์ด ์์ต๋๋ค.
<strong i="8">@variable</strong>: true;
.guard () when (@variable) {
a {
color: red;
}
}
๋ณ์๊ฐ ์ ์๋์ด ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
a {
color: red;
}
+1
์ด๊ฒ์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ์์์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์์ํด๋ณด์ญ์์ค.
ํน์ ์ฑ(์: ์น์ฌ์ดํธ์ ๋ฉ์ธ ๋ฉ๋ด)์ ๋ํ ํ์ผ์ด ์ ์ต๋๋ค.
๊ธฐ๋ณธ ์์์ด ๋ณ์๋ก ์ ์๋๋ ๊ธฐ๋ณธ less ํ์ผ์์ ์ด less ํ์ผ์ ๊ฐ์ ธ์ต๋๋ค.
์ด์ ๊ธฐ๋ณธ ๋ฉ๋ด์ less ํ์ผ์์ ๊ธฐ๋ณธ ์์์ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ํ์ผ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๋ณ์์ ์กด์ฌ๋ฅผ ํ์ธํ ์ ์๋ค๋ฉด ๋ชจ๋ ์ ์ ์์์ผ๋ก ๋์ฒดํ ์ ์์ต๋๋ค.
๋ค์์ ๋ฉ๋ด๊ฐ ์ ์ ํ์ผ์ ์์ํ๋ ๋ฐฉ๋ฒ์ ์์
๋๋ค.
@menu-base-color: white;
@menu-base-color: @base-color when (@base-color);
...or...
@menu-base-color: @base-color when isset(@base-color);
+1, ์ฐ๋ฆฌ๋ ์ด๋ฏธ istext
, isnumber
isdefined
๋ฅผ ๊ฐ์ง๊ณ ์๊ณ isundefined
๋ ์ ์ ํ
๋ง๋ก ํฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.
์๋ฅผ ๋ค์ด isdefined
$์ธ ๊ฒฝ์ฐ $ value
๋๋ userValue
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
LESS๋ฅผ ์ฌ์ฉํ์ฌ Semantic UI์ ๋ํ ํ ๋ง ๊ท์น์ ์ค์ ํ๋ ค๊ณ ํ ๋ ์ด ๋ฌธ์ ๊ฐ ๋ง์ด ๋ฐ์ํฉ๋๋ค.
์ด๊ฒ์ +1 - ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ +1
is-defined
๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ํฐ ๋ฌธ์ ๊ฐ ์๋๋๋ค(v2๊ฐ ๋ฆด๋ฆฌ์ค๋๋ ์ฆ์ ์ฒซ ๋ฒ์งธ ํ๋ฌ๊ทธ์ธ ์ค ํ๋์ ๋ํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค). ์์งํ ๋งํด์ ์ฌํ ์ ์ ์ด ๊ธฐ๋ฅ์ ์ํ๋ ์ฌ๋๋ค์ด ์์ ๋ ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ทธ๋ฐ ๊ธฐ๋ฅ ์์ด ํด๊ฒฐํ ์ ์๋ค๋ ์ฌ์ค์ ๋์น๊ณ ์๋ค๋ ๊ฒ์
๋๋ค.
@InitArt ์ ์ฌ์ฉ ์ฌ๋ก:
// library.less
<strong i="9">@variable</strong>: false;
a when (@variable) {
color: red;
}
// ......................................
// user.less
<strong i="10">@import</strong> "library.less"
<strong i="11">@variable</strong>: true;
@nemesis13 ์ ์ฌ์ฉ ์ฌ๋ก:
// library.less
@base-color: green;
@menu-base-color: @base-color;
.menu {
background-color: @menu-base-color;
}
// ......................................
// user.less
<strong i="16">@import</strong> "library.less"
@base-color: white;
// or:
@menu-base-color: black;
// or whatever...
์ฆ, ์์ฝํ๋ฉด ๋ณ์ ๊ฐ์ ์์ ๋กญ๊ฒ ์ฌ์ ์ํ ์ ์์ผ๋ฏ๋ก ๋ณ์๊ฐ ์ ์๋์๋์ง ํ ์คํธํ๋ ๋์ ํด๋น ๋ณ์์ ๋ํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ฉด ๋ฉ๋๋ค.
์ max์ ์๊ฐ ๊ทธ๋ค์๊ฒ ์ ํฉํ์ง ์์์ง ๋๋ตํ ์ ์์ต๋๊น? ๋๋ ํ ์์๋ค
๋ณ์๊ฐ ์์ ์ ์๋์ด ์๋์ง ๋๋
์์
ํ ์๋? ์๋๋ฉด ๋ค๋ฅธ ๊ฒ์
๋๊น?
์ฐ๋ฆฌ๋ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋ ๊ฒ์ ๊ณ ๋ คํ์ง ์์ ๊ฒ์
๋๋ค.
์ด๋ ๊ฒ ํ๋ ๊ฒ์ ๋จ์ ์ ๋ณ์๋ฅผ ์๋ชป ์
๋ ฅํ ์ฌ๋๋ค์ด
์ค๋ฅ. ๊ฒฝ๊ณ ์ ํจ๊ป ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง ๋ค์์์ ์ํํ ๊ฒฝ์ฐ
๋น์ ์ ๊ฒฝ๊ณ ๋ฅผ ์ํ์ง ์์ ๊ฒ์
๋๋ค. ๊ทธ๊ฒ์ด ๋์ ์ ์ผํ ๋ฌธ์ ์
๋๋ค.
์ ์.
์ด๊ฒ์ ๊ฒฐ๊ณผ CSS์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ํ ๋ง๋ฅผ ์ ์ํ ๋ ํนํ ์ ์ฉํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ ๋ง๋ฅผ ๋ง๋ค ๋ ๋ง์ ์์ฑ์ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์๋ ๋๋จธ์ง ์์ฑ์ ์ค์ ํ์ง ์๊ณ ์ผ๋ถ๋ง ์ค์ ํ๊ธฐ๋ฅผ ์ํ ์ ์์ต๋๋ค. ๋ฌผ๋ก ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์๋ํ์ง๋ง ์ต์ข CSS๊ฐ ๋ถํ๋ ค์ง๋๋ค.
๋ค์ ๊ธฐ๋ณธ ํ ๋ง(ํ ํ๋ฆฟ)๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
.my-class {
color: @text-color;
background-color: @background-color;
border-color: @border-color;
}
ํ ๋ง ์ฌ์ฉ์๋ ๋๋จธ์ง ์์ฑ์ ์ค์ ํ์ง ์๊ณ ํ ์คํธ ์์๋ง ์ค์ ํ๊ธฐ๋ฅผ ์ํ ์ ์์ต๋๋ค. ๋ฌผ๋ก ๊ฐ์ "์ด๊ธฐ", "ํฌ๋ช ", "์์" ๋ฑ์ผ๋ก ์ค์ ํ ์ ์์ง๋ง ์ด๋ ์ต์ข CSS์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ํ ๋ง์๋ ์๋ฐฑ ๊ฐ์ง ์์ฑ์ด ์๋ ๊ฒฝํฅ์ด ์์ผ๋ฏ๋ก ํฌ๊ธฐ๊ฐ ์๋นํ ์ฆ๊ฐํ ์ ์์ต๋๋ค.
@JechoJekov
์ด ๊ธฐ๋ฅ ์์ฒญ์ ์์ ์ ๋์น๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ ์ฌ์ ํ ์ด๋ฌํ ๋ชจ๋ ์์ฑ์ ๋ณดํธํด์ผ ํ๋ค๋ ์ ์ ์ ์ํ์ญ์์ค(๋ฐ๋ผ์ ์์์ ๋ ๊ฐ์ ๊ฒ์๋ฌผ์ ์ ์ํ ๊ทผ๊ฑฐ๊ฐ ์ฌ์ ํ ์ ์ฉ๋จ). ๊ทธ๋์ ๋๋ ๋น์ ์ ์ ์ค ์ผ์ด์ค๊ฐ #1400์ ์๋ก์ด ๊ฒ์ ์ถ๊ฐํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก "๋ชจ๋ ๊ฐ์ด ์ ์๋์ง ์์ ๋ณ์๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์์ฑ ๊ฑด๋๋ฐ๊ธฐ" ๋๋ ์ด์ ์ ์ฌํ ๊ฒ๊ณผ ๊ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋ค๋ฅธ ํฐ ์ด์ผ๊ธฐ).
@seven-phases-max
๋ณ์๋ฅผ "undefined" ๋๋ "unset" ๊ฐ์ผ๋ก ์ค์ ํ ์ ์๋ค๋ฉด ๊ฐ์ฅ ์ข์ ๊ฒ์ ๋๋ค. ์์ฑ์ ์ด๋ฌํ ๊ฐ์ผ๋ก ์ค์ ํ๋ฉด ์์ฑ์ด ์ต์ข CSS์์ ๋ ๋๋ง๋์ง ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ตฌ๋ฌธ์ด ๋จ์ํ๋๊ณ ๋ณ์๊ฐ ์ ์ธ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
@JechoJekov
๋ณ์๋ฅผ "undefined" ๋๋ "unset" ๊ฐ์ผ๋ก ์ค์ ํ ์ ์๋ค๋ฉด ๊ฐ์ฅ ์ข์ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ์ธ๊ธํ๋ฏ์ด ์ด๊ฒ์ ์์ฒด ํฐ์ผ(์์ฒด ํ ๋ก ํฌํจ)์ด ํ์ํ ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋๋ค.
๋ก๋๋งต์ ๋ํ ๋ช ๊ฐ์ง ์ค๋ช : ์ด๊ฒ์ "ReadyForImplementation"์ผ๋ก ํ์๋์ง๋ง ์ด ์ค๋ ๋์๋ ํฉ์๊ฐ ์๋ ๊ฒ ๊ฐ์ผ๋ฉฐ @seven-phases-max๊ฐ ์ ์ ํ ๋์์ ์ ์ํ ๊ฒ ๊ฐ์ต๋๋ค. @lukeapage @seven-phases-max, ๊ตฌํ ์ค๋น๊ฐ ์ ๊ฑฐ๋์ด์ผ ํฉ๋๊น?
@matthew-dean ์๋ฌด ์๊ฐ์ด ์์ต๋๋ค. ์ฌ๊ธฐ์์ "ReadyForImplementation"์ด ์ฌ์ ํ ์ ํจํ๋ค๊ณ ์๊ฐํฉ๋๋ค. "์ด ๊ธฐ๋ฅ์ ์ค์ ๋ก ํ์ํ์ง ์์ ๊ฒ ๊ฐ์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๋ฌํ ๊ฒ์ ๊ตฌํํ๋ PR์ ์๊ฐํด ๋ธ๋ค๋ฉด ์ ํญ์ด ์์ ๊ฒ์ ๋๋ค" ๋๋ ์ผ์ข ์ :)
์ด๋ป๊ฒํ๋ค๋๊ฑฐ์ผ? (๊ณ ๋ ค)
๋์๊ฒ "๊ตฌํ ์ค๋น ์๋ฃ"๋ ํด๊ฒฐ๋๊ฑฐ๋ ๊ตฌํ๋์ด์ผ ํ๋ _๋ฐ๋์_๋ง์ฅ์ผ์น์ผ ํ์๋ ์์ง๋ง ์ผ๋ฐ์ ์ธ ํฉ์๊ฐ ์์์ ์๋ฏธํฉ๋๋ค. "๊ณ ๋ ค์ค"์ด ๊ทํ์ ์ ์์ ๋ถํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฒ์ ์ง์ ์ ์ฌ์ฉํ ๋ ์ฌ์ ํ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
<strong i="6">@foo</strong>: 'bar';
& {
// not sure if <strong i="7">@foo</strong> is defined
}
isDefined
์(๋ฅผ) ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ํฉ๋๋ค.
is-defined
์ ๊ฐ์ ๊ฒ์ด (๊ตฌ๋ฌธ์ ์ธ ์คํ์ผ๋ก) ์๋ฏธ๊ฐ ์์ง๋ง ์ค์ ๋ก ํ์ํ ๊ฒ์ ์๋๋๋ค. ์คํ์ผ ๋ด์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ _ํญ์_ @foo
๋ฅผ ์ ์ํ์ญ์์ค(ํ์ํ ๊ธฐ๋ณธ๊ฐ์ด ๋ฌด์์ด๋ ). ๊ฒฐ๊ตญ ์ ์ํ ํ์๊ฐ ์๋ค๊ณ ์์ธกํ ์ ์์ต๋๋ค. ์:
// in a far far away galaxy of your library default variables:
<strong i="8">@foo</strong>: undefined;
// the code where you need it
& when not(<strong i="9">@foo</strong> = undefined) {
// <strong i="10">@foo</strong> is defined by user
}
// some user code
<strong i="11">@foo</strong>: bar;
์์ ์์์ ์ด๋ฏธ ์ด๊ฒ์ ์์ฑํ ๊ฒ ๊ฐ์ง๋ง(์ ๋ ์ด ๊ธฐ๋ฅ์ ๋ถ์กฑ์ด ๋ฌด์์๋ ๋์ ๋์ง ์๋๋ค๋ ์ฌ์ค์ ๋ถ๋ช ํ ํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์๊ณ ์๋ค๋ฉด ํ๋, ๊ณต์ ํ์ญ์์ค).
๋ธ๋ผ์ฐ์ ์์ ํ ๋ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ค์ ํ๋ ค๊ณ ํฉ๋๋ค.
์ฆ, less.js
๋ฅผ ์ฌ์ฉํ๊ณ ๊ธฐ๋ณธ @theme
๋ณ์๋ฅผ ๋ฐํ์ ์ค์ ์ผ๋ก ๋ฎ์ด์จ์ผ ํฉ๋๋ค.
์๋ผ
window.less.modifyVars({
theme: 'someOtherValue'
})
๋ด LESS์์ ๋ค์์ ํฌํจํ๋ ๊ธ๋ก๋ฒ theme.less
ํ์ผ์ ๊ฐ์ ธ์ค๊ณ ์์ต๋๋ค.
<strong i="14">@theme</strong>: undefined;
.setTheme {
<strong i="15">@theme</strong> : 'default';
}
.setTheme;
๋๋ ๋ฐฉ๊ธ ํด๋ดค๋๋ฐ
<strong i="19">@theme</strong>: 'default';
์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ์ ์ถ๋ ฅ๋๋ ๊ฐ์ undefined
์ด๊ณ ๋ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ modifyVars
์ ์ค์ ํ ๊ฐ์ ๊ด๊ณ์์ด ํญ์ default
์
๋๋ค.
์๋ฅผ ๋ณด๋ ค๋ฉด ์ฌ๊ธฐ์์ ํ ๋ง ๋๋กญ๋ค์ด์ ํด๋ฆญํ์ธ์ .
ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ(๋ผ์ด๋ธ ์ฌ์ดํธ์ ์์)์ ๋ณ์ ๊ฐ์ ธ์ค๊ธฐ ๊ฒฝ๋ก๋ฅผ ์๋์ผ๋ก ์ก๊ณ regexp๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ฌธ ๋ถ์ํ ๋ค์ modifyVars
๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋ณ์๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ด ๊ฝค ์ง์ ๋ถ ํ๋ค๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
@seven-phases-max @import
๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ํ
์คํธ ์ฌ๋ก๋ก ์ขํ์ต๋๋ค.
๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ค์์ ๊ฐ์ ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ
window.less.modifyVars({
theme: 'changedValue'
});
theme.less์ ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ outer
๊ฐ changedValue
๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์ด ์์ต๋๋ค.
component.less
<strong i="17">@import</strong> 'theme.less';
ํ ๋ง.๋ฆฌ์ค
<strong i="22">@theme</strong>: 'default';
.outer {
value: @theme; // value is set to changedValue
}
์ด ์คํจํ ๊ฒฝ์ฐ theme.less์์ @theme
๋ changedValue
default
๋ก ์ค์ ๋ฉ๋๋ค.
component.less
<strong i="32">@import</strong> 'theme.less';
ํ ๋ง.๋ฆฌ์ค
<strong i="37">@theme</strong>: 'default';
<strong i="38">@import</strong> "@{theme}"; // theme is set to default not changedValue
"var in mixin"์ ๊ฒฝ์ฐ ์ค๋ํซ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๋๋๋ค.
// defaults:
.setTheme {
<strong i="6">@theme</strong>: undefined;
}
// custom:
.setTheme {
<strong i="7">@theme</strong>: 'default';
}
.setTheme;
modifyVars
์ ๊ฒฝ์ฐ ์๋ํ ์ค๋ํซ์ ๋ํด ํญ์ 'someOtherValue'
๊ฐ ๋์ด์ผ ํฉ๋๋ค( modifyVars
๋ ์ปดํ์ผ๋ ํ์ผ์ ๋์ ์ผ๋ฐ <strong i="14">@theme</strong>: 'someOtherValue';
๋ผ์ธ์ ์ถ๊ฐํจ์ผ๋ก์จ ์๋ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์์ค ์ฝ๋). ๋ฐ๋ผ์ modifyVars
๊ฐ ์๋ํ์ง ์์ผ๋ฉด ๋ฌธ์ ๋ ๋ค๋ฅธ ๊ณณ์ ์์ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
button
ํ์ด์ง ์ฝ๋๋ฅผ ๋ณด์์ง๋ง ๋ฌด์์ด ์๋ชป๋์์ ์ ์๋์ง ๋นจ๋ฆฌ ๋งํ๊ธฐ์๋ ๋๋ฌด ๋ณต์กํฉ๋๋ค. ์ผํ ๋ณด๋ฉด Less ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์ฌ์ปดํ์ผ๋๊ณ ๊ฒฐ๊ณผ CSS๊ฐ modifyVars
modifyVars
์ ๋ค์ ์ ์ฉ๋๋์ง ์ ์ ์์ต๋๋ค(๋๋ ์ดํดํ ์ ์์ ์๋ ์์) less.refreshStyles
modifyVars
).
Btw., ๋ง์ผ์ ๋๋นํ์ฌ is-default
๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ๊ณํ์ด ์๋ค๊ณ ํ์ ํ์ญ๋๊น?
.setTheme when not(is-defined(@theme)) {
<strong i="26">@theme</strong>: 'default';
}
.setTheme;
? ๊ทธ๋ ๋ค๋ฉด ๋ฌธ์ ๋ ์ด๋ฌํ ์ฝ๋๊ฐ ์ง์ฐ ํ๊ฐ ์์น์ ์ง์ ์๋ฐํ๋ค๋ ๊ฒ์
๋๋ค( is-defined
๋ ๋ณ์๊ฐ ์ ์๋์ง ์์ ๊ฒฝ์ฐ false๋ฅผ ๋ฐํํด์ผ ํ์ง๋ง ํด๋น ๋ฒ์์์ ์ฆ์ ์ ์๋๊ธฐ ๋๋ฌธ์ , is-defined
๋ true -> unsolvable recursion์ ๋ฐํํฉ๋๋ค(์กฐ๊ฑด๋ถ ๋ช
๋ นํ ์ฌ์ ์๊ฐ ์์ ํ๊ฒ ํ์ฉ๋ ์ ์๋ ์ด์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ Less #2072 ์ฐธ์กฐ).
์ฆ, ์ค์ ๋ก ์์๋๋ก ์๋ํ ์ ์์ง๋ง( is-defined
๊ฐ ์ด๋ฌํ ์ฌ๊ท๋ฅผ ๋ช
์์ ์ผ๋ก ๊ฐ์งํ๊ณ ๊ตฌ์ ํ๋๋ก ์ฝ๋ฉ๋์ง ์๋ ํ), ์ผ์ข
์ ์ง์ ๋์ง ์์/์ ์๋์ง ์์ ๋์์ผ๋ก, ์ ์์ ์ธ ๋ณ์ ๊ฐ์์ฑ ๊ท์น๊ณผ์ ์ผ๊ด์ฑ ์์ด ๋ ์๋ง.
@jlukic
<strong i="8">@theme</strong>: 'default'; <strong i="9">@import</strong> "@{theme}"; // theme is set to default not changedValue
๋ค, ์ด๊ฒ๋ ์ ์์ฌ ์ค ํ๋์์ต๋๋ค. (๋ถํํ๋ ์ง๊ธ ์ด๊ฒ์ ํ ์คํธํ ์ ์๊ณ ์ด๋ป๊ฒ ์ด๋ฐ ์ผ์ด ์ผ์ด๋ ์ง ์ง์ํ ์๋ ์์ง๋ง ๊ฐ์ ธ์ค๊ธฐ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ง์ ํ ํ๋ง๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํฉ๋๋ค. ์ ์ฉ ์ด๊ฒ์ด ๋ฌธ์ ์ธ ๊ฒฝ์ฐ ๋ฌธ์ ๋ณด๊ณ ์).
๋๋ ๊ทธ๊ฒ์ด ๊ทธ ๋ฉ์ง ํ๋ง๋ฒ๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ํ์ ํฉ๋๋ค.
๋๋ฒ๊ทธํ ๋งค์ฐ ๊ฐ๋จํ ํ์ผ๋ก ์์ ํ์ง๋ง ์์ง ํ ์คํธ ์ฌ๋ก ์ ์ฅ์๋ฅผ ๋ง๋ค ๊ธฐํ๊ฐ ์์์ต๋๋ค.
๋ด ํ
์คํธ์์ ์คํจ๋ ๊ฐ์ ธ์ค๊ธฐ์์ {@variable}
๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์ง๋ง CSS ์์ฑ์์๋ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ ์ ๋น์ฉ์ผ๋ก ํ ๋ง๋ฅผ ์ ๋ง ์ฆ๊ธฐ๊ณ ์ถ๋ค๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ์ต๋๋ค. ๋ค์์ ์ง๋ ์ฃผ Meteor DevShop์์ ์ ๋ณด์ธ LESS์ ์ฌ๋ฏธ์๋ ํ ๋ง ์์์ ๋๋ค (์ค๋ฅธ์ชฝ ์๋จ์ ํ์ธํธํต ์์ด์ฝ ํด๋ฆญ).
@jlukic ๋๋ ๊ทธ๊ฒ์ ํ
์คํธํ๊ณ lessc
์ less.js
๋ฅผ ์ฌ์ฉํ์ฌ ์์ํ ๋๋ก ๊ฐ์ ธ์ค๊ธฐ์ vars์ ๋ํด modifyVars
์๋ํฉ๋๋ค( codepen ๋ฐ๋ชจ ์ฐธ์กฐ). ์์ ๋ฌด์์ด URL์์ ๊ฐ์ ธ ์ค์ง๋ง ํ์ด์ง๊ฐ ์ํํด์ผํ๋ ๊ฒ๊ณผ ๋์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค ... ๊ทธ๋์ ์ค์ ๋ก ๋ฌธ์ ๋ ๋ค๋ฅธ ๊ณณ์์๋ ๊ฒ ๊ฐ์ต๋๋ค).
์๊ฐ์ ๋ด์ด ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ง๋ค์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด๊ฒ์ ๊ฝค ๋ช ํํ ์ปท์ ๋๋ค. ๋์๊ฒ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์กฐ์ฌํด์ผ ํ ๊ฒ์ ๋๋ค.
์ด ์์ฒญ์ ๋ํ ์์ง์์ด ์์์ต๋๊น? ๋๋ ์ผ๋ง ๋์ ์ ์๋์ง ์์ ๋ณ์ ๊ฒ์ฌ์ ๋ํด ๋ถ์ํดํ์ต๋๋ค. ํ์ฌ๋ก์๋ ์ด์์ ์ด์ง ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค...
p {
& when not (@body-text-color = null) {
color: @body-text-color;
}
}
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์๋ํ๋ ค๋ฉด ๋ณ์๊ฐ ์กด์ฌํด์ผ ํ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก null
๋ก ์ ์๋์ด์ผ ํฉ๋๋ค. ๋ณ์๊ฐ ์ฒ์์ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ๋์ ํ์ธํ ์ ์๋ค๋ฉด ํจ์ฌ ๋ ํจ๊ณผ์ ์ด๊ณ ์ ์ฐํ ๊ฒ์
๋๋ค.
+1
์์ฝํ์๋ฉด ํ๋ฌ๊ทธ์ธ ๋ด์์ is-defined(name)
(๋ฐ/๋๋ get-value-of(var-name, fallback-value-if-not-defined)
) ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ค๋ฉด 15์ค ๋ฏธ๋ง์ ์ฝ๋๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋น์ ์ด ์ถฉ๋ถํ ์ฉ๊ฐํ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ์ญ์์ค.
์ด๊ฒ์ +1. ํ๋ฌ๊ทธ์ธ์ผ๋ก์ ์ด์ ๋ํ ์ง์ ์ด ์์ต๋๊น? ๋ด ๋ง์, @seven-phases-max๋ ๋๋ถ๋ถ์ ๊ธฐ์ฌ์๋ณด๋ค ์ฝ๋๋ฅผ ๋ ์ ์๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฝ 15์ค์ ์ฝ๋๊ฐ ํ์ํ ๊ฒฝ์ฐ ์์ง ์๋ฃ๋์ง ์์ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ฝ 15์ค์ ์ฝ๋๊ฐ ํ์ํ ๊ฒฝ์ฐ ์์ง ์๋ฃ๋์ง ์์ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์๋ฌด๋ ๊ด์ฌ์ด ์๊ธฐ ๋๋ฌธ์? ๋ค๋ฅธ ์ฌ๋์ด ์ด ์์ ์ ์ํํ ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ๋ฅญํ๊ณ "๋งค์ฐ ์ ์ฉํฉ๋๋ค"... ํ์ง๋ง ์์ ์ ์๊ฐ์ ๋ํด์๋ ๋ง์ ์ฒ๋ผ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์์ต๋๋ค ;)
๋๋ถ๋ถ์ ๊ธฐ์ฌ์๋ณด๋ค ์ฝ๋๋ฅผ ๋ ์ ์๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ๋ด๊ฐ ๋ค๋ฅธ ์ฌ๋์ ๊ด์ฌ์ฌ ๋ค์ ์ ์์ ์ ๊ด์ฌ์ฌ๋ฅผ ๋ฃ์ด์ผ ํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ์ฃ์กํฉ๋๋ค(ํนํ ๊ทธ๊ฒ์ด ์ ๊ฐ ๊ฐ์ธ์ ์ผ๋ก ์ค์ฉ/์๋ชป๋ ์ฝ๋ ์คํ์ผ๋ก ์ทจ๊ธํ๋ ๊ฒ์ ๊ณ ๋ฌดํ๋ ๊ฒ์ด๋ผ๋ฉด).
@ashenden ์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ๊ณตํํ๊ฒ ๋ค๋ฆฌ์ง ์๋๋ก ๋ค์์ ๊ฒฐํจ ์์ด "์ ์ ์์"(์ผ๋ฐ์ ์ธ CSS ์ฌ์ ์๊ฐ ์ด๋ค ์ด์ ๋ก ์ ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ๋ถ๋ช ํ ๊ฐ์ )์ผ๋ก ์ฌ์ฉ์ ์ ์ํ ์ ์๋ ๊ท์น ์ธํธ๋ฅผ ๋ง๋๋ ์ ์ ํ ๋ฐฉ๋ฒ์ ๋๋ค. "blind-move-every-CSS-value-to-a-variable-plus-use-something-that-you-dont-use"์ ๋ํ ์์ด๋์ด(๋๋ ๊ทธ๊ฒ์ด ์ค์ ๋ก ์ ๋ง๊ฐ์ก๋์ง์ ๋ํ ์ด์ผ๊ธฐ์ด๊ธฐ ๋๋ฌธ์ ์์ธํ ์ค๋ช ํ์ง ์๊ฒ ์ต๋๋ค. ๊ธด ๋ธ๋ก๊ทธ ํฌ์คํธ).
์ผ๋ฐ์ ์ผ๋ก "hooks"๋ผ๋ ๊ฐ๋ ์ด ์์ผ๋ฏ๋ก ๋ค์์ "can't make my mind up festival"์ ๋๋ค.
// .............................................
// base code:
p {
& when not (is-defined(@body-text-color)) {
color: @body-text-color;
}
& when not (is-defined(@body-text-color)) {
background-color: @body-back-color;
}
}
span {
& when not (is-defined(@body-text-color)) {
color: @body-text-color;
}
& when not (is-defined(@body-text-color)) {
background-color: @body-back-color;
}
}
// .............................................
// customization:
@body-back-color: blue; // how about gradient?
๋ค์์ผ๋ก ๋์ฒด๋์ด์ผ ํฉ๋๋ค.
// .............................................
// base code:
p {
.body-text();
.body-back();
// ^ it's actually better to group all this into a singe entity, e.g. .p()
// so that as you don't know WHAT or HOW to be customized
// you don't pre-enforce any limitations and/or hardcoded approach
// for something YOU do not even write
}
span {
.body-text();
.body-back();
}
.body-text() {}
.body-back() {}
// .............................................
// customization:
.body-back() {background-color: blue}
์ ์ ์ธ๊ณ , ๊ฐ๋ฅ์ฑ์ ์ธ๊ณ , ํ๊ณ๋ฅผ ์ธ์ด๋ณด์ญ์์ค.
์ฆ, ์ผ๋ถ CSS ์์ฑ์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ฌ์ฉํ ์ฌ๋๋ค์ ์ํด ๊ทธ๋๋ก ๋์ญ์์ค.
์ฌ๋ฌ๋ถ, ์ฌ๊ธฐ์์ ์ ๊ฐ ์ด ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค. ์ด ์์ ๋ฅผ ์ดํด๋ณด๊ณ ์ด๊ฒ์ด ์ ํจํ ๊ฒฝ์ฐ์ด๊ณ is-undefined ์์ด ๊ณ ์น ์ ์๋์ง ์๋ ค์ฃผ์ธ์.
๋ค์๊ณผ ๊ฐ์ ๋ชจ๋๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ ๋ง๋ฅผ ๋ก๋ํ๊ณ ์ถ์ต๋๋ค.
๋ด ํต์ฌ ์ฑ์์ ๋ณ์ @theme : 'yellow'๋ฅผ ์ ์ํ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ๊ฐ์ ธ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๊ฒฝ์ฐ์ less ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค.
@import 'ํ ๋ง/@{ํ ๋ง}';
์ ์ฒด {
๋ฐฐ๊ฒฝ: @primaryColor;
}
์ด๋ฐ ์์ผ๋ก @primaryColor : yellow ๋ฐ @primaryColor : red๋ฅผ ์ฌ์ฉํ์ฌ yellow.less ๋ฐ default.less๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ๋๋ primaryColor์ ๊ฐ์ ์๋ฏธ๋ก ์ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์ด๋ฌํ ๋ณ์๊ฐ ์ ์๋ ํ ๋ง ์ธํธ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๋ ์ฑ์์ ํ ๋ง ์ด๋ฆ์ ์ ์ํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์คํ์ผ์ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์๊ฒ ์ต๋๋ค. ์ ๊ฒฝ์ฐ์ง ๋ง์ธ์. ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ธ์ค๊ธฐ ๋ฏน์ค์ธ์ด ํ์ํฉ๋๋ค.
<strong i="6">@theme</strong>: 'default';
.imports(@theme) when (<strong i="7">@theme</strong> = 'yellow') {
<strong i="8">@import</strong> "themes/yellow";
}
.imports(@theme) when (<strong i="9">@theme</strong> = 'default') {
<strong i="10">@import</strong> "themes/default";
}
.imports(@theme);
@waterplea ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ๋จ์ํํ ์ ์์ต๋๋ค.
<strong i="7">@theme</strong>: default;
.imports(yellow) {<strong i="8">@import</strong> "themes/yellow";}
.imports(default) {<strong i="9">@import</strong> "themes/default";}
.imports(@theme);
๋ํ ์ ๊ฑฐ๋ ์ค๋ณต ๋ฐ์ดํ๋ ๊ธฐ๋กํด ๋์ญ์์ค.
์์งํ ๋งํด์ <strong i="13">@theme</strong>: yellow;
(+ ๋ชจ๋ ๋ฏน์ค์ธ ์ฝ๋)๊ฐ ๋ช
์์ ์ธ <strong i="15">@import</strong> "themes/yellow";
๋ผ์ธ๋ณด๋ค ๋์ ๋ฐฉ๋ฒ์ ์ ์ ์์ต๋๋ค. ์ฆ, ์ฐ์ ์ฌ์ ์ ๋ฅผ ์๊ณ ์์ต๋๊น? ์ฆ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๊ฐ yellow
ํญ๋ชฉ์ ์ ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ <strong i="18">@import</strong> "themes/default";
์ ์จ๊ธธ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋
๋ ๋
ธ๋์ ํ
๋ง๋ฅผ ๊ฐ์ ธ ์ค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ฐ์ ํ ์ค) ๋ฐ ์ง์ - ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋
ธ๋์ ํ์ผ์ ์ง์ ๋ ๋ณ์ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
ํ ๋ง๋ฅผ ์ฌ์ ์ํ๊ฑฐ๋ ์ฌ์ ์ค์ ํ ๋ง๋ก ์ ํํ๋ ํ์ผ์ ์ ํ์ ์ผ๋ก ๊ฐ์ ธ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์ ํ๋ก์ ํธ์ ๋ค๋ฅธ ํ ๋ง๊ฐ ํ์ํ ๊ฒฝ์ฐ ํด๋น ํ์ผ์ ๋ํ ๋ณ์นญ์ ๋ ธ๋ ๋ชจ๋๋ก ์ฌ์ฉํ๋๋ก webpack์ ๊ตฌ์ฑํฉ๋๋ค. ๋ด๊ฐ ์ ์ ์ด ๊ฒ ๋๋ ๋น์ ์ด ์ด ๊ฒ์ ์ฐ๋ฆฌ๊ฐ Angular์ฉ UI ํคํธ๋ฅผ ๊ตฌ์ถํ๊ณ ์๊ณ ๊ณ ๋๋ก ๋ชจ๋ํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค. ํ๋์ ๋ฒํผ๋ง ๊ฐ์ ธ์ค๊ฑฐ๋ ์ปจํธ๋กค์ ์ ํํ ์ ์์ผ๋ฉฐ ๋ชจ๋ ์คํ์ผ ์บก์ํ์ ํจ๊ป ์ฌ์ฉ ์ค์ธ ํ ๋ง๋ฅผ ์ธ์ํด์ผ ํฉ๋๋ค. ์๋ฃจ์ ์ ์ค์ ํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ๋ง์กฑํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ Angular์ฉ UI ํคํธ๋ฅผ ๊ตฌ์ถํ๊ณ ์๊ณ ๊ณ ๋๋ก ๋ชจ๋ํ๋์ด ์์ผ๋ฏ๋ก ๊ทํ๊ฐ ์์ฑํ ๋ด์ฉ์ ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์๋ํ์ง ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋ฌดํํ ์๊ฐ ์ ์ ๋ณธ ์ ์ด ์์ต๋๋ค. ์ด๊ฒ์ ๊ฐ์ฅ ์ฌํ ๋(์๋ชป) ์ดํด ๋ฌธ์ ์ค ํ๋์ ๋๋ค. ์ฌ๋๋ค์ ๊ธฐ๋ณธ์ ์ธ ๋ ๊ฒ์ผ๋ฅธ ํ๊ฐ ์์น์ ๋์น๊ณ , ์์ฐ์ค๋ฌ์ด ๋ ์ฌ์ ์๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋ฌด๊ฑฐ์ด ํ์ผ ์ฃผ์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ ๋ฐ๋์ ๋ณ์ ์๋ฏธ๋ฅผ ๊ฐ์ง ์ธ์ด(์: PHP, Sass ๋ฑ)์ ์ต๊ด์์ ์๊ฐ์ ๋ฐ์ ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ ์ ํจํด. "์๋ค์, ์๋ชปํ์ด!"
๋๋ ๊ทธ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ์ถ์ต๋๋ค. ๋๋ ๋ชจ๋ ๊ฒ์ ์ดํดํ๋ค๊ณ ์ฃผ์ฅํ๋ ๊ฒ์ด ์๋๋๋ค. :) ์ ์์ ๋ํ ๊ทํ์ ์ ์์ ์ค๋ช ํ์๊ฒ ์ต๋๊น? ์ฐ๋ฆฌ๊ฐ ์ป์ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ค์์ ์ต์ ๊ตฌ์กฐ์ ์์ ๋๋ค.
๋์๊ด:
<strong i="10">@import</strong> 'theme-default';
<strong i="13">@import</strong> 'mixins';
some mixins here like resetting default browser button styles
<strong i="20">@primary</strong>: red;
<strong i="23">@secondary</strong>: blue;
<strong i="27">@primary</strong>: green;
<strong i="30">@secondary</strong>: yellow;
<strong i="34">@import</strong> 'import';
.button { color: @primary; }
ํ๋ก์ ํธ 1(๊ธฐ๋ณธ ํ ๋ง๋ฅผ ์ฌ์ฉํด์ผ ํจ):
<strong i="42">@import</strong> 'import';
body { background: @secondary; }
ํ๋ก์ ํธ 2(2์ฐจ ํ ๋ง๋ฅผ ์ฌ์ฉํด์ผ ํจ):
<strong i="50">@import</strong> 'import';
body { background: @secondary; }
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ธ๋ ๋ชจ๋๋ก ์ถ๊ฐ๋๊ณ ํ๋ก์ ํธ ๋ด์์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฒํผ ๊ตฌ์ฑ ์์๋ง ๊ฐ์ ธ์ต๋๋ค. ์์ฒด ํ์ผ์ด ์ ์ ํด๋น ๋ฒํผ์ ๋ํ Angular ๋ชจ๋์ด๋ฏ๋ก ํ๋ก์ ํธ 1 ๋๋ ํ๋ก์ ํธ 2์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ๋ณ๋๋ก ์ปดํ์ผ๋ฉ๋๋ค.
๋๋ ์ด๊ฒ์ ๋ํด ์ ์ ๋์ ์๊ฐํ๊ณ ํ๋ก์ ํธ 1 ๋๋ ํ๋ก์ ํธ 2๊ฐ ๊ตฌ์ฑ ์์์ ํ๋ก์ ํธ ์์ฒด ์ฝ๋๋ฅผ ๋ชจ๋ ์ปดํ์ผํ ๋ ์ฌ์ฉํ ํ ๋ง ํ์ผ์ ์ค์ ํ ์ ์๋๋ก ๋ ์ ์ ์์ ํ์ผ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ผ ์ ์์์ต๋๋ค. ํ๋ก์ ํธ ์ฝ๋ ๋ด์์ ๋ฒํผ ๊ตฌ์ฑ ์์์ ์คํ์ผ์ ์ฌ์ ์ํ๋ ๋ฐฉ๋ฒ์ด ํ์๋์ง ์์ต๋๋ค.
๋์ ๊ธฐ๋ณธ์ ์ผ๋ก import.less๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<strong i="58">@import</strong> 'theme-default';
<strong i="61">@import</strong> 'mixins';
<strong i="64">@import</strong> (optional) '~custom-theme';
๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ ๋ด์์ ํ๋ก์ ํธ ์ฝ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌ์ฑ ์์ ๋ชจ๋์ ๋ํ ํ
๋ง ๋ณ์๋ฅผ ์ฌ์ ์ํ๋ ค๋ฉด webpack์ ์ฌ์ฉํ์ฌ ์ด ํ์ผ์ ๋ณ์นญ์ ๋ชจ๋๋ก ์ง์ ํฉ๋๋ค. ์ด ํ์ผ์ say @primary ๋ฅผ ๋ช
์์ ์ผ๋ก ์ฌ์ ์ํ๊ฑฐ๋ ๋ณด์กฐ ํ
๋ง๋ก ์ ํํ ์ ์์ต๋๋ค.
<strong i="69">@import</strong> '~myLibrary/styles/theme-secondary';
๊ทธ๋์ ๋๋ ์ฌ์ ์์ ๋ํด ์๊ณ ์์ต๋๋ค. ๋ฌธ์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ์๊ฐ "์ฃผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ ์ดํ์ ๋ชจ๋ ์์น"์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌ์ฑ ์์ ์ฝ๋ ์ฌ์ด์ ๋ค์ด๊ฐ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ๋๋ ๋น์ ์ด ๋งํ ๊ฒ์ด ์คํ์ผ ์บก์ํ ์๋ ํ๋ ์์ํฌ์์ ์๋ํ๋ค๋ ๊ฒ์ ์์ง๋ง Angular์ ๊ฒฝ์ฐ ์๋ํ์ง ์๊ฑฐ๋ ์๋ฃจ์ ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์คํดํ์ต๋๋ค.
๋ด๊ฐ ์ฐธ์กฐ. ๊ทธ๋ฐ ๋ค์ ์ฐ๋ฆฌ๋ ์ค์ ๋ก ๊ฐ์ ๊ฒ์ ๋ํด ๋งํ๊ณ ์์ต๋๋ค(๋จ์ํ ๋ค๋ฅธ ๋จ์ด๋ก). buttonComponent
(๋๋ ๋ค๋ฅธ ๊ตฌ์ฑ ์์)๊ฐ ๋ณ๋๋ก ์ปดํ์ผ๋๋ ์ฆ์ "ํ๋ก์ ํธ ์ฌ์ฉ์ ์ง์ ๋ง์คํฐ"๋ import.less
ํ์ผ๋ก ๋จ์ ์๊ณ ์ ๊ฐ ์ ์ํ ๋๋ก ์ ํํ ์ํํ์ต๋๋ค. ( Project 1
๋ฐ Project 2
๋ buttonComponent
์ ๊ฐ์ ์์ค์ ๋ ๋ค๋ฅธ "๋ค๋ฅธ ๋ชจ๋ ๊ฒ"(๋๋ "์ฌ์ธ์"?) ๊ตฌ์ฑ ์์๋ก ๋ฐ๋๊ณ ๊ฝค "ํ๋ก์ ํธ").
์ด ๋ฐฉ๋ฒ์ผ๋ก ๋๋ ๋น์ ์ด ๋ด ์ทจํฅ์ "์ฌ๋ฐ๋ฅธ ์ผ์ํ์ต๋๋ค"๋ผ๊ณ ๋งํ ๊ฒ์ ๋๋ค.
์ด ๋ฌธ์ ๋ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ค๋๋ ๊ฒ์ผ๋ก ํ์๋์์ต๋๋ค. ๋ ์ด์ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@stale ํ.
๊ธฐ์ ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํ๋ฌ๊ทธ์ธ์ 2015๋ ๋ถํฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ธ์ ์ผ๋ก ํ ์คํธํ ์ ์ด ์์ผ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ ๋ฅผ ๋น๋ํ์ง ๋ง์ญ์์ค(์ฐธ๊ณ ์ฉ์ผ ๋ฟ์ ๋๋ค).
์ด ๋ฌธ์ ๋ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ค๋๋ ๊ฒ์ผ๋ก ํ์๋์์ต๋๋ค. ๋ ์ด์ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๊ทธ๋์... ๋๋ ์ด ์ค๋ ๋๋ฅผ ๋ค์ ํ์ด๋ณด์๊ณ ์ด๊ฒ์ด ๋๋ถ๋ถ ์ฌ๋๋ค์ด Less ๋ฒ์๋ฅผ ์คํดํ๋ ๊ฒฝ์ฐ์ธ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
vars๊ฐ ์ ์๋์ด ์๋์ง ํ์ธํ ํ์๊ฐ ์์ต๋๋ค. ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ Vars๋ฅผ ์ ์ํด์ผ ํฉ๋๋ค.
<strong i="7">@import</strong> "library"; // contains @library-color: blue;
@library-color: red;
.box {
color: @library-color;
}
_change_ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ์ ์กฐ๊ฑด๋ถ๋ก ์ค์ ํด์ผ ํ๋ ํ์์ฑ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์์ฑ์ด ๋ณ์๋ก ์ค์ ๋์ด ์์ผ๋ฉด ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ฆ, library.less
์ ๋ค์์ด ์๋ ๊ฒฝ์ฐ:
@library-color: blue;
.box {
color: @library-color;
}
์ถ๋ ฅ์ ์ค์ ํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ์์ :
<strong i="16">@import</strong> "library";
@library-color: red;
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
.box {
color: red;
}
ํด๋น ์ค๋ ๋์ OP์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ํด๋น ๋์์ ์ดํดํฉ๋๊น?
"dos var exist"์ ์ฌ์ฉ ์ฌ๋ก๋ ํ๋๊ทธ๋ฅผ ์ํํ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฆ, ๊ฐ๋
์ ์ผ๋ก ์ง์ ์ ์ธ "๊ฑฐ์ง"์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ true
๊ฐ ์ ์ผํ "truthy" ๊ฐ์ด๋ผ๋ ๊ฒ์ ์ด๋ก์ ์ธ ์ผ์
๋๋ค. ์ฆ, ํ๋์ ๋ฌธ์ ๋ผ๊ธฐ๋ณด๋ค๋ ๊ต์ก์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ณธ ๋ณ์ ๊ฐ์ ์ ์ธํ๋ ํ ์ค๋ก ํด๊ฒฐ๋๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. Less v3.5๊ฐ ๋ ๊ด๋ํ ๊ฑฐ๋๋ก ์ด๋ํจ์๋ ๋ถ๊ตฌํ๊ณ ๊ฒฝ๋น์ ๋ด๋ถ์ ๋ณ์๊ฐ ๋ ๊ด๋ํ๊ฒ ํ๊ฐ๋ ์ ์์ต๋๊น?
๊ทธ๋ฌ๋ ๋ด ํฌํ๋ ์๋์ค์
๋๋ค. @the-variable: false;
๋ OP๊ฐ ์ถ๊ฐํด์ผ ํ ๋ชจ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ ๊ด๋ จ๋์ด ์๋ค๊ณ ์๊ฐํ๋ ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ง๋ฌธ์ด ์๋ ์ฌ๋์ less gitter ์ @me์ ์์ ๋กญ๊ฒ ๊ฒ์ํ์ธ์.
์ข์์, ๊ฐ์ฌํฉ๋๋ค @calvinjuarez.
์ด๊ฒ์ด ์ด๋ฆฐ ์ดํ์ ์ผ์ด๋ ์ผ์ if()
ํจ์์
๋๋ค. ๋ฐ๋ผ์ color: if((@variable), green, red);
๋ฅผ ํ ์ ์์ต๋๋ค.
@matthew-dean ์ด ํ์ ์์ฑํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. 3.0 ๋ฆด๋ฆฌ์ค ๋ ธํธ์์ if()๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ๋ณด์์ง๋ง ์ด ๋ฌธ์ ์ ๊ด๋ จ์ด ์์์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ๊ณ ์ ํ ์ฌ๋ก๊ฐ ์์์ต๋๋ค(๋จ, ์ถ์ ๋ฒ์ ์ ๋ง๋ค ์๊ฐ์ ์๋). ๋ค์ ํ ๋ฒ, ๋๋จํ ๊ฐ์ฌํฉ๋๋ค. ์ํ์ด, LESS ํ.
@kbav ๋ฌธ์ ์์ด์! ๊ทธ ํ์ ๋งจ ์์ ์๋ ๋ ๋ค๋ฅธ ํ: if()
์ด ์ฒ์ ๋์
๋์์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก when ๊ฐ๋๋ฅผ "ํฌํจ"ํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด ์ฃผ์์ ๊ดํธ๊ฐ ํ์ํ์ต๋๋ค(์: $#์์ when (@variable)
when
๋ค์ ๋ถ๋ถ) when (@variable)
). ๊ทธ๋ฌ๋ ์ด๋ Less 3.6์์ ์์ ๋์์ผ๋ฏ๋ก ์์ ์๋ ๊ดํธ ์์ด ์์ฑํ ์ ์์ต๋๋ค(์ต์ ๋ฒ์ ์ผ๋ก ์ปดํ์ผํ๋ ๊ฒฝ์ฐ).
color: if(<strong i="10">@variable</strong>, green, red);
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ์์ฒญ์ ๋ํ ์์ง์์ด ์์์ต๋๊น? ๋๋ ์ผ๋ง ๋์ ์ ์๋์ง ์์ ๋ณ์ ๊ฒ์ฌ์ ๋ํด ๋ถ์ํดํ์ต๋๋ค. ํ์ฌ๋ก์๋ ์ด์์ ์ด์ง ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค...
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์๋ํ๋ ค๋ฉด ๋ณ์๊ฐ ์กด์ฌํด์ผ ํ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก
null
๋ก ์ ์๋์ด์ผ ํฉ๋๋ค. ๋ณ์๊ฐ ์ฒ์์ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ๋์ ํ์ธํ ์ ์๋ค๋ฉด ํจ์ฌ ๋ ํจ๊ณผ์ ์ด๊ณ ์ ์ฐํ ๊ฒ์ ๋๋ค.