๋ฐ์ํ
1๏ธโฃ Sass ๋?
- Sass๋ CSS๋ก ์ปดํ์ผ๋๋ ์คํ์ผ ์ํธ ํ์ฅ ์ธ์ด์ด๋ฉฐ CSS ์ ์ฒ๋ฆฌ๊ธฐ
- ๋ธ๋ผ์ฐ์ ๊ฐ Sassํ์ผ์ ์ง์ ์ฝ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ Sass๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ ํ, ์ผ๋ฐ CSS๋ก ์ปดํ์ผ!
์ปดํ์ผ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ํฐ๋ฏธ๋์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ, VS Code์ ์ต์คํ ์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. - Sass์ Scss๊ฐ ์๋๋ฐ ์ผ๋ฐ์ ์ผ๋ก CSS์ ๋์ผํ๊ฒ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ๋ Scss๋ฅผ ์ฌ์ฉ.
- ๋ณธ ํฌ์คํ ์ Scss๋ฌธ๋ฒ์ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์ด ์์ต๋๋ค. :)
//SCSS ํ์ {} css์ ๋์ผํ๊ฒ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ถ์ฅ๋ฉ๋๋ค.
$font-stack: Helvetica, sans-serif;
$primary-color : #333;
body {
font: 100% $font-stack
color: $primary-color
}
//SASS ํ์
$font-stack: Helvetica, sans-serif
$primary-color : #333
body
font: 100% $font-stack
color: $primary-color
2๏ธโฃ Nesting
- html๊ณผ ๋์ผํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด ๋ถ๋ชจ์๊ฒ ์์๋ ์์ ์์์๊ฒ ์คํ์ผ์ ์ ์ฉํ๋ ์ค์ฒฉ ์์ฑ๋ฒ.
- 2depth ์ด์์ ์ค์ฒฉ์ ์ง์ํ ๊ฒ.
- ๊น์ ์ค์ฒฉ์ ํ๊ฒ ๋๋ฉด์ ๋ถํ์ํ ์ ํ์๋ค์ด ์ฌ์ฉ๋ ์ ์์ผ๋ ์ฃผ์!
/* ์ฌ๋ฌ์ค ์ฃผ์์ CSS ์ปดํ์ผ์ด ๋์์ ๋ ๋ณผ ์ ์์ต๋๋ค. */
// ํ ์ค ์ฃผ์์ ๋ค๋ฅธ ํ์ผ์์ ์ ๋ณด์ด๊ณ SCSSํ์ผ์์๋ง ๋ณผ ์ ์์ต๋๋ค.
.one {
color: blue;
.two {
color: green;
.three {
color: red;
}
}
}
ul {
li {
color: red;
font-size: 10px;
}
}
3๏ธโฃ ampersand
- &: ๋ช ๋ น์ด๋ก ๊ฐ์์์, ๊ฐ์์ ํ์๋ฅผ ์ ํํ๋ ์ฐํผ์๋ ๋ฌธ๋ฒ.
- ๊ฐ์์ ํ์ ํ์ฉ ์์ &:focus{} &:hover{} &:active{} &:first-child{} &:nth-child(2){}
- ๊ฐ์ ์์ ํ์ฉ ์์ &::after{} &::before{}
// ? ๊ฐ์์ ํ์
ul {
li {
&:hover {
background: white;
cursor: pointer;
&:last-child {
border: 2px solid black;
}
}
}
}
// ? ๊ฐ์์์
ol {
border: 1px solid black;
li {
&:nth-child(1) {
color: red;
}
&:nth-child(2) {
color: orangered;
}
}
}
4๏ธโฃ Variable
- ๋ณ์ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด SCSS ๋ฌธ์ ๋ด์์ ํด๋นํ๋ ๊ฐ์ ๋ฐ๋ณตํด์ ํธ์ถํ ์ ์๋ค.
- $ ๊ธฐํธ๋ฅผ ์ฌ์ฉํด์ ์คํ์ผ์ ์ ์ฉํ ๊ฐ(์์, ํฐํธ ์ฌ์ด์ฆ, ์ด๋ฏธ์งurl)์ ์ ์ฅ.
- ๋ณ์ ํํ๋ก๋ numbers strings color booleans lists maps null์ด ์๋ค.
1. String(๋ฌธ์์ด) ๋ณ์ ์ฌ์ฉ ์์
// ๋ณ์๋ช
์ค์
/* ์์ */
$red: #ee4444;
$black: #222;
$bg-color: #3e5e9e;
$p-color: #282A36;
$link-color: red;
/* ํฐํธ์ฌ์ด์ฆ */
$font-p: 13px;
$font-h1: 28px;
/* ํฐํธ */
$base-font: 'Noto Sans KR', sans-serif;
/* ๋ฐฐ๊ฒฝ */
$path : './assets/img/';
$name : 'background.png';
// ๋ณ์๋ฅผ ์์์ ํ์ฉ
.cover {
background-image: url($path + $name);
}
.box {
background: $black;
color: $red;
font-size: $font-p;
}
2. List ๋ณ์ ์ฌ์ฉ ์์
- list๋ ์์๊ฐ ์๋ ๊ฐ์ผ๋ก, ์ฒซ ๋ฒ์งธ ์์๋ถํฐ 1,2,3 ... ์ธ๋ฑ์ค๋ฅผ ๊ฐ๊ณ ์๋ค.
- list๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ , / ๋ก ๊ตฌ๋ถํด์ ์์๋ค์ ๋์ด.
- list๋ฅผ ์์ฑํ ํ์ ํธ์ถํ ๋๋ ์๋์ ์๋ ๋ด์ฅ ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
- append(list,value,[separator]) lists์ ๊ฐ์ ์ถ๊ฐํ๋ ํจ์.
- index(list,value) lists์ ๊ฐ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๋ฆฌํดํ๋ ํจ์.
- nth(list, n) lists์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์.
// ๋ณ์๋ช
์ค์
$size: 10px, 20px, 30px, 40px, 50px, 60px, 70px, 80px, 90px, 100px, 110px, 120px;
// ๋ณ์๋ฅผ ์์์ ํ์ฉ
.size-lg {
width: nth($size, 10);
padding: nth($size, 2) 0 0;
}
.size-md {
width: nth($size, 5);
}
.size-sm {
width: nth($size, 2);
}
3. Map ๋ณ์ ์ฌ์ฉ ์์
- map์ ( ) ๊ดํธ ์์ ํค:๊ฐ์ ํํ๋ก ๋์ดํ์ฌ ์ฌ์ฉ
- map์ ์์ฑํ ํ์ ํธ์ถํ ๋๋ ์๋์ ์๋ ๋ด์ฅ ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
- map-get(map,key) ํค์ ํด๋นํ๋ ๊ฐ์ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์
- map-keys(map) map์ ๋ค์ด์๋ ํค(key) ์ ๋ถ๋ฅผ ๋ฆฌํดํ๋ ํจ์
- map-values(map) map์ ๋ค์ด์๋ ๊ฐ(value) ์ ๋ถ๋ฅผ ๋ฆฌํดํ๋ ํจ์
// ๋ณ์๋ช
์
๋ ฅ
$font-sizes: (
"h1": 45px,
"h2": 19px,
"p": 16px
);
$size: (
"1x": 200px,
"2x": 400px,
"4x": 1600px
);
// ๋ณ์๋ฅผ ์์์ ํ์ฉ
.map {
font-size: map-get($font-sizes, "p");
width: map-get($size, "2x");
height: map-get($size, "1x");
}
5๏ธโฃ Operator
- ๋น๊ต ์ฐ์ฐ์ (์ซ์ํ) < <= > >= == !=
- ์ฐ์ ์ฐ์ฐ์ (์ซ์๋ ์) + - * (/) %
- ๋ ผ๋ฆฌ ์ฐ์ฐ์ (๋ถ๋ฆฌ์ธ ํ์ ) not and or
1. ๋น๊ต ์ฐ์ฐ์
- a == b a๊ฐ b์ ๊ฐ์ด ๊ฐ์์ง ํ์ธ.
- a != b a๊ฐ b์ ๊ฐ์ด ๋ค๋ฅธ์ง ํ์ธ.
// ๋น๊ต ์ฐ์ฐ์
$value : 32px;
p {
/* $value ๋ณ์๊ฐ 32์ ๊ฐ๊ฑฐ๋ ํฌ๋ค๋ฉด? letter-spacing: 1rem */
@if($value >=32px) {
letter-spacing: 1rem;
}
/* ๊ทธ๋ ์ง ์๋ค๋ฉด letter-spacing: 0.5rem */
@else {
letter-spacing: 0.5rem;
}
}
1. ์ฐ์ ์ฐ์ฐ์
// ์ฐ์ ์ฐ์ฐ์ ํ์ฉ ์์
.one {
font-size: 10px + 10px; /* ๋ง์
*/
}
.two {
font-size: 30px - 10px; /* ๋บ์
*/
}
.three {
font-size: 10px * 2; /* ๊ณฑ์
*/
}
.four {
font-size: (20px / 10); /* ๋๋ ๋ชซ */
}
.five {
font-size: 8px % 3; /* ๋๋ ๋ชซ์ ๋บ ๋๋จธ์ง ๊ฐ */
}
3. ๋ ผ๋ฆฌ ์ฐ์ฐ์
- not true์ด๋ฉด false๋ฅผ, false์ด๋ฉด true๋ฅผ ๋ฐ๋๋ก ๋ฐํ.
- and ๋ ๊ฐ ๋ค true์ผ๋ true๋ฅผ ๋ฐํ.
- or ํ๋๋ผ๋ true๋ผ๋ฉด true๋ฅผ ๋ฐํ.
// ๋
ผ๋ฆฌ ์ฐ์ฐ์
// debug๋ฅผ ํตํด true์ธ์ง ํ์ธํ๊ณ ๊ฐ์ ๋ฐํ
/* ๋ ์์์ด ๋์ผํ๊ฐ? = true */
@debug rgba(53, 187, 169, 1) == #35bba9; // true
/* ๋ ์์์ด ๋์ผํ์ง ์์๊ฐ? = true */
@debug rgba(179, 115, 153, 0.5) != rgba(179, 115, 153, 0.8); // true
/* true์ not์ด๋ฏ๋ก = false */
@debug not true;
/* ๋๊ฐ ๋ค true์ผ๋๋ง true์ด๋ฏ๋ก = false */
@debug true and false;
/* ํ๋๋ผ๋ true๋ผ๋ฉด true์ด๋ฏ๋ก = true */
@debug true or false; // true
๐ฉ๐ป๐ป ์์ฝ!
- Sass๋ CSS๋ก ์ปดํ์ผ๋๋ ์คํ์ผ ์ํธ ํ์ฅ ์ธ์ด์ด๋ฉฐ CSS ์ ์ฒ๋ฆฌ๊ธฐ
- ์ผ๋ฐ์ ์ผ๋ก CSS์ ๋์ผํ๊ฒ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ๋ Scss๋ฅผ ์ฌ์ฉ.
- ๋ถ๋ชจ์๊ฒ ์์๋ ์์ ์์์๊ฒ ์คํ์ผ์ ์ ์ฉํ๋ nesting ๋ฌธ๋ฒ.
- ๊ฐ์์์, ๊ฐ์์ ํ์๋ฅผ ์ ํํ๋ ampersand ๋ฌธ๋ฒ.
- $ ๊ธฐํธ๋ฅผ ์ฌ์ฉํด ๋ณ์๋ก ์ง์ ํ๊ณ ์คํ์ผ์ ์ ์ฉํ ๊ฐ์ ์ ์ฅํ ๋ค ๋ฐ๋ณตํด์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ!
- ์ฝ๋๋ฅผ ๋น๊ตํ๊ณ , ๊ณ์ฐํ๊ณ , true, false๋ก ๋ฐํํด์ ์กฐ๊ฑด์ ๊ฑธ์ด ์ฌ์ฉํ ์ ์๋ operator ๋ฌธ๋ฒ์ด ์๋ค.
- ํด๋น ๊ฒ์๋ฌผ์ Sass์ ๋ํ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์ค๋ช
ํ๋ ์ฒซ๋ฒ์งธ ๋ฐํ๋ฌผ์ผ๋ก
Sass์ ๊ธฐ๋ฅ์ ๋ํด ๋ ์๊ณ ์ถ์ผ์๋ค๋ฉด ์๋ ๋งํฌ์์ ๋ค์ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค!
๋ฐ์ํ