Untitled

πŸ˜‰ ν—·κ°ˆλ Έλ˜ & λͺ°λžλ˜ λΆ€λΆ„λ“€λ§Œ μ •λ¦¬ν•˜λŠ” λ‚˜λ§Œμ˜ TIL
😯 λͺ¨λ“  κ°•μ˜ λ‚΄μš©μ€ 적지 μ•Šμ•„μš”!

였늘의 μ†Œκ°μ€?
λ“œλ””μ–΄ SCSSκ°€ λλ‚¬μŠ΅λ‹ˆλ‹€!
μ²˜μŒμ—λŠ” CSSλ₯Ό κ·Έλƒ₯ 쑰금 더 κ°„νŽΈν•˜κ²Œ μž‘μ„±ν•  수 μžˆκ΅¬λ‚˜~ λΌλŠ” λŠλ‚ŒμœΌλ‘œ SCSSλ₯Ό κ³΅λΆ€ν•˜κΈ° μ‹œμž‘ν–ˆλŠ”λ°, κ·Έλƒ₯ μƒˆλ‘œμš΄ μ–Έμ–΄ ν•˜λ‚˜ 더 λ°°μš°λŠ” λŠλ‚Œμ΄ 더 컸던..
CSS μŠ€νƒ€μΌ 속성듀을 SCSSλ₯Ό μ΄μš©ν•˜λ©΄ 정말 κ°„νŽΈν•˜κ²Œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ•žμœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό 진행할 λ•Œ SCSSλ₯Ό 더 적극적으둜 ν™œμš©ν•΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
λ“œλ””μ–΄ 주먹ꡬꡬ둜 적던 CSSλ₯Ό 가독성 μ’‹κ²Œ 적을 수 μžˆκ² μ–΄μš” 흑흑

ν•˜μ§€λ§Œ 아직 μŠ€νƒ€μΌ 속성을 λΆ„λ¦¬ν•΄μ„œ @mixin을 λ§Œλ“€κ³ ..
객체 ν˜•νƒœλ‘œ λΆ„λ¦¬ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것은 쑰금 μ΅μˆ™μΉ˜κ°€ μ•Šλ„€μš”




[1] SCSS ν™•μž₯

@extendλ₯Ό μ‚¬μš©ν•˜μ—¬ 기쑴의 μš”μ†Œμ— 있던 속성듀을 λ‹€λ₯Έ μš”μ†Œμ— μ μš©μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

Untitled 1

.btn-primary에도 .btn의 속성듀이 적용된 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.


λ˜ν•œ μƒμ†μ˜ κ°œλ…μœΌλ‘œλ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•  λ•Œ, 쀑첩에 λŒ€ν•œ μ‚¬μš©μ„ μ΅œλŒ€ν•œ ν”Όν•΄μ•Ό μ„ νƒμž ν­νŒ”μ˜ λΆ€μž‘μš©μ„ 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

.container {
  .item {
    color: red;
    .box {
      @extend .item;
      &::after {
        content: "";
        @extend .item;
      }
    }
  }
}
/* μ„ νƒμž ν­νŒ” */
.container .item,
.container .item .box::after,
.container .item .box::after .box,
.container .item .box {
  color: red;
}
.container .item .box::after {
  content: "";
}


  • % (placeholder μ„ νƒμž)

%λŠ” .btn와 같이 class μ„ νƒμžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , @extendλ₯Ό μ‚¬μš©ν•  수 있게 μ •μ˜ν•΄μ£ΌλŠ” μ„ νƒμžμž…λ‹ˆλ‹€.

Untitled 2

.btn은 λ”°λ‘œ μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


μ΄λ•Œ, μ£Όμ˜μ‚¬ν•­μ€ mediaκ·œμΉ™ λ‚΄μ—μ„œ μ‚¬μš©ν•  placeholder μ„ νƒμžλŠ” κ·Έ μ•ˆμ—μ„œ μ •μ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

@media all and (max-width: 1400px) {
  %box {
    color: red;
  }
  .box {
    @extend %box;
  }
}

μ—¬λŸ¬ λ¬Έμ œκ°€ 많기 λ•Œλ¬Έμ— @extendλ³΄λ‹€λŠ” @mixin κ·œμΉ™μ„ μ‚¬μš©ν•˜λŠ” 것이 더 μ’‹μŠ΅λ‹ˆλ‹€.




[2] SCSS ν•¨μˆ˜

@function을 μ΄μš©ν•΄μ„œ ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Untitled 3


λ˜ν•œ @error을 μ‚¬μš©ν•˜μ—¬ μ˜ˆμ™Έμ²˜λ¦¬κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

Untitled 4


ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  λ•Œ CSS에 λ‚΄μž₯λ˜μ–΄ μžˆλŠ” λ‹€μ–‘ν•œ ν•¨μˆ˜μ™€ 이름을 겹치게 ν•˜μ§€ μ•ŠκΈ° μœ„ν•΄

두 개의 단어λ₯Ό μ‘°ν•©ν•΄μ„œ 이름을 μž‘μ„±ν•˜λŠ” 것이 μΌλ°˜μ μ΄λΌλŠ” 것을 μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

@function my-grid($col: 1, $total: 12, $rest...) {
  @if ($col > $total) {
    @error '$col must be less then $total.';
  }
  @if (list.length($rest) > 0) {
    @error 'Unnecessary arguments include.';
  }
  @return $columns-width * $col / $total;
}




[3] SCSS 쑰건, 반볡 ꡬ문

SCSSμ—μ„œ 쑰건, λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


[3-1] 쑰건문

μ‘°κ±΄λ¬Έμ—μ„œλŠ” @if, @else if, @elseλ₯Ό μ „λΆ€ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@mixin avatar($size, $circle: false) {
  width: $size;
  height: $size;

  @if $circle {
    border-radius: $size / 2;
  }
}

.sqare-av {
  @include avatar(100px, $circle: false);
}
.circle-av {
  @include avatar(100px, $circle: true);
}


[3-2] 반볡문

[1] @each

λ‹¨μˆœν•œ λ°°μ—΄κ³Ό 객체 μˆœνšŒλŠ” @each ꡬ문을 ν†΅ν•΄μ„œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Untitled 5


[2] @for

μš°λ¦¬κ°€ ν”νžˆ μ•Œκ³ μžˆλŠ” 반볡문 μž‘μ„±μ„ μœ„ν•΄μ„  @for ꡬ문을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Untitled 6

두 개의 ν˜•νƒœλ‘œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • for λ³€μˆ˜ from μ‹œμž‘ through 끝 (끝이 ν¬ν•¨λ©λ‹ˆλ‹€.)
  • for λ³€μˆ˜ from μ‹œμž‘ to 끝 (끝이 ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)


[3] @while

쑰건뢀뢄이 μ’…λ£Œλ  λ•Œ λ£¨ν”„μ—μ„œ λΉ μ Έλ‚˜μ˜€λŠ” @while ꡬ문이 μžˆμŠ΅λ‹ˆλ‹€.

Untitled 7




[4] SCSS κ°€μ Έμ˜€κΈ°, λͺ¨λ“ˆ

[4-1] κ°€μ Έμ˜€κΈ°

@import β€œ./variables”; 의 ν˜•νƒœλ‘œ SCSS νŒŒμΌμ„ 가져와 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν™•μž₯자λ₯Ό μƒλž΅ν•΄μ„œ 적을 수 있으며, 파일 맨 μ•žμ— _κ°€ μžˆμ–΄λ„ μƒλž΅ν•˜κ³  적을 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή 파일 μ•ˆμ— μžˆλŠ” λ³€μˆ˜λ“€μ˜ 이름을 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


sass scss:css(sass μ§€κΈˆ 파일이 μžˆλŠ” 폴더: 컴파일 된 νŒŒμΌλ“€μ΄ μ €μž₯될 폴더) λͺ…λ Ήμ–΄λ₯Ό 톡해

SCSSνŒŒμΌμ„ CSS둜 컴파일 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λ•Œ, 파일 μ•žμ— _κ°€ μžˆλŠ” SCSSνŒŒμΌλ“€μ€ 컴파일 λŒ€μƒμ— ν¬ν•¨λ˜μ§€ μ•Šμ•„ λ”°λ‘œ 파일이 μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


[4-2] λͺ¨λ“ˆ

@use β€œ./variables” as var; 의 ν˜•νƒœλ₯Ό SCSS νŒŒμΌμ„ λͺ¨λ“ˆν™” ν•΄μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν™•μž₯자λ₯Ό μƒλž΅ν•΄μ„œ 적을 수 있으며, 파일 맨 μ•žμ— _κ°€ μžˆμ–΄λ„ μƒλž΅ν•˜κ³  적을 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή 파일 μ•ˆμ— μžˆλŠ” λ³€μˆ˜λ“€μ˜ 이름을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 파일 이름(λ˜λŠ” ꡐ체된 이름).λ³€μˆ˜ μ΄λ¦„μ˜ ν˜•νƒœλ‘œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.


λ˜ν•œ export의 μ—­ν• λ‘œ @forwardν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

as λ’€μ˜ ꡐ체될 이름을 적을 λ•Œ, *λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€

@forward β€œ./mixins” as mix-*;

λ”°λΌμ„œ mix-mixins의 ν˜•νƒœλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•¨μˆ˜ μ‚¬μš©κ³Ό λΉ„μŠ·ν•˜κ²Œ 파일의 이름을 κ²ΉμΉ˜μ§€ μ•Šκ²Œ 두 가지 단어λ₯Ό μ‘°ν•©ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.




[5] SCSS λ‚΄μž₯ λͺ¨λ“ˆ

이미 λ§Œλ“€μ–΄μ Έ λ‚΄μž₯λ˜μ–΄ μžˆλŠ” κΈ°λŠ₯듀을 λͺ¨λ“ˆλ‘œμ¨ μ΄μš©ν•  수 μžˆλŠ” λ‚΄μž₯ λͺ¨λ“ˆλ“€μ„ λΆˆλŸ¬μ™€ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Sass-lang.com Built-in Modules

  • sass:color - 색상 κ΄€λ ¨
  • sass:list - 리슀트 νƒ€μž…
  • sass:map - 객체 νƒ€μž…
  • sass:math - 계산
  • sass:meta - 콜백, νƒ€μž… 체크 λ“±
  • sass:selector
  • sass:string - λ¬Έμžμ—΄ κ΄€λ ¨


각 λͺ¨λ“ˆμ€ sass-lang μ‚¬μ΄νŠΈλ₯Ό μ°Έκ³ ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.




[6] 디버그

[6-1] @debug

@debug둜 디버그 메세지λ₯Ό 남길 수 μžˆμŠ΅λ‹ˆλ‹€.

μΌμ’…μ˜ console.log()의 μ—­ν• λ‘œμ¨ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


[6-2] @warn

@warn을 μ‚¬μš©ν•΄μ„œ κ²½κ³  메세지λ₯Ό 남길 수 μžˆμŠ΅λ‹ˆλ‹€.

console.warn()의 μ—­ν• λ‘œμ¨ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


[6-3] @error

@errorλ₯Ό μ‚¬μš©ν•΄μ„œ μ—λŸ¬ 메세지λ₯Ό 남길 수 μžˆμŠ΅λ‹ˆλ‹€.

μ—λŸ¬ λ©”μ„Έμ§€λŠ” 컴파일이 μΌμ–΄λ‚˜μ§€ μ•Šκ²Œ ν•΄μ€λ‹ˆλ‹€.

μ΄λŠ” console.error()의 μ—­ν•  및 new Error의 μ—­ν• λ‘œμ¨ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


μ‚¬μš©μ— 따라 적절히 메세지λ₯Ό 남기면 컴파일 μ‹œ μ–΄λŠ λΆ€λΆ„μ—μ„œ μ—λŸ¬κ°€ μΌμ–΄λ‚¬λŠ”μ§€, μ–΄λ–»κ²Œ 컴파일 λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.





좜처

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

sass-lang document

μΉ΄ν…Œκ³ λ¦¬: ,

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°