scss에서 for each 반복문 사용하는 방법

scss에서 for each 반복문 사용하는 방법
SeedividendPosted On Aug 3, 20243 min read

scss에서 @for @each 반복문 사용하는 방법

scss에서 for, each 반복문을 작성할 수 있습니다.

1. for ${i} from ${start} to ${end}

for문의 가장 기본적인 방법으로

for ${i} from ${start} to ${end}로 작성하면 i를 인덱스로 하고 start부터 end 미만까지 반복합니다. 이하가 아니라 미만이라는 점만 참고하시면 됩니다.

$colorList: #e74c3c, #e67e22, #f1c40f, #2ecc71, #c0392b, #3498db, #2c3e50, #9b59b6, #bdc3c7, #7f8c8d, #2980b9;

// 1~10까지 반복
@for $i from 1 to 11 {
  &:nth-child(#{$i}) {
    background: nth($colorList, $i);
  }
}

여기서 nth는 기본 내장 함수로서 scss의 배열에서 특정 값을 알아낼 수 있는 함수입니다. 자바스크립트로 치면 colorList[i] 와 같은 개념이겠죠.

2. for ${i} from ${start} through ${end}

첫번째 for문과의 차이점은 to가 through로 변경되었다는 점 뿐인데요. start부터 end이하 까지 반복합니다.

$colorList: #e74c3c, #e67e22, #f1c40f, #2ecc71, #c0392b, #3498db, #2c3e50, #9b59b6, #bdc3c7, #7f8c8d, #2980b9;

// 1~11까지 반복
@for $i from 1 to 11 {
  &:nth-child(#{$i}) {
    background: nth($colorList, $i);
  }
}

3. @each ${item} in ${list}

다음은 @each 문법인데요. 자바스크립트의 for each 문법과 동일한 방식이라고 생각해주시면 됩니다.

// index 찾는 방법
@each $color in $colorList {
}

위와 같이 작성할 수 있을텐데요.

each문의 문제는 index를알 수 없다는 점인데요. 그 부분은 이렇게 해결할 수 있습니다.

@each $color in $colorList {
  $i: index($colorList, $color);
  &:nth-child(#{$i}) {
    background: #{$color};
  }
}

index라는 내장 함수를 통해서 배열의 특정 값이 몇번째에 있는 값인지를 알아낼 수 있습니다.

그렇게 알아낸 $i 값으로 nth-child에 넣어주면서 사용할 수 있죠.

4. Map 형태의 for ${a},${b} in ${map}

index 내장함수를 통해서 index를 알아낼 수도 있지만 아래와 같이 map형태로 배열을 저장한다면 별도의 내장함수 없이 바로 each문을 통해서 스타일을 지정할 수 있습니다.

$colors: (
  1: #e74c3c,
  2: #e67e22,
  3: #f1c40f,
  4: #2ecc71,
  5: #c0392b,
  6: #3498db,
  7: #2c3e50,
  8: #9b59b6,
  9: #bdc3c7,
  10: #7f8c8d,
  11: #2980b9,
);

@each $i, $color in $colors {
  &:nth-child(#{$i}) {
    background: #{$color};
  }
}

@each 뒤에 오는 값에 map의 key, value로 할당하면 그 값을 반복문에서 사용할 수 있습니다. 그래서 별도로 index를 지정하지 않고도 nth-child에 인덱스 값을 넣을 수 있습니다.

오늘은 scss의 for문을 사용하는 방법에 대해서 알아보았습니다. 다음에는 다른 scss 문법에 대해서 알아보도록 하겠습니다.