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