๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT

Sass/Scss: CSS์˜ ํ˜์‹ ์ ์ธ ํ™•์žฅ

by ๐Ÿ’ฒ๐ŸŽตโœ–๏ธโœ”๏ธโ˜ผ 2024. 2. 21.
728x90

Sass/Scss: CSS์˜ ํ˜์‹ ์ ์ธ ํ™•์žฅ

1. ์†Œ๊ฐœ

1.1 Sass/Scss๋ž€?

Sass(์‹ค์ œ์ ์ธ ํŒŒ์ผ ํ™•์žฅ์ž๋Š” .scss) ๋ฐ Scss(.scss์™€ .sass ๋‘ ๊ฐ€์ง€ ํ™•์žฅ์ž ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)๋Š” CSS๋ฅผ ํ–ฅ์ƒํ•˜๊ณ  ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ํ™•์žฅ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜, ์ค‘์ฒฉ ๊ทœ์น™, ๋ฏน์Šค์ธ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ๊ฐ€๋…์„ฑ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

1.2 ๋ฐฐ๊ฒฝ

Sass/Scss๋Š” CSS์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ CSS๋Š” ๋ณ€์ˆ˜, ์ค‘์ฒฉ, ํ•จ์ˆ˜ ๋“ฑ์˜ ๋ถ€์กฑํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. Sass/Scss๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2. Sass/Scss์˜ ํŠน์ง•

2.1 ๋ณ€์ˆ˜

$primary-color: #3498db;
body {
  background-color: $primary-color;
}

2.2 ์ค‘์ฒฉ ๊ทœ์น™

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  li { display: inline-block; }
}

2.3 ๋ฏน์Šค์ธ

@mixin border-radius($radius) {
  -webkit-border-radius: $radius;
  -moz-border-radius: $radius;
  border-radius: $radius;
}

.box { @include border-radius(10px); }

3. Sass/Scss์˜ ํ™œ์šฉ์„ฑ

3.1 ์˜ˆ์ œ ์ฝ”๋“œ

$primary-color: #3498db;

body {
  background-color: $primary-color;
  font-family: 'Arial', sans-serif;

  header {
    h1 {
      color: darken($primary-color, 10%);
    }
  }
}

3.2 ํ™œ์šฉ ๋ฐฉ์‹

  • ๋ณ€์ˆ˜ ํ™œ์šฉ: ์ƒ‰์ƒ์ด๋‚˜ ๊ธ€๊ผด ๋“ฑ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์„ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜์—ฌ ํ†ต์ผ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ์ˆ˜์ •์ด ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘์ฒฉ ๊ทœ์น™: HTML ๊ตฌ์กฐ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ค‘์ฒฉํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์ฝ”๋“œ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฏน์Šค์ธ ํ™œ์šฉ: ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ณณ์—์„œ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ฝ”๋“œ ์–‘์„ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

4. Sass/Scss์˜ ์žฅ๋‹จ์ 

4.1 ์žฅ์ 

  • ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ: ์ค‘์ฒฉ ๊ตฌ์กฐ์™€ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์œผ๋กœ ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋˜์–ด ์ฝ”๋“œ ์ž‘์„ฑ์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ฆ๊ฐ€: ๋ชจ๋“ˆํ™”๋œ ์ฝ”๋“œ๋กœ ์ธํ•ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.
  • ํšจ์œจ์ ์ธ ์ž‘์—…: ๋ฏน์Šค์ธ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ˜๋ณต ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4.2 ๋‹จ์ 

  • ํ•™์Šต ๊ณก์„ : CSS์— ๋น„ํ•ด ํ•™์Šต ๊ณก์„ ์ด ์กด์žฌํ•˜๋ฉฐ, ์ดˆ๊ธฐ์—๋Š” ์ต์ˆ™ํ•ด์ง€๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ๋นŒ๋“œ ์„ค์ • ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ

Sass/Scss๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ํ•ด์„๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋นŒ๋“œ ์‹œ์— CSS๋กœ ๋ณ€ํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๋นŒ๋“œ ํˆด๋กœ๋Š” **Node.js ๊ธฐ๋ฐ˜์˜ node-sass, sass-loader ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

npm install node-sass --save-dev

์œ„์™€ ๊ฐ™์ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ , ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ๋นŒ๋“œ ๋„๊ตฌ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

6. ๊ฒฐ๋ก 

Sass/Scss๋Š” CSS์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๋งŒ๋“ค์–ด์ง„ ํ™•์žฅ ์–ธ์–ด๋กœ, ๋ณ€์ˆ˜, ์ค‘์ฒฉ ๊ทœ์น™, ๋ฏน์Šค์ธ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ํšจ์œจ์ ์ธ ์Šคํƒ€์ผ๋ง์„ ๊ฐ€๋Šฅ์ผ€ ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ํ•™์Šต ๋น„์šฉ์„ ๋“ค์ด๋Š” ๋งŒํผ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๊ทธ ํšจ๊ณผ๋ฅผ ๋ฐœํœ˜ํ•˜๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋Œ“๊ธ€