๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Syntax-05-operations

Sass(SCSS) Syntax - 5. ์—ฐ์‚ฐ(Operations)#

โ—๏ธ ํ•ด๋‹น ๊ธ€์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค - ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๊ฐ•์˜์—์„œ HTML & CSS, SASS(SCSS) Part์˜ ๋ฐ•์˜์›… ๊ฐ•์‚ฌ๋‹˜์˜ ๊ฐ•์˜์ž๋ฃŒ(Sass(SCSS) ์™„์ „ ์ •๋ณต!)๋ฅผ ๋ณด๋ฉฐ ์ •๋ฆฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฐ์‚ฐ(Operations)#

Sass์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ์—ฐ์‚ฐ ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ ˆ์ด์•„์›ƒ ์ž‘์—…์‹œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๊ฑฐ๋‚˜ ์ •ํ•ด์ง„ ๊ฐ’์„ ๋‚˜๋ˆ ์„œ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์œ ์šฉ.

Sass์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์ž ์ข…๋ฅ˜

์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž:

์ข…๋ฅ˜์„ค๋ช…์ฃผ์˜์‚ฌํ•ญ
+๋”ํ•˜๊ธฐ
-๋นผ๊ธฐ
*๊ณฑํ•˜๊ธฐํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’์ด ๋ฐ˜๋“œ์‹œ ์ˆซ์ž(Number)
/๋‚˜๋ˆ„๊ธฐ์˜ค๋ฅธ์ชฝ ๊ฐ’์ด ๋ฐ˜๋“œ์‹œ ์ˆซ์ž(Number)
%๋‚˜๋จธ์ง€

โ˜๏ธ 10px * 10px = error! , 10px / 2px = error!

๋น„๊ต ์—ฐ์‚ฐ์ž:

์ข…๋ฅ˜์„ค๋ช…
==๋™๋“ฑ
!=๋ถ€๋“ฑ
<๋Œ€์†Œ / ๋ณด๋‹ค ์ž‘์€
>๋Œ€์†Œ / ๋ณด๋‹ค ํฐ
<=๋Œ€์†Œ ๋ฐ ๋™๋“ฑ / ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€
>=๋Œ€์†Œ ๋ฐ ๋™๋“ฑ / ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€

๋…ผ๋ฆฌ(๋ถˆ๋ฆฐ, Boolean) ์—ฐ์‚ฐ์ž:

์ข…๋ฅ˜์„ค๋ช…
and๊ทธ๋ฆฌ๊ณ 
or๋˜๋Š”
not๋ถ€์ •

์ˆซ์ž(Numbers)#

์ƒ๋Œ€์  ๋‹จ์œ„ ์—ฐ์‚ฐ#

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ ˆ๋Œ€๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” px ๋‹จ์œ„๋กœ ์—ฐ์‚ฐ์„ ํ•˜๋Š”๋ฐ, ์ƒ๋Œ€์  ๋‹จ์œ„( % , em , vw ๋“ฑ)์™€ px ๋‹จ์œ„๋ฅผ ๊ฐ™์ด ์—ฐ์‚ฐํ•  ๊ฒฝ์šฐ CSS์˜ calc() ๋กœ ์—ฐ์‚ฐํ•ด์•ผ ํ•œ๋‹ค.

width: 50% - 20px;  // ๋‹จ์œ„ ๋ชจ์ˆœ ์—๋Ÿฌ(Incompatible units error)width: calc(50% - 20px);  // ์—ฐ์‚ฐ ๊ฐ€๋Šฅ

๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์˜ ์ฃผ์˜์‚ฌํ•ญ#

CSS๋Š” ์†์„ฑ ๊ฐ’์˜ ์ˆซ์ž๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ / ๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— / ๊ฐ€ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, font: 16px / 22px serif; ๊ฐ™์€ ๊ฒฝ์šฐ font-size: 16px ์™€ line-height: 22px ์˜ ์†์„ฑ๊ฐ’ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ / ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์ž๋งŒ ์—ฐ์‚ฐ ๋˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

SCSS:

div {  width: 20px + 20px;  // ๋”ํ•˜๊ธฐ  height: 40px - 10px;  // ๋นผ๊ธฐ  font-size: 10px * 2;  // ๊ณฑํ•˜๊ธฐ  margin: 30px / 2;  // ๋‚˜๋ˆ„๊ธฐ}

์ปดํŒŒ์ผํ•˜๋ฉด,

div {width: 40px;  /* OK */height: 30px;  /* OK */font-size: 20px;  /* OK */margin: 30px / 2;  /* ?? */}

๋”ฐ๋ผ์„œ / ๋ฅผ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•œ๋‹ค.

  • ๊ฐ’ ๋˜๋Š” ๊ทธ ์ผ๋ถ€๊ฐ€ ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์— ์˜ํ•ด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ

  • ๊ฐ’์ด () ๋กœ ๋ฌถ์—ฌ์žˆ๋Š” ๊ฒฝ์šฐ

  • ๊ฐ’์ด ๋‹ค๋ฅธ ์‚ฐ์ˆ  ํ‘œํ˜„์‹์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ

SCSS:

div {  $x: 100px;  width: $x / 2;  // ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ๋‚˜๋ˆ„๊ธฐ  height: (100px / 2);  // ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์„œ ๋‚˜๋ˆ„๊ธฐ  font-size: 10px + 12px / 3;  // ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ}

์ปดํŒŒ์ผํ•˜๋ฉด,

div {width: 50px;height: 50px;font-size: 14px;}

๋ฌธ์ž(Strings)#

๋ฌธ์ž ์—ฐ์‚ฐ์—๋„ + ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ๋ฌธ์ž ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋Š” ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž์— ๋”ฐ์˜ดํ‘œ๊ฐ€ ๋ถ™์–ด์žˆ๋‹ค๋ฉด ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ๊ณ , ๋ฐ˜๋Œ€๋กœ ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž์— ๋”ฐ์˜ดํ‘œ๊ฐ€ ๋ถ™์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋„ ๋”ฐ์˜ดํ‘œ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€์•Š๋Š”๋‹ค.

SCSS:

div::after {  content: "Hello " + World;  flex-flow: row + "-reverse" + " " + wrap}

์ปดํŒŒ์ผํ•˜๋ฉด,

div::after {content: "Hello World";flex-flow: row-reverse wrap;}

์ƒ‰์ƒ(Colors)#

์ƒ‰์ƒ๋„ ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

SCSS:

div {  color: #123456 + #345678;  // R: 12 + 34 = 46  // G: 34 + 56 = 8a  // B: 56 + 78 = ce  background: rgba(50, 100, 150, .5) + rgba(10, 20, 30, .5);  // R: 50 + 10 = 60  // G: 100 + 20 = 120  // B: 150 + 30 = 180  // A: Alpha channels must be equal}

โ˜๏ธ 16์ง„์ˆ˜ ์—ฐ์‚ฐ, rgba() ์—ฐ์‚ฐ ๋ชจ๋‘ ๊ฐ€๋Šฅ.

์ปดํŒŒ์ผํ•˜๋ฉด,

div {  color: #468ace;  background: rgba(60, 120, 180, 0.5);}

โ˜๏ธ ๋‹จ, rgba() ์—์„œ Alpha ๊ฐ’์€ ์—ฐ์‚ฐ๋˜์ง€ ์•Š์œผ๋ฉฐ ์„œ๋กœ ๋™์ผํ•ด์•ผ ๋‹ค๋ฅธ ๊ฐ’์˜ ์—ฐ์‚ฐ์ด๊ฐ€๋Šฅํ•œ๋ฐ, Alpha ๊ฐ’์„ ์—ฐ์‚ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ‰์ƒ ํ•จ์ˆ˜(Color Functions)๋ฅผ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”— opacify(), transparentize()

SCSS:

$color: rgba(10, 20, 30, .5);div {  color: opacify($color, .3);  // 30% ๋” ๋ถˆํˆฌ๋ช…ํ•˜๊ฒŒ / 0.5 + 0.3  background-color: transparentize($color, .2);  // 20% ๋” ํˆฌ๋ช…ํ•˜๊ฒŒ / 0.5 - 0.2}

์ปดํŒŒ์ผํ•˜๋ฉด,

div {color: rgba(10, 20, 30, 0.8);background-color: rgba(10, 20, 30, 0.3);}

๋…ผ๋ฆฌ(Boolean)#

Sass์˜ @if ์กฐ๊ฑด๋ฌธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋…ผ๋ฆฌ(Boolean) ์—ฐ์‚ฐ์—๋Š” โ€˜๊ทธ๋ฆฌ๊ณ โ€™, โ€˜๋˜๋Š”โ€™, โ€™๋ถ€์ •โ€™ ์ด ์žˆ๋‹ค.

์ข…๋ฅ˜์„ค๋ช…
and๊ทธ๋ฆฌ๊ณ 
or๋˜๋Š”
not๋ถ€์ •(๋ฐ˜๋Œ€)

SCSS:

$width: 90px;div {  @if not ($width > 100px) {    height: 300px;  }}

์ปดํŒŒ์ผํ•˜๋ฉด,

div {height: 300px;}

Reference#

ํŒจ์ŠคํŠธ์บ ํผ์Šค - ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๊ฐ•์˜ - HTML & CSS, SASS(SCSS) Part by ParkYoungWoong

Sass(SCSS) ์™„์ „ ์ •๋ณต!