๐ฆ ์จ๋ณด๋ฉ 3์ฃผ 2์ผ์ฐจ - SCSS ์ค์น ๋ฐ ์ฌ์ฉํด ๋ณด๊ธฐ
โจ03/21 : ๋ชฉํ : SCSS ์ค์น ๋ฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ ์ตํ๊ธฐ
์จ๋ณด๋ฉ ์คํฐ๋ 2์ผ์ฐจ, ์ ๊ณต๋ CSS ๊ฐ์๊ฐ ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์๋ ๊ฐ์์ธ ๊ฒ ๊ฐ์ ์๋ ์ด๋ฒ ์ฃผ ๋ชฉํ์๋ SCSS์ ๋ํด ๊ณต๋ถํ๊ธฐ๋ก ํ๋ค.
์ค๋์ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ค์น ๋ฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ์ข ์ตํ๋ณด๊ณ ์ฐ์ต๋ ํ ๊ฒธ ์์ผ๋ก๋ ํญ์ SCSS๋ฅผ ์ฌ์ฉํด ํ๋ก์ ํธ๋ฅผ ์งํํด ๋ณด๋ ค๊ณ ํ๋ค.
๐SCSS ์ค์น ๋ฐ ๊ฒฝํํด ๋ณด๊ธฐ
00 SCSS๋ ๋ฌด์์ธ๊ฐ?
1. SASS : Syntactically Awesome Style Sheets - ๋ฌธ๋ฒ์ ์ผ๋ก ์ด์ธํ ์คํ์ผ์ํธ
2. SCSS : Sassy CSS - ๋ฌธ๋ฒ์ ์ผ๋ก Sassyํ ๋ฉ์ง(Sassy) CSS
Sass๋ CSS์ ๋จ์ ์ ๋ณด์ ํ๊ธฐ ์ํ CSS์ ํ์ฅ์ผ๋ก ๋์จ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ค.
ํ๋ก์ ํธ๊ฐ ๊ท๋ชจ๊ฐ ์ ์ ์ปค์ง๊ณ , ๋ณต์กํด์ ธ๊ฐ๋ฉด์ ์คํ์ผ์ํธ๋ ๋ฉ๋ฌ์ ์ปค์ง๊ณ ๊ด๋ฆฌํ ๊ฒ ๋ง์์ง๋ฉฐ ๋ณต์กํด์ง๋ค. ์ด์ ๋ฐ๋ผ ์ ์ง๋ณด์๋ ๋น์ฐํ ํ๋ค์ด์ง๋ค.
CSS์ ๋จ์ ๋ค์ ๋ณด์ํ๊ธฐ ์ํด variable, nesting, mixin, inheritance ๋ฑ์ ๊ฐ๋ ์ด ์ถ๊ฐ๋ ๊ฒ์ด Sass์ด๋ค.
Sass(SCSS)๋ฅผ CSS pre-processor(์ ์ฒ๋ฆฌ๊ธฐ)๋ผ๊ณ ๋ ํ๋๋ฐ ์ด๋ Sass์์ฒด๋ก ๋ธ๋ผ์ฐ์ ์ ์ ์ฉํ๋ ๊ฒ์ด ์๋๋ผ CSS๋ฅผ ํ์ฅํด์ ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ์ฐ๊ธฐ ์ํด ์ฐ๋ ์คํฌ๋ฆฝํ ์ธ์ด์ด๊ณ , Sass๋ก ์์ฑํ ์ฝ๋๋ ์ปดํ์ผ์ ํด์ ์ผ๋ฐ CSS์ ๋ฌธ๋ฒ์ผ๋ก ๋ฐ๊พผ ๋ค ์ ์ฉํ๋ค๋ ๋ป์ด๋ค.
โSCSS์ ์ฅ์ :
1. ์ ํ์์ ์ค์ฒฉ(nesting)์ ํตํด ๋ฐ๋ณต๋๋ ๋ถ๋ชจ์์ ์ฌ์ฉ์ ์ค์ผ ์ ์๋ค.
2. ๋ณ์(Variable)๋ฅผ ์ฌ์ฉํด CSS ์์ฑ๊ณผ ๊ฐ์ ์ผ์ํ๋๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
3. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉํ๋ ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด ๋์ ์ธ CSS ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
4. ์ ์ผํ ๋จ์ ์ SCSS๋ฅผ CSS๋ก *์ปดํ์ผ์ ๊ฑฐ์ณ์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค.
*์ปดํ์ผ : ์ปดํจํฐ๊ฐ ์ดํดํ๋ ์ธ์ด๋ฅผ => ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์ธ์ด๋ก ๋ณํ
* ์ ์ฒ๋ฆฌ๊ธฐ : CSSํ์ผ์ ๋ง๋ค๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ์ฒ๋ฆฌํ๋ค๋ ์๋ฏธ
โSASS์ SCSS ๋ฌธ๋ฒ์ ์ฐจ์ด :
SASS์ SCSS๋ ์๋ก ํธํ ๊ฐ๋ฅํ๋ค(์์ฆ์ SCSS๋ฅผ ์ฌ์ฉํ๋ค). ์ฌ์ฌ์ฉ ๊ธฐ๋ฅ์ธ Mixins๊ณผ ๋ฌธ๋ฒ์ ์ผ๋ก๋ง ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์๋๋ฐ, SASS๋ ๋ค์ฌ ์ฐ๊ธฐ+์ค ๋ฐ๊ฟ ํ์, SCSS๋ ์ค๊ดํธ+์ธ๋ฏธ์ฝ๋ก ํ์์ด๋ค. ๋ฐ๋ผ์ SCSS๊ฐ CSS์ ๊ฐ์ ๋ฐฉ์์ด๋ผ ์ฌ์ฉํ๊ธฐ ์ฝ๋ค.
=> SASS๋์ SCSS๋ก ์ฐ์.
SCSS๋ 2010๋ 5์ ๋ฒ์ 3Visit Website์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ฉด์ ๊ฐ์ถฐ์ง ์๋ก์ด ๋ฌธ๋ฒ ์ฒด๊ณ์ด๋ค.
CSS ๋ฌธ๋ฒ์ SCSS ๋ฌธ๋ฒ ์์์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, CSS ํต๊ณผ IE์ filter์ ๊ฐ์ ํน์ ๋ธ๋ผ์ฐ์ ๋ฒค๋์ฉ ๋ฌธ๋ฒ๋ ํฌํจํ์ฌ CSS๊ฐ ์ง์ํ๋ ๋ชจ๋ ๋ฌธ๋ฒ๊ณผ ๊ธฐ๋ฅ์ SCSS์์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฐ ์์ ํธํ์ฑ ๋๋ถ์ ๋ชจ๋ CSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ์ด์ด์ ์ฌ์ฉํ ์ ์๊ณ , ๊ธฐ์กด CSS๋ฅผ SCSS๋ก ์ ํํ๋ ์์ ์ ์ฝ๊ฒ ์์ํ ์ ์๋ค.
๋ฐ๋ผ์ ์ ์ธ๊ณ์ ์ผ๋ก SCSS ์ฌ์ฉ์ ์, SCSS๋ฅผ ํ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ&ํ๋ ์์ํฌ ์๊ฐ SASS ๋ณด๋ค ๋ ๋ง๋ค.
- SCSS์ SASS์ ์ฐจ์ด์ ์์ธํ ๋ณด๊ธฐ
์ฌ์ค ๋์ ์์ ํ ๋์ผํ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ์ ์ฌ์ฉํ ์ง๋ ๋จ์ง ์๊ฐ์ ์ทจํฅ์ ๋ฌธ์ ๋ผ๊ณ ๋ฐ์ ํ ์ ์๋๋ฐ, ๋ง์ผ ํ์ด์ฌ ๊ตฌ๋ฌธ ์คํ์ผ์ ์ต์ํ๋ฉด Sass๋ฅผ, ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ ์คํ์ผ์ ์ต์ํ๋ฉด scss๋ฅผ ์ฐ๋ฉด ๋๋ค.
๋๋ ์น ํผ๋ธ๋ฆฌ์ฑ์ผ๋ก ์ฝ๋ฉ์ ์ ๋ฌธํ์ฌ CSS,JS ์คํ์ผ์ ๊ต์ฅํ ์ต์ํด์ ธ ์๊ธฐ ๋๋ฌธ์ SCSS๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
01 SCSS ์ค์น & ์ปดํ์ผ ๋ฐฉ๋ฒ
1. vscode ์ ์ฉํ ํ๊ฒฝ์ค์
- vscode settings : ctrl + ,
- vscode ์๋์ ์ฅ : file => auto save ์ฒดํฌ
- ์๋์ ์ฅ ์๋ ๋ณ๊ฒฝ : settings => auto save delay => 500
- CSS emmit ๋ฌธ๋ฒ : font-weight => fw
- CSS ๋ณ๊ฒฝ ์๋ง๋ค reload ์๋ก ์ฌ๋ผ๊ฐ ๋ฐฉ์ง : settings => full reload ์ฒดํฌ
- ๋ถ๋ถ ์ฃผ์ => ctrl + shift + /
2. nodeํ๊ฒฝ์์ npm์ผ๋ก ์ค์น
1. node์์ npm์ผ๋ก ์ค์น
npm install -g sass
2. ํด๋น ๋๋ ํ ๋ฆฌ์ scss -> css๋ก ๋ณํ => ๋ณํํ ํ์ผ๋ช - ๋ณํ๋ ํ์ผ
์ต์ ์ผ๋ก --watch or -w ๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ํ์ผ์ ๊ฐ์ํ์ฌ ์ ์ฅ์ ์๋์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ์ปดํ์ผ ํ๋ค.
sass --watch styles/common.scss styles/common.css
3. .map ํ์ผ์ด ์์ฑ๋๋ค.
scss๋ฅผ ์ปดํ์ผ ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด .map ์ด๋ผ๋ ํ์ผ์ด ์๊ธด๊ฑธ ๋ณผ ์ ์๋ค.
์ฐ๋ฆฌ๋ css ๋ณธ ํ์ผ๋ง ํ์ํ๋ ์ ์๊ธฐ๋ ์ถ์ด ์ด๋ ์ฌ์ดํธ๋ ์ด .mapํ์ผ์ ์ง์ฐ๋ ๊ณผ์ ์ ์๊ฐํ๊ธฐ๋ ํ์ง๋ง, ์ฌ์ค ์ด๋ ๊ฐ๋ฐํ๋๋ฐ ์์ด ๊ต์ฅํ ์ค์ํ ํ์ผ์ด๋ค.
.map ํ์ผ์ ๋ง๊ทธ๋๋ก scss ์ css๋ฅผ ๋งคํ ์์ผ์ฃผ๋ ์ญํ ์ ํ๋ ํ์ผ์ด๋ค. original source๋ฅผ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๋ง๋ค๊ธฐ ์ํด์์ด๋ค. ์ด๋ฌํ ํ์ผ์ ์์ค๋งต์ด๋ผ๊ณ ํ๋๋ฐ ์์ค๋งต์ ํ๋ง๋๋ก ์์ถ๋ ํ์ผ๊ณผ ์๋ณธ์ฝ๋๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ฐ๊ฒฐ๊ณ ๋ฆฌ๋ค. ์ด ์์ค๋งต์ผ๋ก ๊ฐ๋ฐ์๋ค์ ๋๋ฒ๊น ๋ ํ ์ ์๊ณ ๋ธ๋ผ์ฐ์ ์ฆ์์์ ์์ ๋ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ฉ๋์ด ํฌ๊ณ ๋ณต์กํ ํ์ผ๋ค์ ๋ธ๋ผ์ฐ์ ์์ ์์ ํ๋ค ๋ณด๋ฉด ๊ผฌ์ผ ์๋ ์๊ณ ์ปดํ์ผ ์๊ฐ๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ ์ํด์ผํ๋ ์ ์ด ์๋ค. ํ์ ์์๋ ์์ ํ ์ฝ๋๊ฐ ๋ฐ์ผ๋ก ์ ์ถ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น ์ ํ ๋์๋ ์์ค๋งต์ผ๋ก ํ๋ค๊ณ ํด๋ ๋ฐฐํฌํ ๋์๋ ์์ค๋งต์ ๊ผญ ์ง์ฐ๊ณ ๋ฐฐํฌํ๋ค. ๊ฐ๋ฐ์ ์ ํ์ง ์ผ๋ง ์๋์ผ๋ฉด ์ฌ์ฉํ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ false๋ก ์ค์ ํ๋๊ฒ ๋๋ค์๋ค. => ์ ์ฉ์๋๋ฉด vscode ๊ป๋ค ์ผ๋ณด๊ธฐ
"liveSassCompile.settings.generateMap": false, // ๋ง์ผ .map ํ์ผ ์์ฑ์ ๋๊ณ ์ถ๋ค๋ฉด
4.SCSS / CSS ํด๋ ๋ถ๋ฆฌ
๋ณดํต ํ๋ก์ ํธ๋ฅผ ํ๋ฉด cssํ์ผ ๋ง๊ณ scss๋ ์๋ฒ๊ฐ ์ธ์ํ์ง ๋ชปํ๋ ํ์ผ์ด๋ฏ๋ก ์๋ฒ์ ์ฌ๋ฆด ํ์๊ฐ ์๋ค.
๊ทธ๋์ ์ค์ ์์ scss์์ ์ปดํ์ผ๋ cssํ์ผ์ [css]ํด๋์ ์ ์ฅ๋๊ฒ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ํ๋ก์ ํธ ํธ๋ฆฌ ๊ตฌ์ฑ์ ์ ๋ฆฌํ๋๋ฐ ๋์์ด ๋๋ค. setting.json์ ์ด๊ณ ๋ค์๊ณผ ๊ฐ์ด ํญ๋ชฉ์ ์ถ๊ฐํด์ค๋ค.
"liveSassCompile.settings.generateMap": false, // .mapํ์ผ ์์ฑ ์ฌ๋ถ
"liveSassCompile.settings.formats": [ // compile ํ์, ํ์ฅ์๋ช
, ์ ์ฅ ๊ฒฝ๋ก ์ค์
{
"format": "expanded",
"extensionName": ".css",
"savePath": "/css" //์ปดํ์ผ๋ cssํ์ผ์ cssํด๋์ ์ ์ฅ๋๋๋ก ๊ฒฝ๋ก๋ณ๊ฒฝ
}
],
"liveServer.settings.donotShowInfoMsg": true
์ด์ ์ปดํ์ผ๋ CSSํ์ผ์ CSSํด๋์ ์ ์ฅ ๋๋ค. ๊ทธ ๋ฐ์ SCSSํ์ผ์ ์ ์ธ ๋ฑ ๊ธฐ๋ฅ์ github์ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
- liveSassCompile.settings.excludeList: ํน์ ํด๋๋ฅผ ์ ์ธํฉ๋๋ค. ํด๋ ๋ด์ ๋ชจ๋ Sass/Scss ํ์ผ์ ๋ฌด์๋๋ค.
์ฐธ๊ณ ) settings.json
"liveSassCompile.settings.formats":[
// ๊ธฐ๋ณธ์ค์
{
"format": "expanded",
"extensionName": ".css",
"savePath": null
},
// ์ถ๊ฐํ์ฌ ์์ฑ๊ฐ๋ฅ
{
"format": "compressed",
"extensionName": ".min.css",
"savePath": "/dist/css"
},
// ๋ ์์ธํ๊ฒ ์ค์ ๊ฐ๋ฅ
{
"format": "compressed",
"extensionName": ".min.css",
"savePath": "~/../css/"
}
]
// format : css๋ก ์ปดํ์ผํ๋ ์ข
๋ฅ
// extensionName : ์ปดํ์ผ ํ๋ css ์ด๋ฆ (.css๋ก ํ ๊ฒฝ์ฐ scss์ ํ์ผ๋ช
์ผ๋ก ์ปดํ์ผ ๋๋ค.) ์ด๋ฆ์ ์ถ๊ฐํ๋ฉด scss ๋ช
๋ค์ ์ด๋ฆ์ผ๋ก ๋ถ๋๋ค.
// ex) test.scss ์ด๊ณ extensionName ์ style.css ๋ก ์ค์ ํ๊ณ ์ปดํ์ผํ๋ฉด teststyle.css ๋ก ์ปดํ์ผ ๋๋ค.
// savePath : ์ปดํ์ผ ๋์ด ์ ์ฅ๋๋ ๊ฒฝ๋ก์ค์ . /๋ ํ๋ก์ ํธ์ ํด๋๋ฅผ ์๋ฏธ ํ๋ค.
3. ์ต์คํ ์ ์ฌ์ฉํ๊ธฐ
Live Sass Compiler => SCSSํ์ผ์์ ์ ์ฅ ํ => ๊ฐ์ฅ ํ๋จ์ Watching ํด๋ฆญ ์ ์๋์ปดํ์ผ ์คํ
4. SCSSํด๋ ๊ตฌ์กฐ
- ํ์ผ๋ช ์ _ ๊ฐ ๋ถ๋ ๊ฒฝ์ฐ @import ๋์ด ์ฌ์ฉ๋ ๊ฒ์์ ์์
- @import ์์๋ ๊ฒฝ๋ก์ _ ๋ฅผ ๋นผ๋ ์ธ์๋๋ค.
- _variables ๋ณ์
- ๋์์ด๋๋ค์ด ์ง์ ํ ์์ ํ๋ ํธ, ํฐํธ ๊ธฐ๋ณธ ์ค์ ๋ฑ์ด ์ ์ฅ๋์ด์๋ค. ์ฌ์ดํธ์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋์ด์ผ ํ ๋์์ธ ๋ณ์๊ฐ๋ค์ด ๋ชจ์์ ธ์๋ค. height, padding, margin ๋ฑ ๊ตฌ์ญ์ ์์ญ ๋ณ์๊ฐ๋ค์ ์ฃผ๋ก ๋ชจ์๋๊ธฐ๋ ํ๋ค. - _reset.scss
- 'normalize.css', 'reset.css' ๋ก ๊ฒ์ํ๋ฉด ๋ง์ boiler plate code ๊ฐ ๋์ด. (์ต๊ทผ์๋ normalize.css ๋ฅผ ๋ง์ด ์ฌ์ฉ.) - @importํ์ฌ ์ฌ์ฉ
@import "./abstracts/variables_color";
@import "./abstracts/variables";
@import "./base/preset";
@import "./base/reset";
5.SCSS ๊ฐ๋จํ๊ฒ ์ฌ์ฉํด ๋ณด๊ธฐ