<star />
Sass(SCSS) ๋ณธ๋ฌธ
1. CSS Preprocessor ๊ฐ ๋ญ์์?
- ์ ์ฒ๋ฆฌ๊ธฐ 3๋์ฅ์ผ๋ก๋ Less, Sass(SCSS), Stylus ๊ฐ ์์.
- ๋ณดํต CSS Preprocessor ๋ผ๊ณ ๋ถ๋ฆ.
- ์ฌ์ค๋ ๊ธฐ์ด ์ธ์ด์ ํ์ ์ฃผ๋ css ์ ํ์ฅ์.
- ์น์์๋ css ๋ง ๋์ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒ๋ฆฌ๊ธฐ๋ ์ง์ ๋์์ํฌ ์ ์์.
- ์ ์ฒ๋ฆฌ๊ธฐ๋ css ๋ฌธ๋ฒ๊ณผ ๊ต์ฅํ ์ ์ฌํ์ง๋ง ์ ํ์์ ์ค์ฒฉ์ด๋ ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ, ๋ค์ํ ๋จ์์ ์ฐ์ฐ์ ํ์ฉํ ์ ์์.
- ํ์ค css ๋ณด๋ค ํจ์ฌ ๋ง์ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ ํธ๋ฆฌํ๊ฒ ์์ฑ์ด ๊ฐ๋ฅํจ.
- ๋จ, ์น์์๋ ์ง์ ๋์์ ํ์ง ์์ผ๋ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ฑ ํ, ์น์์ ๋์ ๊ฐ๋ฅํ ํ์ค์ css ๋ก ์ปดํ์ผ ํด์ผ ํจ.
- ์ปดํ์ผ ๋ฐฉ๋ฒ์ ๋ง์... ์ฃผ๋ก, node-sass ๋ผ๋ Node.js ๊ธฐ๋ฐ ์ปดํ์ผ๋ฌ์ธ LibSass ์ ๋ฐ์ธ๋ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋
Webpack, Parcel ๋ฑ๋ฑ...
2. Sass (SCSS)
- ๋ฌธ๋ฒ์ Sass ๊ฐ Stylus ์ ๋น์ทํ๊ณ , SCSS ๋ Less ์ ๋น์ทํจ.
- Sass ์ SCSS ๋ ํ๋์ ์ปดํ์ผ๋ฌ๋ก ๋ชจ๋ ์ปดํ์ผ ๊ฐ๋ฅํจ.
- ๊ฐ์ฅ ์ค๋๋ css์ ํ์ฅ ์ธ์ด์. (ํ๋ฅญ)
> Sass ์ SCSS ์ ์ฐจ์ด์ ์?
- Sass ์ 3๋ฒ์ ์์ ๋ฑ์ฅํ SCSS ๋ css ๊ตฌ๋ฌธ๊ณผ ์์ ํ ํธํ๋๋๋ก ์๋ก์ด ๊ตฌ๋ฌธ์ ๋์ ํด ๋ง๋ Sass ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ css ์ ์์ ์งํฉ์.
- ์ฆ, SCSS ๋ css ์ ๊ฑฐ์ ๊ฐ์ ๋ฌธ๋ฒ์ผ๋ก Sass ๊ธฐ๋ฅ์ ์ง์ํจ.
- ๋์ {} ์ค๊ดํธ์ ;์ธ๋ฏธ์ฝ๋ก์ ์ ๋ฌด ์ฐจ์ด๊ฐ ์์.
/* ์ด๊ฑด Sass */
.star
height: 158px
color: yellow
div
background: #000
margin-right: -10px
- Sass ๋ ์ ํ์์ ์ ํจ๋ฒ์๋ฅผ '๋ค์ฌ์ฐ๊ธฐ'๋ก ๊ตฌ๋ถํจ.
- ๊ฐ๊ฒฐํ๊ณ ์์ฑํ๊ธฐ ํธ๋ฆฌํจ, ์ค๊ดํธ๋ ์ธ๋ฏธ์ฝ๋ก ์ด ์์ผ๋ ํจ์ฌ ๊นฐ๋.
/* ์ด๊ฑด SCSS */
.star {
height: 158px;
div {
background: #000;
&:last-child {
margin-right:-10px;
}
}
}
- SCSS ๋ {} ์ค๊ดํธ๋ก ๋ฒ์๋ฅผ ๊ตฌ๋ถํจ.
- ์ธ๋ผ์ธ ์ฝ๋๋ก ํ์ค ์์ฑ์ด ๊ฐ๋ฅํ๋ฉฐ,css ์ ์ ์ฌํ ๋ฌธ๋ฒ์ ๊ฐ์ง๊ธฐ ๋์๋กฑ ์ฝ๋ ํตํฉ์ด ์ฌ์.
๋์ ๊ฐ์ธ ์ทจํฅ์ด๊ธฐ์ ํ์ฌ๋ ํ์์ ์ฌ์ฉ ์, ์ํฉ์ ๋ง๊ฒ ์ํ๋ ๋ฐฉ์์ผ๋ก ๊ณจ๋ผ์ ์ฌ์ฉํฉ์๋ค.
(์ ๋ SCSS๊ฐ ๋ ์ข๋ค์.)
3. ์ค์ฒฉ (Nesting)
- Sass ๋ ์ค์ฒฉ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์.
- ์์ ์ ํ์์ ๋ฐ๋ณต์ ํผํ๊ณ ํธ๋ฆฌํ๊ฒ ๋ณต์กํ ๊ตฌ์กฐ ์์ฑ ๊ฐ๋ฅ.
.star {
height:158px;
.kim {
padding:20px;
li {
display:inline-block;
}
}
}
/* ์ปดํ์ผ ํ ์ด๋ ๊ฒ ๋ฐ๋๋ ๊ฑฐ์ */
.star { height:158px; }
.star .kim { padding:20px; }
.star .kim li { display:inline-block; }
4. ์์ ์ ํ์ ์ฐธ์กฐ (Ampersand)
.star {
width:158px;
&.active {
background-color:#ff0000;
}
}
.list {
li {
&:last-child {
margin-right:0;
}
}
}
/* ์ปดํ์ผ ๋๋ฉด ์ผ์ผ ๋จ */
.star { width:158px; }
.star.active { background-color:#ff0000; }
.list li:last-child { margin-right:0; }
& ํค์๋๊ฐ ์ฐธ์กฐํ ์์ ์ ํ์๋ก ์นํ๋จ.
.star {
&-sm { font-size:12px; }
&-md { font-size:14px; }
&-lg { font-size:16px; }
}
/* ์ปดํ์ผ ๋๋ฉด ์ด๋ ๊ฒ ๋จ์ */
.star-sm { font-size:12px; }
.star-md { font-size:14px; }
.star-lg { font-size:16px; }
5. ์ค์ฒฉ ํ์ถ @at-root
- ์ค์ฒฉ์์ ํ์ถํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ์ค์ฒฉ ์์์ ์์ฑํ๋ ์ค์ฒฉ ๋ฐ์์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํจ.
- ์ค์ฒฉ ์์์ ์๋ ํน์ ๋ณ์๋ฅผ ๋ฒ์ ๋ฐ์์ ์ฌ์ฉํ ์ ์์ผ๋๊น... @at-root ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํจ.
.star {
$w: 1000px;
$h: 158px;
li {
width: $w;
height: $h;
}
@at-root .kim {
width: $w;
height: $h;
}
}
/* ์ปดํ์ผ ํ๋ฏ ์ด๋ ๊ฒ ๋ผ */
.star li { width:1000px; height:158px; }
.kim { width:1000px; height:158px; }
6. ์ค์ฒฉ ์์ฑ
- ๋์ผํ ๋ค์ ์คํ์ด์ค๋ฅผ ๊ฐ์ง๋ ์์ฑ๋ค์ ์ค์ฌ ์ธ ์ ์๋ค.
.star {
font: {
weight: 500;
size: 14px;
};
margin: {
top: 10px;
right: 10px;
};
}
/* ์ปดํ์ผ ๋๋ฏ ์ผ์ผ ๋จ */
.star { font-weight:500; font-size:14px; margin-top:10px; margin-right:10px; }
7. ๋ณ์ (Variables)
- ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ ๋ณ์์ ์ง์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ณ์ ์ด๋ฆ ์์๋ ํญ์ $ ๋ฅผ ๋ถ์ด์ .
$๋ณ์์ด๋ฆ : ์์ฑ๊ฐ;
$main-f-c: #ededed;
$main-f-w: 500;
$h : 158px;
.star {
height: $h;
color: $main-f-c;
font-weight: $main-f-w;
}
/* ์ปดํ์ผ ๋๋ฉด ์ด๋ ๊ฒ ๋จ */
.star { height:158px; color:#ededed; font-weight:500; }
8. ๋ณ์ ์ ํจ ๋ฒ์ (Variable Scope)
- ๋ณ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ํจ๋ฒ์๊ฐ ์๋ค.
- ์ ์ธ๋ ๋ธ๋ก {} ๋ด๋ถ์์๋ง ์ ํจ ๋ฒ์๋ฅผ ๊ฐ์ง.
.star {
$color: #ededed;
background: $color;
}
/* ๋ณ์ $color ๋ .star ์ ๋ธ๋ก ๋ด๋ถ์์ ์ค์ ๋ ๋ณ์๋ผ์, ๋ธ๋ก ๋ฐ์ .kim ๋ด๋ถ์์๋ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ */
.kim {
color: $color;
}
9. ๋ณ์ ์ฌํ ๋น (Variable Reassignment)
- ๋ณ์์ ๋ณ์๋ฅผ ์ฌํ ๋น ๊ฐ๋ฅํ๋ค.
$black : #000000;
$pink : #FF338E;
$main-color: $pink;
$sub-color: $black;
.star {
color: $main-color;
background: $sub-color;
}
/* ์ปดํ์ผ ๋๋ฉด */
.star { color:#000; background:#ff338e; }
10. !global (์ ์ญ ์ค์ )
- !global ํ๋๊ทธ ์ฌ์ฉ ์ ๋ณ์์ ์ ํจ๋ฒ์๋ฅผ ์ ์ญ ๊ธ๋ก๋ฒ๋ก ๋นผ์ ์ค์ ๊ฐ๋ฅํจ.
.star {
$color: #FF338E !global;
background: #color;
}
.kim {
color: $color;
}
/* ์ปดํ์ผ ๋๋ฉด */
.star { background:#FF338E; }
.kim { background:#FF338E; }
11. !default (์ด๊ธฐ๊ฐ ์ค์ )
- !default ํ๋๊ทธ๋ ํ ๋น๋์ง ์์ ๋ณ์์ ์ด๊ธฐ๊ฐ์ ์ค์ ํจ.
- ํ ๋น๋์ด ์๋ ๋ณ์๊ฐ ์์ผ๋ฉด ๊ทธ ๋ณ์๊ฐ ๊ธฐ์กด ํ ๋น๊ฐ์ ์ฌ์ฉํจ.
$main-color: #FF338E;
.star {
$main-color: #ededed !default;
background: $main-color;
}
/* ์ปดํ์ผ ๋๋ฉด */
.star { background:#FF338E; }
๊ทธ๋ฌ๋๊น, ๋ณ์์ ๊ฐ์ ์ค์ ํ๊ฒ ์ง๋ง, ๊ธฐ์กด ๋ณ์๊ฐ ์์ ๊ฒฝ์ฐ์๋
ํ์ฌ ์ค์ ํ๋ ๋ณ์์ ๊ฐ์ ์ฌ์ฉํ์ง ์๊ฒ ์ด~ ๋ผ๋ ์๋ฏธ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค๊ณ ํ๋ค.
๋ํดํธ๊ฐ์ ์ ์ฃผ๋ ๊ฑฐ๋๊ณ ์๊ฐ์ด ๋ค ํ ๋ฐ, ๐ง ํ์ด์ ์๊ฐํด ๋ณด์๋ฉด
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ ๋, ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ์ ๋ณ์๋ค๊ณผ
๋ด๊ฐ ์์ฑํ ์ฝ๋์ ๋ณ์๋ค์ด Overwrite ๋ฎ์ด์ฐ๊ธฐ ๋๋ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒ์. ๐ก
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฎ์ด์ฐ๊ธฐ ๋๋ ์ํฉ์ ์ ๋ง๋๋ ค๋ฉด,
!default ํ๋๊ทธ๋ฅผ ์ธ์ฐ๋ฉด ๋ฉ๋๋ค.
/* box.scss ํ์ด์ง๋ผ๊ณ ๊ฐ์ */
$pink-500: #FF338E;
/* main.scss ํ์ด์ง๋ผ๊ณ ๊ฐ์ */
@import 'box';
$pink-500: #FF147D !default; /* ๋ ์๋ ์ด ํํฌ์์ด์์ด~ ์์์ฃผ๋ผ~ */
.star {
background: $pink-500; /* import ํด์จ #FF338E๊ฐ ์ ์ฉ๋จ. */
}
12. #{} (๋ฌธ์ ๋ณด๊ฐ)
- #{} ๋ฅผ ์ด์ฉํ์ฌ ์ฝ๋์ ์ด๋๋ ์ง ๋ณ์ ๊ฐ์ ๋ฃ์ ์ ์์
โญ๏ธ ๋ณด๊ฐ๋ฒ์ด๋?
>>> ๋ณด๊ฐ(Interpolation) ์ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ๋ฌธ๋ฒ์ด๊ณ , ์ค๊ฐ์ ๋ฌด์์ธ๊ฐ๋ฅผ ๋ผ์ ๋ฃ๋๋ค๋ ์๋ฏธ๊ฐ ์์.
const name = 'star'
console.log(`Hello ${name}?!`)
๋ผ๊ณ ํํํ๋ ๊ฑธ ๋ณด๊ฐ๋ฒ(่ฃ้ๆณ) ์ด๋ผ๊ณ ํจ. ๐
$family: unquote("Noto+Sans");
@import url("http://fonts.googleapis.com/css?family=#{$family}");
/* ์ปดํ์ผ ๋๋ฉด */
@import url("http://fonts.googleapis.com/css?family=Noto+Sans");
Sass ์ ๋ด์ฅ ํจ์ unquote() ๋ ๋ฌธ์์์ ๋ฐ์ดํ "" ๋ฅผ ์ ๊ฑฐํด ์ค๋๋ค.
'CSS ๐จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SVG (0) | 2023.01.02 |
---|---|
styled-components (0) | 2022.12.29 |