조건문과 반복문 (Control Directives)
SCSS(Sass)에서 조건문과 반복문은 복잡한 스타일링 요구사항을 처리하고 코드를 간소화하는 데 사용됩니다. 이러한 제어 지시문을 사용하면, 동일한 패턴을 가진 스타일을 반복적으로 생성하거나, 특정 조건에 따라 다른 스타일을 적용할 수 있습니다.
조건문 (@if, @else if, @else)
조건문은 주어진 조건에 따라 다른 스타일 또는 설정을 적용할 때 사용됩니다.
- @if는 주어진 조건이 참(True)일 때 코드 블록을 실행합니다.
- @else if는 첫 번째 조건이 거짓(False)이고 추가 조건이 참일 때 코드 블록을 실행합니다.
- @else는 모든 조건이 거짓일 때 코드 블록을 실행합니다.
$theme: "dark";
.container {
@if $theme == "dark" {
background-color: black;
color: white;
} @else {
background-color: white;
color: black;
}
}
반복문 (@for, @each, @while)
반복문은 주어진 조건이나 목록에 따라 코드 블록을 반복 실행할 때 사용됩니다.
- @for는 정해진 범위에 대해 반복합니다.
- @each는 리스트나 맵의 각 항목에 대해 반복합니다.
- @while은 조건이 참인 동안 반복합니다.
@for 반복문 예시:
@for $i from 1 through 3 {
.item-#{$i} { width: 100px * $i; }
}
이 SCSS 코드 조각은 @for
반복문을 사용하여 클래스 .item-1
, .item-2
, .item-3
에 대해 서로 다른 width
스타일을 생성합니다. 각각의 클래스는 $i
의 값에 따라 고유한 너비를 가집니다.
코드 분석
@for $i from 1 through 3
: 이 줄은$i
라는 변수를 1부터 3까지 반복하도록 설정합니다.$i
는 각 반복마다 1, 2, 3의 값을 차례로 가집니다..item-#{$i}
: 이 부분은 문자열 보간(string interpolation)을 사용하여$i
의 현재 값에 따라 동적으로 클래스 이름을 생성합니다. 예를 들어, 첫 번째 반복에서는.item-1
, 두 번째는.item-2
, 세 번째는.item-3
이 됩니다.{ width: 100px * $i; }
: 각 클래스에 대해width
속성을 설정합니다.width
는$i
의 값에 100픽셀을 곱하여 계산됩니다. 그래서.item-1
은width: 100px
,.item-2
는width: 200px
,.item-3
은width: 300px
를 갖게 됩니다.
컴파일 후 CSS
SCSS 코드가 컴파일되면 아래와 같은 CSS가 생성됩니다:
.item-1 {
width: 100px;
}
.item-2 {
width: 200px;
}
.item-3 {
width: 300px;
}
이 반복문은 동일한 패턴을 가진 여러 스타일을 효율적으로 생성하는 좋은 예시입니다. SCSS의 @for
반복문을 사용하면, 비슷한 패턴을 가진 여러 CSS 규칙을 손쉽게 작성할 수 있습니다.
@each 반복문 예시:
$colors: (blue: #3498db, red: #e74c3c, green: #2ecc71);
@each $color, $hex in $colors {
.#{$color}-text { color: $hex; }
}
이 SCSS 코드 조각은 Sass의 @each
반복문을 사용하여 $colors
맵에 있는 각 색상 이름과 해당하는 헥스 코드를 이용해 동적으로 CSS 클래스를 생성합니다.
코드 설명
$colors
: 여기서$colors
는 Sass의 맵(map)으로 정의됩니다. 맵은 키-값 쌍으로 구성되어 있으며, 각 색상의 이름(blue
,red
,green
)이 키로, 해당 색상의 헥스 코드(#3498db
,#e74c3c
,#2ecc71
)가 값으로 지정됩니다.@each $color, $hex in $colors
: 이@each
반복문은$colors
맵의 각 항목을 반복합니다. 반복할 때마다$color
변수는 색상 이름(키)을,$hex
변수는 해당 색상의 헥스 코드(값)를 받습니다..#{$color}-text { color: $hex; }
: 이 부분에서 문자열 보간(string interpolation)을 사용해 클래스 이름을 동적으로 생성합니다. 예를 들어,$color
가blue
일 때 클래스 이름은.blue-text
가 되며, 해당 클래스의color
속성은$hex
변수의 값인#3498db
로 설정됩니다.
컴파일 후 CSS
SCSS 코드가 컴파일된 후에는 다음과 같은 CSS가 생성됩니다:
.blue-text {
color: #3498db;
}
.red-text {
color: #e74c3c;
}
.green-text {
color: #2ecc71;
}
각 클래스는 해당 색상의 이름과 헥스 코드를 반영하여, 색상별로 텍스트 색상을 설정하는 데 사용될 수 있습니다. 이러한 방식은 다양한 색상을 쉽게 관리하고 재사용할 수 있도록 해줍니다.
@while 반복문 예시:
$i: 1;
@while $i <= 3 {
.item-#{$i} { width: 100px * $i; }
$i: $i + 1;
}
이러한 제어 지시문을 사용하면, SCSS 코드를 보다 동적이고 유연하게 만들 수 있으며, 중복을 크게 줄일 수 있습니다. 조건에 따라 스타일을 변경하거나, 여러 요소에 대해 비슷한 스타일을 반복적으로 적용할 때 매우 유용합니다.
이 SCSS 코드 조각은 @while
반복문을 사용하여 클래스 .item-1
, .item-2
, .item-3
에 대해 서로 다른 width
스타일을 생성합니다. 각 클래스는 변수 $i
의 값에 따라 고유한 너비를 가집니다.
코드 설명
변수 초기화:
$i: 1;
로 시작하여,$i
변수를 1로 초기화합니다.@while 반복문:
@while $i <= 3
은$i
가 3 이하일 때까지 반복문을 실행하라는 의미입니다.클래스 생성과 스타일 지정:
.item-#{$i}
: 문자열 보간을 사용하여$i
의 현재 값에 따라 동적으로 클래스 이름을 생성합니다. 예를 들어, 첫 번째 반복에서는.item-1
, 두 번째는.item-2
, 세 번째는.item-3
이 됩니다.{ width: 100px * $i; }
: 각 클래스에 대해width
속성을 설정합니다.width
는$i
의 값에 100픽셀을 곱하여 계산됩니다. 그래서.item-1
은width: 100px
,.item-2
는width: 200px
,.item-3
은width: 300px
를 갖게 됩니다.
변수 증가:
$i: $i + 1;
는$i
의 값을 1씩 증가시킵니다. 이는 다음 반복을 위해$i
의 값을 업데이트합니다.
컴파일 후 CSS
SCSS 코드가 컴파일되면 아래와 같은 CSS가 생성됩니다:
.item-1 {
width: 100px;
}
.item-2 {
width: 200px;
}
.item-3 {
width: 300px;
}
@while
반복문은 특정 조건이 만족될 때까지 계속 실행되는 반복문으로, 복잡한 조건에 따라 스타일을 생성할 때 유용합니다. 이 예시에서는 간단한 조건을 사용하여 동적으로 여러 클래스에 서로 다른 스타일을 적용하고 있습니다.