Libsass: ์ƒˆ๋กœ์šด CSS ํ•„ํ„ฐ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ Sass ๊ธฐ๋Šฅ๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2013๋…„ 08์›” 16์ผ  ยท  26์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: sass/libsass

๋‹ค์Œ ์ฝ”๋“œ :

foo {
  -webkit-filter: grayscale(100%);
}

sass 3.2.10์—์„œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

foo {
  -webkit-filter: grayscale(100%); }

๊ทธ๋Ÿฌ๋‚˜ libsass ๋งˆ์Šคํ„ฐ (ํ˜„์žฌ 4dd61de67aa0284cd8da1e8f13e2f6b63b990041)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์Œ :

/private/tmp/test/grayscale.scss:2: error: argument `$color` of `grayscale($color)` must be a color
Backtrace:
    /private/tmp/test/grayscale.scss:2, in function `grayscale`
    /private/tmp/test/grayscale.scss:2

์ด๊ฒƒ์€ ๋‚ด์žฅ ๋œ ๊ทธ๋ ˆ์ด ์Šค์ผ€์ผ ๊ธฐ๋Šฅ๊ณผ ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Bug - Confirmed Dev - Test Written

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

๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : filter: invert() ๋Œ€์‹  filter: #{"invert()"} . ๋”ฐ์˜ดํ‘œ ์•ˆ์— ์›ํ•˜๋Š” ๊ฒƒ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

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

๋„ค, ๋‚˜๋„ ์ด๊ฑธ ์ณค์–ด์š”.

์ด๊ฒƒ๋„ ์น˜๋Š” ๊ฒƒ.

: +1 :

์ด๊ฒƒ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ @extend ์ž‘์—… ์ค‘์ด์ง€๋งŒ ํœด์ผ ์ „์—์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค!

์ด ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

: +1 :

darken() ๋ฐ saturate() ๋„ ์˜ํ–ฅ์„ ๋ฐ›๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ๋™์•ˆ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋กญ ์ธ ์†”๋ฃจ์…˜์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

<strong i="6">@function</strong> grayscale($value) {
  <strong i="7">@return</strong> #{ "grayscale(" + $value + ")" };
}

์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ณต๊ธ‰ ์—…์ฒด ์ ‘๋‘์‚ฌ๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<strong i="11">@mixin</strong> filter($properties) {
  // Your vendor prefixing stuff here, I am using Bourbon:
  <strong i="12">@include</strong> prefixer(filter, $properties, webkit moz spec);
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<strong i="16">@include</strong> filter(grayscale(100%));

์—ฌ๊ธฐ์— ์ฐธ๊ณ  ์šฉ์œผ๋กœ ๋„ฃ์œผ์‹ญ์‹œ์˜ค.
https://developer.mozilla.org/en-US/docs/Web/CSS/filter

@kennethormandy ๋‘ ๊ฐœ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” SASS ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ?

<strong i="7">@function</strong> darken($color, $amount) {
  <strong i="8">@return</strong> #{ "darken(" + $color + "," + $amount ")" };
}

.selector {
    border: 1px solid darken(#f0f1f4, 3);
}

์ถœ๋ ฅ :

border: 1px solid darken(#f0f1f4,3"");

โ€ฆํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ darken ์ถœ๋ ฅํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ƒ‰์ƒ ๊ฐ’์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์™€, darken() ์ด (๊ฐ€) ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. @restlessdesign , ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด darken() ์ด๋ฏธ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

.selector {
    border: 1px solid darken(#f0f1f4, 3);
}

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ์–ป์„ ๊ฒƒ์ด๋‹ค

.selector {
  border:1px solid #e7e9ee;
}

๋‚˜๋Š” ๋‹น์‹ ์ด (์ดํ•ดํ•  ๋งŒํ•˜๊ฒŒ) Sass์˜ ๊ธฐ๋Šฅ์„ CSS ํ•„ํ„ฐ์™€ ํ˜ผํ•ฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ค€ ์˜ˆ์ œ๋Š” CSS Filter ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Sass์˜ ์–ด๋‘ก๊ฒŒ ๋˜๋Š” ํฌํ™” ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ Sass ๋ฌธ์„œ์— ๋”ฐ๋ผ ์ด๋ฏธ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. CSS ํ•„ํ„ฐ ํฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‚ด greyscale() ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๊ณ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. CSS darken() ํ•„ํ„ฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์‹ค์ œ๋กœ libsass์˜ ๋‚ด์žฅ ์–ด๋‘ก๊ฒŒ ๊ธฐ๋Šฅ์„ ์ง€๊ธˆ ๋ฎ์–ด ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์‹ค์ˆ˜. ๋‚˜๋Š” ์ค‘์ฒฉ ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์ „ํ™” adjust_hue ๋Œ€์‹  adjust-hue ๋กœ ์บ์Šค์ผ€์ด๋“œํ•˜๋Š” darken() . ์ž”์ธํ•˜์ง€๋งŒ LibSass๊ฐ€ ์‹ค์ œ๋กœ ์˜ค๋ฅ˜๋ฅผ๋ณด๊ณ ํ•˜๊ฑฐ๋‚˜ ์กฐ์šฉํžˆ ํ˜ธ์ถœ์„ ๋ฌด์‹œํ•˜๋Š” ๋Œ€์‹  ์ž˜๋ชป๋œ ์ถœ๋ ฅ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค! ์ž˜๋ชป๋œ ๊ฒฝ๋ณด๋กœ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

+1
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ (@kennethormandy์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค) ๊ณ ์ณ์ง€๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ž‘๋™ํ•˜์ง€๋งŒ ์œ„์— ์ œ๊ณต๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋‚œ๋… ํ™”ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž˜ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ณ  =)

+1

+1

+1

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์œ„ํ•ด @kennethormandy ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

+1. ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ  : ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด @kennethormandy ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋„ ๋ฐฉ๊ธˆ ์—ด๊ณ  ๋‹ซ์•˜์Šต๋‹ˆ๋‹ค. ๊ฒน์น˜๋Š” ๊ตฌ๋ฌธ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ ์  ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด CSS์˜ ๊ทผ๋ณธ์ ์ธ ๋ณ€ํ™”๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ @kennethormandy , ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์•„์ด๋””์–ด์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ ์‹ค์ œ grayscale() ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ๋”์ฐํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ง„์ •ํ•œ ์ˆ˜์ •์ด ๊ณง ์˜ฌ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : filter: invert() ๋Œ€์‹  filter: #{"invert()"} . ๋”ฐ์˜ดํ‘œ ์•ˆ์— ์›ํ•˜๋Š” ๊ฒƒ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

์ข‹์•„, ์šฐ๋ฆฌ๊ฐ€ 3.0์—์„œ ์ด๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์ž.

@tamlyn ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” Scout.app์„ ์‚ฌ์šฉํ•ด ์™”๋Š”๋ฐ, ์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ด์ „ ๋ฒ„์ „์˜ Sass์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹น์‹ ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š” ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

@ ํ•จ์ˆ˜ ํ•„ํ„ฐ ($ filter, $ value) {
@return # {$ filter} # { "("+ $ value + ")"}
}

$ ์ ‘๋‘์‚ฌ :
"-์›นํ‚ท-",
"-moz-",
"-ms-",
"-์˜ํ˜•-",
์—†๋Š”;

@mixin ์ ‘๋‘์‚ฌ ($ property, $ value) {
$ prefixes {์˜ @each $ prefix
# {$ prefix} # {$ property} : $ value;
}
}

@restlessdesign ์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ €๋Š” ์ด๊ฒƒ์„ ๋งค์šฐ ๋Šฆ๊ฒŒ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋ฐฉ๊ธˆ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ํ•„ํ„ฐ ํ•จ์ˆ˜๋ฅผ ์ธ์šฉ ํ•œ ๋‹ค์Œ unquote ()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.
* { filter: unquote("filter-function(values)") }

๊ทธ๋ฆฌ๊ณ  ์ถœ๋ ฅ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

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