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

2023. 4. 16. 00:08ใ†html&css

๋ฐ˜์‘ํ˜•

 

 

 

 1๏ธโƒฃ @mixin ๐ŸŒŸ
  • Sass์—์„œ @mixin์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํƒ€์ผ์‹œํŠธ ์ „์ฒด์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํƒ€์ผ ๊ทธ๋ฃน์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • @mixin์ง€์‹œ๋ฌธ์„ ํ†ตํ•ด mixin์„ ์ƒ์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ @include๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์™€์„œ ๊ฐ’์„ ๋„ฃ์–ด ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹.
  • @mixin์„ ๋” ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ Arguments ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    ( $key : value ) ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๋ฉด arguments๊ฐ€ ๊ณต๋ž€์ผ ๋•Œ ๊ธฐ๋ณธ๊ฐ’๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ธฐ๋ณธ ๊ฐ’์€ ์ƒ๋žต ๊ฐ€๋Šฅ)
  • ์ž๋™ํ™” ๋˜์–ด์žˆ๋Š” _mixin.scss ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•ด ๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœ.
    ์‹ค์ œ ํ˜„์—…์—์„œ๋„ _mixin์€ ์ƒˆ๋กœ ์ž‘์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ณ ์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
  • โš ๏ธ ๋ฐ˜๋ณตํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ @mixin์— ๋ชฐ์•„๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ! 
    ์„œ๋กœ ์—ฐ๊ด€ ์žˆ๋Š” ์Šคํƒ€์ผ ์†์„ฑ๋ผ๋ฆฌ ๋ฌถ์œผ๋ฉด ์ข€ ๋” ์‚ฌ์šฉ์„ฑ์ด ๋†’์€ @mixin์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

/* @mixin์„ ํ™œ์šฉํ•ด ๋ฒ„ํŠผ ์Šคํƒ€์ผ ์ œ์–ด */

@mixin button($color:#b4d455) {
  background-color: $color;
  border-radius: 5px;
  padding: .25em .5em;
  &:hover {
    cursor: pointer;
	background-color: $color;
	border-color: $color;
  }
}
.button-a {
  @include button;
}
.button-b {
  @include button(#c0ffee);
}

 

@Mixin์— Arguments๋ฅผ ์ž…๋ ฅํ•ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ button์„ ์Šคํƒ€์ผ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•. CSS์ปดํŒŒ์ผ๋ง๋œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋น„๊ต.
@Mixin์— Arguments๋ฅผ ์ž…๋ ฅํ•ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ button์„ ์Šคํƒ€์ผ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•. CSS์ปดํŒŒ์ผ๋ง๋œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋น„๊ต.

 

 

 

 2๏ธโƒฃ @if
  • @if (์กฐ๊ฑด) { ์กฐ๊ฑด์ด ์ฐธ์ผ ๋•Œ ์‹คํ–‰๋  ๊ตฌ๋ฌธ } @else { if๋ฌธ์˜ ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ผ ๋•Œ ์‹คํ–‰๋  ๊ตฌ๋ฌธ } ์„ ๊ฐ€์ง„๋‹ค.
  • ๋น„์Šทํ•œ ๊ตฌ์กฐ์ง€๋งŒ ํŠน์ • ์กฐ๊ฑด์— ํ•ด๋‹นํ•  ๋•Œ๋งŒ ์Šคํƒ€์ผ์„ ์ œ์–ดํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ.

 

/* @if์™€ @mixin์„ ํ™œ์šฉํ•ด ๋ฏธ๋””์–ด์ฟผ๋ฆฌ ์Šคํƒ€์ผ ์ œ์–ด */

@mixin media($size) {
  @if $size =='mobile' {
    @media screen and (max-width: 768px) {
      @content;
    }
  }

  @else if $size =='tablet' {
    @media screen and (min-width: 769px) and (max-width: 1024px) {
      @content;
    }
  }

  @else if $size =='desktop' {
    @media screen and (min-width: 1025px) {
      @content;
    }
  }
}

@if์™€ @mixin์„ ํ™œ์šฉํ•ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Media Query๋ฅผ ์Šคํƒ€์ผ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•. CSS์ปดํŒŒ์ผ๋ง๋œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋น„๊ต.
@if์™€ @mixin์„ ํ™œ์šฉํ•ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Media Query๋ฅผ ์Šคํƒ€์ผ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•. CSS์ปดํŒŒ์ผ๋ง๋œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋น„๊ต.

 

 

 3๏ธโƒฃ @for
  • @for๋ฌธ์— from(์‹œ์ž‘) through(๋)๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น๋˜๋Š” ๋ฒ”์œ„์—์„œ ์ˆซ์ž๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด์„œ ๋ฐ˜๋ณต์„ ์‹คํ–‰ํ•œ๋‹ค.
  • ๋ณ€์ˆ˜๋ช…์„ ์†์„ฑ์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” #{$๋ณ€์ˆ˜๋ช…} ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ.

 

/* @for ์˜ ๊ตฌ์กฐ */

for ($๋ณ€์ˆ˜) from (๋ฐ˜๋ณต์„ ์‹œ์ž‘ํ•  ์ˆซ์ž) through(๋ฐ˜๋ณต์„ ๋๋‚ผ ์ˆซ์ž){
	// ๋ฐ˜๋ณตํ•  ๋‚ด์šฉ
}
/* @for์„ ์ด์šฉํ•ด nth-์„ ํƒ์ž์—๊ฒŒ ๊ฐ๊ฐ์˜ image๋ฅผ ๋ฐฐ๊ฒฝ์— ๋„ฃ์–ด์ค€๋‹ค. */

@for $i from 1 through 5 {
  .photo-box:nth-child(#{$i}) {
    background-image: url("../assets/images#{$i}.png");
  }
}

 

@for์„ ํ™œ์šฉํ•ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Background๋ฅผ ์Šคํƒ€์ผ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•. CSS์ปดํŒŒ์ผ๋ง๋œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋น„๊ต.
@for์„ ํ™œ์šฉํ•ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Background๋ฅผ ์Šคํƒ€์ผ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•. CSS์ปดํŒŒ์ผ๋ง๋œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋น„๊ต.

 

 

 

4๏ธโƒฃ @Function
  • ์‹ค๋ฌด์—์„œ scss ํ•จ์ˆ˜๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ์Šคํƒ€์ผ ์‹œํŠธ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณต์žกํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  return ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.

 

/* @function์„ ํ™œ์šฉํ•ด x๊ฐ€ number์ธ์ง€ ํ™•์ธ ํ›„ ์ž๋™์œผ๋กœ 'px'๋‹จ์œ„๋ฅผ ๋ถ™์—ฌ์ฃผ๊ธฐ. */

@function unitCheck($x) {

  // ๋‹จ์œ„์ฒดํฌ
  @if(type-of($x)==number) {
    @if(unitless($x)) {
      @return $x+px;
    }
  }

  @return $x;
}

.test {
  font-size: unitCheck(100);
}

 

@function์„ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„์ฒดํฌ ๊ธฐ๋Šฅ์„ ์ œ์ž‘ํ•ด์„œ ์Šคํƒ€์ผ๋ง ํ•˜๋Š” ๋ฐฉ๋ฒ•. CSS์ปดํŒŒ์ผ๋ง๋œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋น„๊ต.
@function์„ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„์ฒดํฌ ๊ธฐ๋Šฅ์„ ์ œ์ž‘ํ•ด์„œ ์Šคํƒ€์ผ๋ง ํ•˜๋Š” ๋ฐฉ๋ฒ•. CSS์ปดํŒŒ์ผ๋ง๋œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋น„๊ต.

 

 

 

๐Ÿ™‹๐Ÿป‍โ™€๏ธ ๊ฒฐ๋ก 
  • Sass๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํšŒ์‚ฌ๋„ ์žˆ๋‹ค๊ณ  ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋ณธ ํšŒ์‚ฌ๋Š” ๋Œ€๋ถ€๋ถ„ Sass๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.
    ๋ฌผ๋ก  tailwind๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ CSS๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ „์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ํšŒ์‚ฌ๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค!
    ๊ทธ๋ž˜๋„ Sass ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์ด ์–ด๋ ต์ง€ ์•Š์œผ๋‹ˆ ์ˆ™์ง€ํ•˜๊ณ  ์žˆ๋Š” ๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. :)
  • Sass์—์„œ @mixin์€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ, ์Šคํƒ€์ผ์‹œํŠธ ์ „์ฒด์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํƒ€์ผ ๊ทธ๋ฃน์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋น„์Šทํ•œ ๋ฌธ๋ฒ•์œผ๋กœ @for๋ฌธ์„ ํ™œ์šฉํ•ด์„œ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , @if๋ฌธ์„ ํ™œ์šฉํ•ด์„œ ์กฐ๊ฑด๋ฌธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์€ Sass์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋‘๋ฒˆ์งธ ๋ฐœํ–‰๋ฌผ์œผ๋กœ
    Sass์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ์—์„œ ์ด์ „ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

 

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

1๏ธโƒฃ Sass ๋ž€? Sass๋Š” CSS๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ์Šคํƒ€์ผ ์‹œํŠธ ํ™•์žฅ ์–ธ์–ด์ด๋ฉฐ CSS ์ „์ฒ˜๋ฆฌ๊ธฐ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ SassํŒŒ์ผ์„ ์ง์ ‘ ์ฝ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— Sass๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•œ ํ›„, ์ผ๋ฐ˜ CSS๋กœ ์ปดํŒŒ์ผ! ์ปดํŒŒ์ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ

jaycode.tistory.com

 

 

 

 

๋ฐ˜์‘ํ˜•