Less.js: `rgba()`์™€ ๊ฐ™์€ ๋‚ด์žฅ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 11์›” 13์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: less/less.js

CSS ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ ๋‚ด์šฉ์˜ ๊ตฌ๋ฌธ์€ ๋งค์šฐ ๊ด€๋Œ€ํ•˜์ง€๋งŒ rgba() ์™€ ๊ฐ™์€ ๋‚ด์žฅ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:
๋‚ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์ „์ฒด ์•ฑ UI์™€ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๊ฐ•์กฐ ์ƒ‰์ƒ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠน์ • ์œ„์น˜์—์„œ ํŽ˜์ด๋“œ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— rgb ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ CSS๋Š” fade(<strong i="8">@color</strong>, 50%) ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๋” ์ ๊ฒŒ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด rgba( var(--color), 0.5 ) ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Chrome์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ํ‘œ์ค€์—์„œ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ less ๋Š” ๋‹ค์Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค error evaluation function 'rgba': color functions take numbers as parameters .

์˜ˆ์ œ ์ฝ”๋“œ:

:root {
    --color-accent: 169,57,255;
}
button:hover {
    background-color: rgba(var(--color-accent), 0.2);
    color: rgb(var(--color-accent));
}

์ฐธ๊ณ : ์ด๊ฒƒ์€ ๋“œ๋กญ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์ ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ์— ๋‹ค๋ฅธ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒˆ๋กญ๊ณ  ๋น›๋‚˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค(๋˜ํ•œ ๋ฒ”์œ„ ์ง€์ • ๊ธฐ๋Šฅ ๋•Œ๋ฌธ์—).

BTW: ๊ทธ๋Ÿฐ ์—„๊ฒฉํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์–ด์จŒ๋“  ๋นŒ๋“œํ•˜๋Š” ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ค‘์ฒฉ ๊ทœ์น™์—์„œ ๊ด„ํ˜ธ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

feature request high priority

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

CSS ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ ๋‚ด์šฉ์˜ ๊ตฌ๋ฌธ์€ ๋งค์šฐ ๊ด€๋Œ€ํ•˜์ง€๋งŒ rgba() ์™€ ๊ฐ™์€ ๋‚ด์žฅ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:
๋‚ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์ „์ฒด ์•ฑ UI์™€ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๊ฐ•์กฐ ์ƒ‰์ƒ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠน์ • ์œ„์น˜์—์„œ ํŽ˜์ด๋“œ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— rgb ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ CSS๋Š” fade(<strong i="9">@color</strong>, 50%) ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๋” ์ ๊ฒŒ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด rgba( var(--color), 0.5 ) ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Chrome์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ํ‘œ์ค€์—์„œ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ less ๋Š” ๋‹ค์Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค error evaluation function 'rgba': color functions take numbers as parameters .

์˜ˆ์ œ ์ฝ”๋“œ:

:root {
  --color-accent: 169,57,255;
}
button:hover {
  background-color: rgba(var(--color-accent), 0.2);
  color: rgb(var(--color-accent));
}

์ฐธ๊ณ : ์ด๊ฒƒ์€ ๋“œ๋กญ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์ ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ์— ๋‹ค๋ฅธ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒˆ๋กญ๊ณ  ๋น›๋‚˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค(๋˜ํ•œ ๋ฒ”์œ„ ์ง€์ • ๊ธฐ๋Šฅ ๋•Œ๋ฌธ์—).

BTW: ๊ทธ๋Ÿฐ ์—„๊ฒฉํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์–ด์จŒ๋“  ๋นŒ๋“œํ•˜๋Š” ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ค‘์ฒฉ ๊ทœ์น™์—์„œ ๊ด„ํ˜ธ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์“ฐ์„ธ์š”~

:root {
    --color-accent: 169,57,255;
}
button:hover {
    background-color: ~"rgba(var(--color-accent), 0.2)";
    color: ~"rgb(var(--color-accent))";
}

๋ชจ๋“  14 ๋Œ“๊ธ€

๊ทธ๋ƒฅ ํƒˆ์ถœ .


์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์ด TR์— ์žˆ์„ ๋•Œ ํ™•์‹คํžˆ ๋ฌธ์ œ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— "๊ธฐ๋Šฅ ์š”์ฒญ" ๋ ˆ์ด๋ธ”์„ ๋ถ™์˜€์Šต๋‹ˆ๋‹ค. CSS ํ•จ์ˆ˜ args์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ๊ฐ์ง€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์–ธ์–ด์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ์ฃฝ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์Šฌํ”„์ง€๋งŒ, ์ฆ‰ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋””๋ฒ„๊ทธํ•  ๋•Œ๊นŒ์ง€ ๋” ์ด์ƒ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค).

์‚ฌ์šฉ์ž ์ง€์ • ์†์„ฑ์€ IE11์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์•„๋งˆ๋„ ๋‚ด๋…„ ์•ˆ์— ์ฃผ๋ฅ˜๋ฅผ ์ด๋ฃฐ ๊ฒƒ์ด๋ฏ€๋กœ ์ง€์›์ด ๊ณง ๊ตฌํ˜„๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Less, AFAIK์—๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์†์„ฑ ๊ฐ’์˜ ๋งค์šฐ ํ—ˆ์šฉ์ ์ธ ํŠน์„ฑ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ํ† ํฐ์ด ์•„๋‹Œ ํ•œ ์„ธ๋ฏธ์ฝœ๋ก ์„ ํฌํ•จํ•˜์—ฌ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋Œ€๊ด„ํ˜ธ ๋˜๋Š” ์ค‘๊ด„ํ˜ธ ์Œ์— ํฌํ•จ๋˜์ง€ ์•Š์Œ). ์ฐธ์กฐ: https://www.w3.org/TR/css-variables/#syntax

์ด ๋ณ€๊ฒฝ ์–ด์จŒ๋“  ํ™•์ธํ•˜๋Š” n์˜-์ธ์ˆ˜๋ฅผ ํ•„์š”๋กœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๊ฒƒ์„, ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๊ฐ€์ •ํ•œ๋‹ค (ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ ์–ด๋„ ์ผ๋ถ€ ์˜ค๋ฅ˜ ๊ฒ€์ฆ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด) rgba ๊ตฌํ˜„ ๋˜ํ•œ ์ˆœ์„œ ์ƒ‰์ƒ ๊ฐ’, ์˜ˆ๋ฅผ ๋“ค์–ด์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜ ํ˜•์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค :

rgba(var(--some), .42); // -> rgba(var(--some), .42)
rgba(#010101, .42); // -> rgba(1, 1, 1, .42)

์ผ๋ฐ˜์ ์œผ๋กœ args์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ธฐ์ˆ ์ ์œผ๋กœ var(--some-property) ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Less๊ฐ€ rgba() ์™€ ๊ฐ™์€ ๋‚ด์žฅ CSS ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ธ์ˆ˜๋ฅผ ํ•ด์„ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์™œ Less๊ฐ€ ๋‚ด์žฅ CSS ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์—„๊ฒฉํ•œ ๊ฐ’ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ? ํ‘œํ˜„์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด?

https://github.com/less/less.js/blob/master/lib/less/functions/color.js#L34 ์—์„œ ๋‚ด์žฅ CSS ํ•จ์ˆ˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ IMO๋Š” ๋Œ€๋ถ€๋ถ„ ๊ทธ๋ ‡์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ ์žˆ์–ด. Less๋Š” ๋ฆฐํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฉฐ Less ํ•จ์ˆ˜๋„ ์•„๋‹™๋‹ˆ๋‹ค. ํŒŒ์„œ๊ฐ€ CSS ๊ธฐ๋Šฅ์—์„œ ๋งค์šฐ ์˜๋ฆฌํ•ด์ง€๋ ค๊ณ  ํ•˜๋ฉด ์‹คํŒจํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ์˜ ์›์ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Less๋Š” ํ˜„์žฌ ์ผ๋ฐ˜ CSS ์ƒ‰์ƒ ๊ธฐ๋Šฅ์„ ํ†ต๊ณผ์‹œํ‚ค๋Š” ๋Œ€์‹  ์›์ˆญ์ด ํŒจ์น˜๋ฅผ ์ ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ง rgb() rgba() ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์— ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 4๋…„ ์ „์— ์ถ”๊ฐ€๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•„์ง ์ง€์›๋˜์ง€ ์•Š๋Š” ์ƒˆ๋กœ์šด ์ƒ‰์ƒ ๊ธฐ๋Šฅ์— ๊ท ํ˜•์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๊ทผ๊ฑฐ๊ฐ€ ์•„๋‹๊นŒ์š”? ๐Ÿค” @lukeapage ์•„์ง ๋‹ต๋ณ€ํ•ด์ฃผ์‹ค ๋ถ„

#3214์—์„œ ๋‚ด ์˜๊ฒฌ์„ ๊ณ ๋ คํ•  ๋•Œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋น ๋ฅธ ์ˆ˜์ •์€ ํ•ด๋‹น ํ•จ์ˆ˜ ๊ตฌํ˜„์—์„œ "if (nargs < 3/4) css ๋ฌธ์ž์—ด๋กœ ํด๋ฐฑ(์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Œ)"์ž…๋‹ˆ๋‹ค.

(๊ทธ๋ฆฌ๊ณ  ๋” ์—„๊ฒฉํ•œ ์ˆ˜์ •์€ ๋ชจ๋“  ํ•จ์ˆ˜์˜ ๋ชจ๋“  ์ธ์ˆ˜๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ํ‰๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ์ƒ‰์ƒ ๊ฐœ์ฒด ๋˜๋Š” CSS ๋ฌธ์ž์—ด ํด๋ฐฑ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค).

#3214์—์„œ ๋‚ด ์˜๊ฒฌ์„ ๊ณ ๋ คํ•  ๋•Œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋น ๋ฅธ ์ˆ˜์ •์€ ํ•ด๋‹น ํ•จ์ˆ˜ ๊ตฌํ˜„์—์„œ "if (nargs < 3/4) css ๋ฌธ์ž์—ด๋กœ ํด๋ฐฑ(์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Œ)"์ž…๋‹ˆ๋‹ค.

var() ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ์ˆ˜ํ‘œ ?

darken(rgba(var(--red-value), 2, 3, .4), 5%)

์ฆ‰, ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. n-args์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํ•จ์ˆ˜์˜ ํ†ต๊ณผ๋ฅผ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ฏธ์นœ ๋“ฏ์ด ์ผ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํŠน๋ณ„ (๊ธฐ๋Šฅ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋Œ€ํ•ด์ด ์ดํ›„ ์šฐ๋ฆฌ๋Š” ํŠน๋ณ„ํžˆ ํ”Œ๋ž˜๊ทธ ๊ธฐ๋Šฅ์— ํ•„์š” ๊ฐ€์ • toString() ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ์ •๊ทœ์‹ ์ธ์ˆ˜ ๊ณ„์‚ฐ - (๊ฐ€)์—๋งŒ JS์— ๋ฐ˜์‚ฌ ์œ ํ˜•์˜ AFAIK์„, ๋‹น์‹ ์„ TypeScript๋กœ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ์—๊ฒŒ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)
  2. ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ Less ํ•จ์ˆ˜ ํ‰๊ฐ€์—์„œ ์‚ฌ์šฉ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์˜ ๋„์ž…์œผ๋กœ ์ธํ•ด CSS ํ•จ์ˆ˜๊ฐ€ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ํ•ด์„๋˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์–ด๋Š ์ •๋„ ์šฐ๋ฆฌ๋Š” ์ •์  ์ „์ฒ˜๋ฆฌ ์‹œ๋Œ€์˜ ๋์ž๋ฝ์— ์™€ ์žˆ์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋…ผ์˜์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์˜ ๋„์ž…์œผ๋กœ ์ธํ•ด CSS ํ•จ์ˆ˜๊ฐ€ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ํ•ด์„๋˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ •๋ง ์ƒˆ๋กœ์šด ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. Less๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์€ v1.x๋ถ€ํ„ฐ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ๋ถ€ํ’€๋ฆฌ์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋Œ€ํ•ด ํŠน๋ณ„ํ•œ ๊ฒƒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜์— ํŠน๋ณ„ํžˆ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ, ๊ธฐ๋Šฅ ๊ทธ๋ƒฅ ๋ฐ˜ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค undefined (๋˜๋Š” null ) ๊ทธ๋“ค์€ ๊ทธ๋“ค์˜ ์ธ์ˆ˜๋ฅผ ํ‰๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ์ฐพ์„ ๊ฒฝ์šฐ : ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ทธ๋“ค์€ ๋˜ํ•œ ์ธ์ˆ˜๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ์•Š๋Š” (100 % ๋ถˆ๊ทœ์น™ํ•˜๊ณ  ๋” ๋‚˜์€์—์˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ). .
๊ทธ๋ฆฌ๊ณ  ์ •์˜๋˜์ง€ ์•Š์€ ๋ฐ˜ํ™˜ ๊ฐ’์€ ํ•จ์ˆ˜ ํ‰๊ฐ€์ž๊ฐ€ ์ดˆ๊ธฐ ๋ฌธ์ž์—ด ํ‘œํ˜„์ธ Demo ๋กœ ํด๋ฐฑํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.

var() ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ์ˆ˜ํ‘œ

๋˜ํ•œ ์•„๋‹ˆ์š”, var ๋˜๋Š” ํŠน์ • ํ•ญ๋ชฉ(CSS ๋ฏธ๋ž˜์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ํ•ญ๋ชฉ)์„ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์š”์ ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ํ‰๊ฐ€ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ(์•Œ ์ˆ˜ ์—†๋Š” ๊ฒƒ) ๋Œ€์‹  ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ(์•Œ๋ ค์ง„ ๊ฒƒ)์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
(์„ธ๋ถ€ ์‚ฌํ•ญ์€ ํŠน์ • ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ๋งค์šฐ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค).


Btw., --var ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋‚ด์žฅ๋œ Less ํ•จ์ˆ˜( ๋ชจ๋“  ident(...) )์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ๋‹จ์ˆœํžˆ ์ž์ฒด ๋ฌธ์ž์—ด ํ‘œํ˜„์œผ๋กœ ๋Œ€์ฒด๋จ) ) ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ(์˜ˆ: ํ”Œ๋Ÿฌ๊ทธ์ธ)์€ ์ž ์žฌ์ ์œผ๋กœ ํ‰๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ๊ตฌํ˜„์œผ๋กœ ์ด๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@seven-phases-max ์˜ค ์ข‹์•„, ๊ทธ๋ž˜์„œ ๊ฐ„๋‹จํ•œ ์ˆ˜์ •์€ ์ด๋Ÿฌํ•œ CSS/Less ํ•จ์ˆ˜๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๊ธฐ๋ณด๋‹ค undefined๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ(์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด)? ๊ทธ๊ฒƒ์€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. 2( darken() ์™€ ๊ฐ™์€)๋Š” arg(์ด ์‹œ์ ์—์„œ rgba() ์ต๋ช… ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๊นŒ?)๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์—ฌ์ „ํžˆ ๋˜์ ธ์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‚˜ ์ž์‹ ๊ณผ ๋…ผ์Ÿ :

๋˜ํ•œ ์•„๋‹ˆ์˜ค, var() ๋˜๋Š” ํŠน์ • ํ•ญ๋ชฉ(CSS ๋ฏธ๋ž˜์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ํ•ญ๋ชฉ)์„ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ํ•จ์ˆ˜๊ฐ€ rgba(var(...), ...) ์™€ rgba(foo, ...) ๊ตฌ๋ณ„ํ•˜๊ณ  ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ๋„๋ก var ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์‹ฌ์ง€์–ด ์œ ํ˜น์ ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค). ํ›„์ž์˜ ๊ฒฝ์šฐ์—๋Š” CSS์— ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
(๋‘ ๊ฐ€์ง€ ๋ณ€ํ˜• ๋ชจ๋‘ ๊ดœ์ฐฎ์œผ๋ฉฐ ๊ท ํ˜•์„ ์ฐพ๊ณ /ํ•˜๊ฑฐ๋‚˜ ์œ ์ง€ ๊ด€๋ฆฌ์ž์˜ ๋ถ€๋‹ด์„ ๋œ ์˜ˆ์ธกํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค...).

@matthew-dean

๊ทธ๊ฒƒ์€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. 2(darken()์™€ ๊ฐ™์ด)๋Š” arg(์ด ์‹œ์ ์—์„œ rgba() ์ต๋ช… ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๊นŒ?)๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์—ฌ์ „ํžˆ ๋˜์ ธ์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ์ •ํ™•ํžˆ - ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ด์ƒ์ ์œผ๋กœ๋Š” darken ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ) ํ˜„์žฌ "a.toHSL is not a function" ์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฝค ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค).

๊ธ€์Ž„, ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ๊ฒƒ์€ rgba(calc(1),1,1) ์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋ธŒ๋ผ์šฐ์ €์— ์˜ํ•ด ์œ ํšจํ•œ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(calc ๋ฐ 3 ๋Œ€ 4 ์ธ์ˆ˜ ๋ชจ๋‘์— ์œ ์˜). ๋‚˜๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์œผ๋กœ ๊ทธ๋ƒฅ ์ถœ๋ ฅํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ๋Š” ํ‰๊ฐ€ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ(์•Œ ์ˆ˜ ์—†๋Š” ๊ฒƒ) ๋Œ€์‹  ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ(์•Œ๋ ค์ง„ ๊ฒƒ)์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Less rgba ์œ ํšจํ•œ ์œ ์ผํ•œ ์ธ์ˆ˜๋Š” ์ˆซ์ž ๋˜๋Š” ์ƒ‰์ƒ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค( rgba(#123, .42) ์™€ ๊ฐ™์€ "neo"-"CSS4"์™€ ๊ฐ™์€ ํ˜•์‹๋„ ๊ณ ๋ คํ•˜๋Š” ๊ฒฝ์šฐ).
๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ์˜ค๋ฅ˜ ๋˜๋Š” (์•Œ ์ˆ˜ ์—†์ง€๋งŒ ์ž ์žฌ์ ์œผ๋กœ ์œ ํšจํ•œ) CSS ๊ฐ’์ž…๋‹ˆ๋‹ค.

CSS ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ ๋‚ด์šฉ์˜ ๊ตฌ๋ฌธ์€ ๋งค์šฐ ๊ด€๋Œ€ํ•˜์ง€๋งŒ rgba() ์™€ ๊ฐ™์€ ๋‚ด์žฅ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:
๋‚ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์ „์ฒด ์•ฑ UI์™€ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๊ฐ•์กฐ ์ƒ‰์ƒ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠน์ • ์œ„์น˜์—์„œ ํŽ˜์ด๋“œ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— rgb ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ CSS๋Š” fade(<strong i="9">@color</strong>, 50%) ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๋” ์ ๊ฒŒ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด rgba( var(--color), 0.5 ) ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Chrome์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ํ‘œ์ค€์—์„œ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ less ๋Š” ๋‹ค์Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค error evaluation function 'rgba': color functions take numbers as parameters .

์˜ˆ์ œ ์ฝ”๋“œ:

:root {
  --color-accent: 169,57,255;
}
button:hover {
  background-color: rgba(var(--color-accent), 0.2);
  color: rgb(var(--color-accent));
}

์ฐธ๊ณ : ์ด๊ฒƒ์€ ๋“œ๋กญ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์ ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ์— ๋‹ค๋ฅธ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒˆ๋กญ๊ณ  ๋น›๋‚˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค(๋˜ํ•œ ๋ฒ”์œ„ ์ง€์ • ๊ธฐ๋Šฅ ๋•Œ๋ฌธ์—).

BTW: ๊ทธ๋Ÿฐ ์—„๊ฒฉํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์–ด์จŒ๋“  ๋นŒ๋“œํ•˜๋Š” ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ค‘์ฒฉ ๊ทœ์น™์—์„œ ๊ด„ํ˜ธ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์“ฐ์„ธ์š”~

:root {
    --color-accent: 169,57,255;
}
button:hover {
    background-color: ~"rgba(var(--color-accent), 0.2)";
    color: ~"rgb(var(--color-accent))";
}

@weivea Less 3.x์˜ ์ตœ์‹  ๋ฒ„์ „์—์„œ๋Š” ์ด๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ rgba(var(--color-accent)) ๋ผ๊ณ  ์“ฐ์„ธ์š”.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰