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

Web/Html&Css

SASS ์‚ฌ์šฉ๋ฒ•

๐Ÿ“’ SASS

โœ” ์™œ? (์‚ฌ์šฉ ์ด์œ )

โ—ผ CSS ๋Œ€์šฉ ์–ธ์–ด๋กœ, CSS์˜ ๋ฐ˜๋ณต ์ฝ”๋“œ ๋ฌธ์ œ ๋“ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํƒ„์ƒํ–ˆ๋‹ค.

โ—ผ CSS์— ์ถ”๊ฐ€์ ์ธ ๋ฌธ๋ฒ•(์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ๋ณ€์ˆ˜, ํ•จ์ˆ˜)์„ ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์Šค๋Ÿฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

 

โœ” SASS ์‚ฌ์šฉํ•˜๊ธฐ

โ—ผ Live Sass Compiler๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

โ—ผ main.scss ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ ๊ฐœ๋ฐœํ•œ๋‹ค.

โ—ผ ์›น๋ธŒ๋ผ์šฐ์ €๋Š” .css ํŒŒ์ผ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๊ณ , .scss๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ, scss ํŒŒ์ผ์„ css ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

โ—ผ Live Sass Compiler๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด VS Code ํ•˜๋‹จ์˜ Watch Sass๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋™์ผ ํด๋”์— .main.css ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

โ—ผ Html ํŒŒ์ผ์— .main.css ํŒŒ์ผ์„ ์ฒจ๋ถ€ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

โ—ผ .main.css.map ํŒŒ์ผ์€ ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ Styles ๋ถ€๋ถ„์˜ ํŒŒ์ผ๋ช…์„ scss ํŒŒ์ผ๋กœ ํ‘œ์‹œํ•ด์ค€๋‹ค.

 

โœ” SASS ์šฉ๋„

$main_color: #2a4cb2;

.background {
  background-color: $main_color;
}

.background2 {
  background-color: $main_color;
}

.title {
  font-size: $main_font_size + 2px;
}

โ—ผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ, ๋ณ€์ˆ˜ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ $ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉํ•  ๋•Œ๋„ ${๋ณ€์ˆ˜๋ช…}์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

โ—ผ ์‚ฌ์น™์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ” .scss / .sass ํŒŒ์ผ์˜ ์ฐจ์ด

.sass ํŒŒ์ผ์€ indent๋กœ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

.background
    color : red

.scss ํŒŒ์ผ์€ ๊ด„ํ˜ธ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

.background {
  background-color: red;
}

 

โœ” ๋ฌธ๋ฒ•

// css
.main-bg h4 {
  font-size: 14px;
}

// scss
.main-bg {
  h4 {
    font-size: 14px;
  }
}

โ—ผ ์œ„ ์ฝ”๋“œ 2๊ฐœ๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

โ—ผ nesting ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

// css
.btn-green {
  width: 100px;
  height: 100px;
  padding: 20px;
  color: green;
}

.btn-red {
  width: 100px;
  height: 100px;
  padding: 20px;
  color: red;
}

.btn-blue {
  width: 100px;
  height: 100px;
  padding: 20px;
  color: blue;
}

โ—ผ ๋นจ๊ฐ„, ํŒŒ๋ž€, ์ดˆ๋ก ๋ฒ„ํŠผ์ด ํ•„์š”ํ•˜๋ฉด, ๊ฐ๊ฐ์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ๋‹ค.

// scss
.btn-green {
  @extend %btn;
  color: green;
}

.btn-red {
  @extend %btn;
  color: red;
}

.btn-blue {
  @extend %btn;
  color: blue;
}

%btn {
  width: 100px;
  height: 100px;
  padding: 20px;
}

โ—ผ @extend ๋ฌธ๋ฒ•

โ—ผ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” style์„ % ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž„์‹œ Class๋กœ ๋งŒ๋“ค๊ณ , @extend %{ํด๋ž˜์Šค๋ช…}์„ ํ™œ์šฉํ•˜์—ฌ ์ค‘๋ณต style์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ %๊ธฐํ˜ธ ๋Œ€์‹  .์„ ์‚ฌ์šฉํ•ด๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ, % ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ, ๋‹จ๋…์œผ๋กœ ์ปดํŒŒ์ผ ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

@mixin btn_style($padding_size, $option, $color) {
  width: 100px;
  height: 100px;
  padding: $padding_size;
  #{$option}: $color;
}

.btn-green2 {
  @include btn_style(20px, color, green);
}

.btn-red2 {
  @include btn_style(10px, color, red);
}

.btn-blue2 {
  @include btn_style(15px, color, blue);
}

โ—ผ @mixin ๋ฌธ๋ฒ•

โ—ผ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ @mixin์œผ๋กœ ์ •์˜ํ•˜๊ณ  @include๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ $ํŒŒ๋ฆฌ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐ’์„ ๊ฐ€๋ณ€์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ ๊ธ€์ž ์ค‘๊ฐ„์— $๋ณ€์ˆ˜๋‚˜ $ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์„ ๋•Œ๋Š” #{$๋ณ€์ˆ˜๋ช…}์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

// main.scss
@use "main2.sass";
.background {
  background-color: main2.$main2_color;
}

// main2.sass
body
    margin: 0

div
    box-sizing: border-box
    
$main2_color: white

โ—ผ @use ๋ฌธ๋ฒ•

โ—ผ ๋‹ค๋ฅธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

โ—ผ main2.sass๋ฅผ ๋‹จ๋…์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ ์‹ซ์„ ๊ฒฝ์šฐ, _main2.sass๋กœ ํŒŒ์ผ๋ช…์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ปดํŒŒ์ผ ๋˜์ง€ ์•Š๋Š”๋‹ค.

โ—ผ main2 ๋‚ด์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด, main2.${๋ณ€์ˆ˜๋ช…}์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

'Web > Html&Css' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Html&CSS ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•๋“ค  (0) 2023.04.21
๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ  (0) 2023.04.01
Html&CSS ์‚ฌ์šฉํ•˜๊ธฐ  (0) 2023.03.31