[JAYโŒจ๏ธSCSS] SASS(SCSS) ๊ฐ„๋‹จ ์‚ฌ์šฉ๋ฒ• ์ฒซ๋ฒˆ์งธ! Nesting, Ampersand, Variable, Operator.

2023. 4. 2. 22:09ใ†html&css

๋ฐ˜์‘ํ˜•

 

 

 

 

[JAYโŒจ๏ธSCSS] SASS(SCSS) ๊ฐ„๋‹จ ์‚ฌ์šฉ๋ฒ• ์ฒซ๋ฒˆ์งธ ์„ฌ๋„ค์ผ

 1๏ธโƒฃ Sass ๋ž€?
  • Sass๋Š” CSS๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ์Šคํƒ€์ผ ์‹œํŠธ ํ™•์žฅ ์–ธ์–ด์ด๋ฉฐ CSS ์ „์ฒ˜๋ฆฌ๊ธฐ
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ SassํŒŒ์ผ์„ ์ง์ ‘ ์ฝ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— Sass๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•œ ํ›„, ์ผ๋ฐ˜ CSS๋กœ ์ปดํŒŒ์ผ!
    ์ปดํŒŒ์ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ํ„ฐ๋ฏธ๋„์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, VS Code์˜ ์ต์Šคํ…์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
  • Sass์™€ Scss๊ฐ€ ์žˆ๋Š”๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ CSS์™€ ๋™์ผํ•˜๊ฒŒ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Scss๋ฅผ ์‚ฌ์šฉ.
  • ๋ณธ ํฌ์ŠคํŒ…์€ Scss๋ฌธ๋ฒ•์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. :)

 

Live Sass Compiler, ํด๋ฆญํ•˜์‹œ๋ฉด VSC ์ต์Šคํ…์…˜ ์„ค์น˜ํ•˜๊ธฐ๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. :)
Live Sass Compiler, ํด๋ฆญํ•˜์‹œ๋ฉด VSC ์ต์Šคํ…์…˜ ์„ค์น˜ํ•˜๊ธฐ๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. :)

//SCSS ํ˜•์‹ {} css์™€ ๋™์ผํ•˜๊ฒŒ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.
$font-stack: Helvetica, sans-serif;
$primary-color : #333;

body {
	font: 100% $font-stack
	color: $primary-color
}
//SASS ํ˜•์‹
$font-stack: Helvetica, sans-serif
$primary-color : #333

body 
    font: 100% $font-stack
    color: $primary-color

 

 

 

 2๏ธโƒฃ Nesting
  • html๊ณผ ๋™์ผํ•œ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด ๋ถ€๋ชจ์—๊ฒŒ ์ƒ์†๋œ ์ž์‹ ์š”์†Œ์—๊ฒŒ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š” ์ค‘์ฒฉ ์ž‘์„ฑ๋ฒ•.
  • 2depth ์ด์ƒ์˜ ์ค‘์ฒฉ์€ ์ง€์–‘ํ•  ๊ฒƒ.
  • ๊นŠ์€ ์ค‘์ฒฉ์„ ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋ถˆํ•„์š”ํ•œ ์„ ํƒ์ž๋“ค์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜!
/* ์—ฌ๋Ÿฌ์ค„ ์ฃผ์„์€ CSS ์ปดํŒŒ์ผ์ด ๋˜์—ˆ์„ ๋•Œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. */
// ํ•œ ์ค„ ์ฃผ์„์€ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„  ์•ˆ ๋ณด์ด๊ณ  SCSSํŒŒ์ผ์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
.one {
  color: blue;

  .two {
    color: green;

    .three {
      color: red;
    }
  }
}


ul {
  li {
    color: red;
    font-size: 10px;
  }
}

[Nesting] SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ ์˜ˆ์‹œ
[Nesting] SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ ์˜ˆ์‹œ

 

 

 

3๏ธโƒฃ ampersand
  • &: ๋ช…๋ น์–ด๋กœ ๊ฐ€์ƒ์š”์†Œ, ๊ฐ€์ƒ์„ ํƒ์ž๋ฅผ ์„ ํƒํ•˜๋Š” ์•ฐํผ์ƒŒ๋“œ ๋ฌธ๋ฒ•.
  • ๊ฐ€์ƒ์„ ํƒ์ž ํ™œ์šฉ ์˜ˆ์‹œ &:focus{} &:hover{} &:active{} &:first-child{} &:nth-child(2){}
  • ๊ฐ€์ƒ ์š”์†Œ ํ™œ์šฉ ์˜ˆ์‹œ &::after{} &::before{}
// ? ๊ฐ€์ƒ์„ ํƒ์ž
ul {
  li {
    &:hover {
      background: white;
      cursor: pointer;

      &:last-child {
        border: 2px solid black;
      }
    }
  }
}

// ? ๊ฐ€์ƒ์š”์†Œ
ol {
  border: 1px solid black;

  li {
    &:nth-child(1) {
      color: red;
    }

    &:nth-child(2) {
      color: orangered;
    }
  }
}

[ampersand] ๊ฐ€์ƒ์„ ํƒ์ž, ๊ฐ€์ƒ์š”์†Œ SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ
[ampersand] ๊ฐ€์ƒ์„ ํƒ์ž, ๊ฐ€์ƒ์š”์†Œ SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ

 

 

 

4๏ธโƒฃ Variable
  • ๋ณ€์ˆ˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด SCSS ๋ฌธ์„œ ๋‚ด์—์„œ ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • $ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ๊ฐ’(์ƒ‰์ƒ, ํฐํŠธ ์‚ฌ์ด์ฆˆ, ์ด๋ฏธ์ง€url)์„ ์ €์žฅ.
  • ๋ณ€์ˆ˜ ํ˜•ํƒœ๋กœ๋Š” numbers strings color booleans lists maps null์ด ์žˆ๋‹ค.

 

 

1. String(๋ฌธ์ž์—ด) ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

// ๋ณ€์ˆ˜๋ช… ์„ค์ •
/* ์ƒ‰์ƒ */
$red: #ee4444;
$black: #222;
$bg-color: #3e5e9e;
$p-color: #282A36;
$link-color: red;

/* ํฐํŠธ์‚ฌ์ด์ฆˆ */
$font-p: 13px;
$font-h1: 28px;

/* ํฐํŠธ */
$base-font: 'Noto Sans KR', sans-serif;

/* ๋ฐฐ๊ฒฝ */
$path : './assets/img/';
$name : 'background.png';


// ๋ณ€์ˆ˜๋ฅผ ์š”์†Œ์— ํ™œ์šฉ
.cover {
  background-image: url($path + $name);
}

.box {
  background: $black;
  color: $red;
  font-size: $font-p;
}

[variable] String ๋ณ€์ˆ˜ SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ
[variable] String ๋ณ€์ˆ˜ SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ

 

 

2. List ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

  • list๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๊ฐ’์œผ๋กœ, ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ถ€ํ„ฐ 1,2,3 ... ์ธ๋ฑ์Šค๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
  • list๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” , / ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์š”์†Œ๋“ค์„ ๋‚˜์—ด.
  • list๋ฅผ ์ƒ์„ฑํ•œ ํ›„์— ํ˜ธ์ถœํ•  ๋•Œ๋Š” ์•„๋ž˜์— ์žˆ๋Š” ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • append(list,value,[separator]) lists์˜ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜.
  • index(list,value) lists์˜ ๊ฐ’์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜.
  • nth(list, n) lists์˜ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜.
// ๋ณ€์ˆ˜๋ช… ์„ค์ •
$size: 10px, 20px, 30px, 40px, 50px, 60px, 70px, 80px, 90px, 100px, 110px, 120px;


// ๋ณ€์ˆ˜๋ฅผ ์š”์†Œ์— ํ™œ์šฉ
.size-lg {
  width: nth($size, 10);
  padding: nth($size, 2) 0 0;
}

.size-md {
  width: nth($size, 5);
}

.size-sm {
  width: nth($size, 2);
}

[variable] List ๋ณ€์ˆ˜ SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ
[variable] List ๋ณ€์ˆ˜ SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ

 

 

3. Map ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

  • map์€ ( ) ๊ด„ํ˜ธ ์•ˆ์— ํ‚ค:๊ฐ’์˜ ํ˜•ํƒœ๋กœ ๋‚˜์—ดํ•˜์—ฌ ์‚ฌ์šฉ
  • map์„ ์ƒ์„ฑํ•œ ํ›„์— ํ˜ธ์ถœํ•  ๋•Œ๋Š” ์•„๋ž˜์— ์žˆ๋Š” ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • map-get(map,key) ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜
  • map-keys(map) map์— ๋“ค์–ด์žˆ๋Š” ํ‚ค(key) ์ „๋ถ€๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜
  • map-values(map) map์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’(value) ์ „๋ถ€๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜
// ๋ณ€์ˆ˜๋ช… ์ž…๋ ฅ
$font-sizes: (
  "h1": 45px,
  "h2": 19px,
  "p": 16px
);

$size: (
  "1x": 200px,
  "2x": 400px,
  "4x": 1600px
);


// ๋ณ€์ˆ˜๋ฅผ ์š”์†Œ์— ํ™œ์šฉ
.map {
  font-size: map-get($font-sizes, "p");
  width: map-get($size, "2x");
  height: map-get($size, "1x");
}

[variable] Map ๋ณ€์ˆ˜ SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ
[variable] Map ๋ณ€์ˆ˜ SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ

 

 

 

 

5๏ธโƒฃ Operator
  • ๋น„๊ต ์—ฐ์‚ฐ์ž (์ˆซ์žํ˜•) < <= > >= == !=
  • ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž (์ˆซ์ž๋‚˜ ์ƒ‰) + - * (/) %
  • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž (๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…) not and or

 

 

1. ๋น„๊ต ์—ฐ์‚ฐ์ž

  • a == b a๊ฐ€ b์™€ ๊ฐ’์ด ๊ฐ™์€์ง€ ํ™•์ธ.
  • a != b a๊ฐ€ b์™€ ๊ฐ’์ด ๋‹ค๋ฅธ์ง€ ํ™•์ธ.
// ๋น„๊ต ์—ฐ์‚ฐ์ž
$value : 32px;
p {
  /* $value ๋ณ€์ˆ˜๊ฐ€ 32์™€ ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋‹ค๋ฉด? letter-spacing: 1rem */
  @if($value >=32px) {
    letter-spacing: 1rem;
  }

  /* ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด letter-spacing: 0.5rem */
  @else {
    letter-spacing: 0.5rem;
  }
}

[operator] ๋น„๊ต ์—ฐ์‚ฐ์ž SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ
[operator] ๋น„๊ต ์—ฐ์‚ฐ์ž SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ

 

 

 

1. ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž

// ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž ํ™œ์šฉ ์˜ˆ์‹œ 
.one {
  font-size: 10px + 10px; /* ๋ง์…ˆ */
}

.two {
  font-size: 30px - 10px; /* ๋บ„์…ˆ */
}

.three {
  font-size: 10px * 2;  /* ๊ณฑ์…ˆ */
}

.four {
  font-size: (20px / 10); /* ๋‚˜๋ˆˆ ๋ชซ */
}

.five {
  font-size: 8px % 3; /* ๋‚˜๋ˆˆ ๋ชซ์„ ๋บ€ ๋‚˜๋จธ์ง€ ๊ฐ’ */
}

[operator] ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ
[operator] ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž SCSS ์—์„œ CSS๋กœ ์ปดํŒŒ์ผ๋œ ํ˜•ํƒœ

 

 

3. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

  • not true์ด๋ฉด false๋ฅผ, false์ด๋ฉด true๋ฅผ ๋ฐ˜๋Œ€๋กœ ๋ฐ˜ํ™˜.
  • and ๋‘ ๊ฐœ ๋‹ค true์ผ๋•Œ true๋ฅผ ๋ฐ˜ํ™˜.
  • or ํ•˜๋‚˜๋ผ๋„ true๋ผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜.
// ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž
// debug๋ฅผ ํ†ตํ•ด true์ธ์ง€ ํ™•์ธํ•˜๊ณ  ๊ฐ’์„ ๋ฐ˜ํ™˜

/* ๋‘ ์ƒ‰์ƒ์ด ๋™์ผํ•œ๊ฐ€? = true */
@debug rgba(53, 187, 169, 1) == #35bba9; // true

/* ๋‘ ์ƒ‰์ƒ์ด ๋™์ผํ•˜์ง€ ์•Š์€๊ฐ€? = true */
@debug rgba(179, 115, 153, 0.5) != rgba(179, 115, 153, 0.8); // true

/* true์˜ not์ด๋ฏ€๋กœ = false */
@debug not true;

/* ๋‘๊ฐœ ๋‹ค true์ผ๋•Œ๋งŒ true์ด๋ฏ€๋กœ = false */
@debug true and false;

/* ํ•˜๋‚˜๋ผ๋„ true๋ผ๋ฉด true์ด๋ฏ€๋กœ = true */
@debug true or false; // true

 

 

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์š”์•ฝ!
  • Sass๋Š” CSS๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ์Šคํƒ€์ผ ์‹œํŠธ ํ™•์žฅ ์–ธ์–ด์ด๋ฉฐ CSS ์ „์ฒ˜๋ฆฌ๊ธฐ
  • ์ผ๋ฐ˜์ ์œผ๋กœ CSS์™€ ๋™์ผํ•˜๊ฒŒ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Scss๋ฅผ ์‚ฌ์šฉ.
  • ๋ถ€๋ชจ์—๊ฒŒ ์ƒ์†๋œ ์ž์‹ ์š”์†Œ์—๊ฒŒ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š” nesting ๋ฌธ๋ฒ•.
  • ๊ฐ€์ƒ์š”์†Œ, ๊ฐ€์ƒ์„ ํƒ์ž๋ฅผ ์„ ํƒํ•˜๋Š” ampersand ๋ฌธ๋ฒ•.
  • $ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•˜๊ณ  ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ๊ฐ’์„ ์ €์žฅํ•œ ๋’ค ๋ฐ˜๋ณตํ•ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ!
  • ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•˜๊ณ , ๊ณ„์‚ฐํ•˜๊ณ , true, false๋กœ ๋ฐ˜ํ™˜ํ•ด์„œ ์กฐ๊ฑด์„ ๊ฑธ์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” operator ๋ฌธ๋ฒ•์ด ์žˆ๋‹ค.
  • ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์€ Sass์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ๋ฐœํ–‰๋ฌผ์œผ๋กœ
    Sass์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ์—์„œ ๋‹ค์Œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!
 

[JAYโŒจ๏ธSCSS] SASS(SCSS) ๊ฐ„๋‹จ ์‚ฌ์šฉ๋ฒ• ๋‘๋ฒˆ์งธ! Mixin, if, for, function

1๏ธโƒฃ @mixin ๐ŸŒŸ Sass์—์„œ @mixin์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํƒ€์ผ์‹œํŠธ ์ „์ฒด์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํƒ€์ผ ๊ทธ๋ฃน์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. @mixin์ง€์‹œ๋ฌธ์„ ํ†ตํ•ด mixin์„ ์ƒ์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ @include๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์™€์„œ ๊ฐ’

jaycode.tistory.com

 

 

 

๋ฐ˜์‘ํ˜•