SAS ํ์ผ์ ๋ฌด์จ ๋ป์ด์ผ? SCSS๋ ๋ฌด์จ ๊ด๋ จ์ด ์์ง?
Sass(Syntactically Awesome Style Sheets, ์ค์ฌ์ Sass)๋ CSS๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์์ฑํ ์ ์๊ฒ ๋์์ฃผ๋ CSS ์ ์ฒ๋ฆฌ๊ธฐ์ ๋๋ค. Sass๋ ๋ ๊ฐ์ง ๋ฌธ๋ฒ์ ์ง์ํ๋๋ฐ, ๊ทธ ์ค ํ๋๊ฐ SCSS์ ๋๋ค. SCSS์ ๊ด๋ จ๋ ์ค์ํ ์ฉ์ด๋ค์ ํ๋์ฉ ์ค๋ช ํ์๋ฉด:
1. Sass(SAS)
• Sass๋ CSS๋ฅผ ๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ์ ์ฒ๋ฆฌ๊ธฐ(preprocessor)์ ๋๋ค. CSS์ ์๋ ์ฌ๋ฌ ๊ธฐ๋ฅ(๋ณ์, ์ค์ฒฉ, ์์ ๋ฑ)์ ์ถ๊ฐํด์ค๋๋ค.
• Sass์๋ ๋ ๊ฐ์ง ๋ฌธ๋ฒ ์คํ์ผ์ด ์์ต๋๋ค:
• Sass ๋ฌธ๋ฒ(Sass Syntax): ์๋์ Sass ์คํ์ผ๋ก, ์ค๊ดํธ {}๋ ์ธ๋ฏธ์ฝ๋ก ; ์์ด ๋ค์ฌ์ฐ๊ธฐ๋ก ๊ตฌ์กฐ๋ฅผ ๋ํ๋ ๋๋ค.
• SCSS ๋ฌธ๋ฒ(Sassy CSS): CSS์ ๊ฑฐ์ ์ ์ฌํ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด์ Sass์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ ๋ฌธ๋ฒ์ ๋๋ค.
2. SCSS (Sassy CSS)
• SCSS๋ Sass์ ํ์ฅ๋ ๋ฌธ๋ฒ์ผ๋ก, ๊ธฐ๋ณธ CSS ๋ฌธ๋ฒ์ Sass ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒ์ ๋๋ค. CSS์ ํธํ ๊ฐ๋ฅํ ๋ฌธ๋ฒ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด CSS ํ์ผ๋ ๊ทธ๋๋ก SCSS ํ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
• SCSS ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก .scss ํ์ฅ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
• SCSS ๋ฌธ๋ฒ์์๋ CSS์ฒ๋ผ ์ค๊ดํธ {}์ ์ธ๋ฏธ์ฝ๋ก ;์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ CSS์ ์ต์ํ ์ฌ๋๋ค์๊ฒ ๋ ์น์ํฉ๋๋ค.
Sass์ SCSS์ ์ฐจ์ด
• Sass ๋ฌธ๋ฒ: ์ค๊ดํธ {}์ ์ธ๋ฏธ์ฝ๋ก ;์ ์๋ตํ๊ณ , ๋ค์ฌ์ฐ๊ธฐ๋ก๋ง ๊ตฌ์กฐ๋ฅผ ๋ํ๋ ๋๋ค. .sass ํ์ฅ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
// Sass ๋ฌธ๋ฒ ์์
.navbar
background-color: #333
.menu
display: flex
• SCSS ๋ฌธ๋ฒ: CSS์ฒ๋ผ ์ค๊ดํธ {}์ ์ธ๋ฏธ์ฝ๋ก ;์ ์ฌ์ฉํ๋ฉฐ, CSS ํ์ผ๊ณผ ํธํ๋ฉ๋๋ค. .scss ํ์ฅ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
// SCSS ๋ฌธ๋ฒ ์์
.navbar {
background-color: #333;
.menu {
display: flex;
}
}
์์ฝ:
• Sass๋ ์ ์ฒ๋ฆฌ๊ธฐ ๋๊ตฌ์ด๋ฉฐ, CSS๋ฅผ ๋ ๊ฐ๋ ฅํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์ต๋๋ค.
• **Sass ๋ฌธ๋ฒ(SAS ํ์ผ)**์ ๋ค์ฌ์ฐ๊ธฐ๋ก ์คํ์ผ์ ํํํ๋ฉฐ, **SCSS ๋ฌธ๋ฒ(SCSS ํ์ผ)**์ CSS์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์์ฑ๋ฉ๋๋ค.
• SCSS๋ Sass์ ํ์ฅ ๋ฌธ๋ฒ์ผ๋ก, ๊ธฐ์กด CSS๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ CSS ์ฌ์ฉ์ ์ต์ํ ์ฌ๋๋ค์ด ๋ ์ฝ๊ฒ ์ ์ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก SCSS๋ Sass์ ํ ์ข ๋ฅ์ด๋ฉฐ, CSS์์ ํธํ์ฑ์ด ๋๊ณ ๋ ์น์ํ ๋ฌธ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์ ์ฒ๋ฆฌ๊ธฐ ๋๊ตฌ๊ฐ ๋ญํ๋ ๊ฑด๋ฐ? ๊ทธ๊ฒ ๋ฌด์จ ๋ป์ด์ผ?
์ ์ฒ๋ฆฌ๊ธฐ ๋๊ตฌ๋ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์น ๊ฐ๋ฐ์์ ์์ ์ฝ๋(์์ฑ๋ ์ฝ๋)๋ฅผ ์ค์ ์ฌ์ฉ ๊ฐ๋ฅํ ํํ๋ก ๋ณํํด์ฃผ๋ ๋๊ตฌ๋ฅผ ๋งํฉ๋๋ค. ์ด ๊ฒฝ์ฐ, CSS ์ ์ฒ๋ฆฌ๊ธฐ๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์์ CSS ํ์ผ๋ก ๋ณํํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
์ ์ฒ๋ฆฌ๊ธฐ์ ์ญํ ์ ์ฝ๊ฒ ์ค๋ช ํ๋ฉด:
1. ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋: ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ SCSS๋ Sass ๊ฐ์ ์ธ์ด๋ ๋ ํจ์จ์ ์ผ๋ก ์คํ์ผ์ ์์ฑํ ์ ์๋๋ก ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ๋ฐ๋ก ์ดํดํ ์ ์์ต๋๋ค.
2. ์ ์ฒ๋ฆฌ๊ธฐ ๋๊ตฌ์ ๋ณํ ์์ : ์ ์ฒ๋ฆฌ๊ธฐ ๋๊ตฌ(Sass, Less ๋ฑ)๊ฐ ๊ฐ๋ฐ์๊ฐ ์์ฑํ SCSS/Sass ํ์ผ์ ์ฝ์ด์, ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์์ํ CSS ์ฝ๋๋ก ๋ณํํด์ค๋๋ค.
3. ์ต์ข ์ถ๋ ฅ๋ฌผ: ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ๊ฑฐ์น ๊ฒฐ๊ณผ๋ ํ์ค CSS๋ก ์ปดํ์ผ๋๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ ์ด CSS ํ์ผ์ ์ฝ์ด ์ค์ ๋ก ํ์ด์ง์ ์คํ์ผ์ ์ ์ฉํ๊ฒ ๋ฉ๋๋ค.
์ ์ฒ๋ฆฌ๊ธฐ ๋๊ตฌ๊ฐ ํ์ํ ์ด์
CSS๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด ๋ง์ง ์๊ธฐ ๋๋ฌธ์ ๋ณต์กํ ์คํ์ผ์ ๊ด๋ฆฌํ๊ธฐ ํ๋ญ๋๋ค. Sass๋ SCSS ๊ฐ์ ์ ์ฒ๋ฆฌ๊ธฐ๋ ์ด๋ฅผ ๋ณด์ํด ์ฌ๋ฌ ๊ฐ์ง ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์๋์ ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค:
• ๋ณ์ ์ฌ์ฉ: ์์, ๊ธ๊ผด ํฌ๊ธฐ ๋ฑ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๋ ๊ฐ์ ๋ณ์๋ก ์ ์ํด ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
• ์ค์ฒฉ(Nesting): HTML ๊ตฌ์กฐ์ ๋ง๊ฒ ์คํ์ผ์ ์ค์ฒฉํด์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ฌ์ค๋๋ค.
• ๋ชจ๋ํ: ์คํ์ผ์ ์ฌ๋ฌ ํ์ผ๋ก ๋๋ ๊ด๋ฆฌํ๊ณ , ํ์ํ ๋๋ง๋ค ๋ถ๋ฌ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
• ๋ฐ๋ณต๋๋ ์ฝ๋ ์ค์ด๊ธฐ: mixin์ด๋ ํจ์ ๋ฑ์ ์ฌ์ฉํด ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ต์ํํ๊ณ , ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ ๋๋ค.
• ์ฐ์ฐ ๊ฐ๋ฅ: ์ํ์ ๊ณ์ฐ์ ํตํด ํฌ๊ธฐ, ๊ฐ๊ฒฉ ๋ฑ์ ๋์ ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
// scss ์์
$primary-color: #3498db;
.button {
background-color: $primary-color;
padding: 10px;
border-radius: 5px;
&:hover {
background-color: darken($primary-color, 10%);
}
}
์ ์ฝ๋๋ Sass ์ ์ฒ๋ฆฌ๊ธฐ๋ก ์ปดํ์ผ๋์ด ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ์ ์ ์๋ CSS๋ก ๋ณํ๋ฉ๋๋ค:
// css ์์
.button {
background-color: #3498db;
padding: 10px;
border-radius: 5px;
}
.button:hover {
background-color: #2c80b9;
}
์ ์ฒ๋ฆฌ๊ธฐ์ ์ค์ ๊ณผ์ :
1. SCSS ํ์ผ์ ์์ฑํ๊ณ ,
2. ์ ์ฒ๋ฆฌ๊ธฐ ๋๊ตฌ(์: Sass CLI, Webpack์ Sass loader ๋ฑ)๋ฅผ ์ฌ์ฉํด SCSS๋ฅผ CSS๋ก ๋ณํํ๊ณ ,
3. ๋ณํ๋ CSS ํ์ผ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ์ด์ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
์์ฝ:
์ ์ฒ๋ฆฌ๊ธฐ ๋๊ตฌ๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ๋ณต์กํ SCSS/Sass ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ๋จ์ํ CSS๋ก ๋ณํํด์ฃผ๋ ๋๊ตฌ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋ ํจ์จ์ ์ด๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด ์ ์ฒ๋ฆฌ๊ธฐ์ ์ฃผ์ ์ญํ ์ ๋๋ค.