프론트엔드/HTML & CSS

[SCSS] Mixin(믹스인)

테오구 2022. 4. 30. 19:12
728x90

재사용할 css선언하는 기능입니다.

@mixin large-text {
  /* 선언 */
  font: {
    size: 22px;
    weight: bold;
    family: sans-serif;
  }
  color: orange;
  &::after {
    content: '!!';
  }
  span.icon {
    background: url('/images/icon.png');
  }
}
h1 {
  @include large-text; /* 사용 */
}
div {
  @include large-text;
}

가변 인수

입력할 인수의 개수가 불확실한 경우가 있습니다. 그럴 경우 가변 인수를 사용할 수 있습니다.

/* 인수를 순서대로 하나씩 전달 받다가, 3번째 매개변수($bg-values)는 인수의 개수에 상관없이 받음 */
@mixin bg($width, $height, $bg-values...) {
  width: $width;
  height: $height;
  background: $bg-values;
}
div {
  /* 위의 Mixin(bg) 설정에 맞게 인수를 순서대로 전달하다가 3번째 이후부터는 개수에 상관없이 전달 */
  @include bg(
    100px,
    200px,
    url('/images/a.png') no-repeat 10px 20px,
    url('/images/b.png') no-repeat,
    url('/images/c.png')
  );
}

@content

선언된 Mixin에 @content이 포함되어 있다면 해당 부분에 원하는 스타일 블록을 전달할 수 있습니다.

SCSS

@mixin icon($url) {
  &::after {
    content: $url;
    @content;
  }
}
.icon1 {
  /* icon Mixin의 기존 기능만 사용 */
  @include icon('/images/icon.png');
}
.icon2 {
  /* icon Mixin에 스타일 블록을 추가하여 사용 */
  @include icon('/images/icon.png') {
    position: absolute;
  }
}

Function (함수)

mixin과의 차이점은 mixin 은 style markup 을 반환하지만, function 은 @return 를 통하여 값 을 반환합니다.

$max-width: 980px;
@function columns($number: 1, $columns: 12) {
  @return $max-width * ($number / $columns);
}
.box_group {
  width: $max-width;
  .box1 {
    width: columns();
  }
  .box2 {
    width: columns(8);
  }
  .box3 {
    width: columns(3);
  }
}

@function vs @mixin

  • @functoin은 값 하나를 Return
  • @mixin은 속성 묶음을 반환
728x90

'프론트엔드 > HTML & CSS' 카테고리의 다른 글

[SCSS] Nesting (중첩)  (0) 2022.04.29
[SCSS] 변수와 타입  (0) 2022.04.28
scss  (0) 2022.04.28
CSS(box-sizing : border-box)  (0) 2021.08.30
window load  (0) 2021.08.28