SCSS 디렉티브 조건분기 반복 믹스인
SCSS 디렉티브는 @
으로 시작하는 명령문으로, 코드 내부의 분기, 반복, 믹스인 등의 제어에 사용되는 강력한 기능입니다.
조건분기 - @if…@else if…@else
// 변수 $type의 값을 비교해 color 속성을 변경
$type: spring;
div {
@if $type == spring {
color: #0f0;
} @else if $type == fall {
color: #f30;
} @else {
color: #0ff;
}
}
리스트 반복 - @each
// 리스트의 각 항목을 $type에 설정해 이미지 경로로 적용
@each $type in fine, cloudy, rainy {
.item-#{$type} { background-image: url('/images/#{$type}.gif'); }
}
조건 반복 - @while
$i: 1;
@while $i < 4 {
.section#{$i} { background-color: lighten(blue, 15% * $i); }
$i: $i + 1;
}
결과
.section1 {
background-color: #4d4dff;
}
.section2 {
background-color: #9999ff;
}
.section3 {
background-color: #e6e6ff;
}
스타일 정의 재사용 - @mixin 및 @include
@mixin
을 사용하면 공통으로 사용되는 스타일을 정의할 수 있습니다.
믹스인을 사용해 정의한 스타일은 @include
로 원하는 장소에 적용할 수 있습니다.
// box 믹스인 정의
@mixin box {
border: solid 1px aliceblue;
font-size: 16px;
}
// box 믹스인 사용
.card {
@include box;
text-align: center;
}
믹스인을 정의할 때, 프로그래밍 언어의 함수와 비슷하게 매개변수를 정의할 수 있습니다. 이렇게 하면 믹스인을 사용할 때 실제 값을 넣어주어 확장성 있는 믹스인을 만들 수 있습니다.
또한 파라미터 내부에서 $backcolor: #00f
와 같이 파라미터 기본값을 정의할 수도 있습니다.
// 매개변수를 가지는 mixin
@mixin common-border($color, $backcolor: #00f) {
border: solid 1px #{$color};
background-color: #{$backcolor};
}
.top {
@include common-border(#300, #ffc);
margin: 0px;
}
스타일 정의 상속 - @extend
이미 정의된 스타일을 상속받아 새로운 스타일을 정의합니다.
// main-content 스타일을 상속해서 sub-content 스타일을 생성
.main-content {
color: #300;
background-color: #ffc;
}
.sub-content {
@extend .main-content;
border: solid 2px #003;
}
결과
/* CSS */
.main-content, .sub-content {
color: #300;
background-color: #ffc;
}
.sub-content {
border: solid 2px #003;
}
외부 스타일시트 추가 - @import
@import
는 다른 scss 파일을 추가할 때 사용합니다. @import
는 특정 파일에 프로젝트에 전역적으로 사용될 변수와 믹스인을 정의해 놓고 모듈 형식으로 해당 파일을 불러와 사용하는 방식으로 많이 사용됩니다.
// import 시 .scss 확장자는 생략할 수 있습니다.
@import 'common';
@import 'common.scss';