중복된 스타일을 여러번 반복해서 써야하는 경우 유용하게 사용할 수 있는 @extend에 대해 알아보겠습니다.
@extend
@extend는 SCSS에서 스타일 코드의 재사용성을 높이기 위해 제공되는 기능 중 하나로, 스타일을 복사해서 사용하는 @mixin과 달리 선택자가 다른 선택자의 스타일을 상속받는 방식으로 동작합니다.
/* SCSS */
.button {
padding: 10px 20px;
font-size: 16px;
background-color: blue;
color: white;
}
.primary-button {
@extend .button;
background-color: darkblue;
}
/* css */
.button, .primary-button {
padding: 10px 20px;
font-size: 16px;
background-color: blue;
color: white;
}
.primary-button {
background-color: darkblue;
}
위의 예제처럼, 선택자를 병합하는 방식으로 컴파일되므로, 코드의 부피를 줄일 수 있고 중복된 스타일 없이 깔끔하게 코드를 관리할 수 있습니다.
플레이스홀더 선택자 (Placeholder Selector)
@extend는 주로 플레이스홀더 선택자(%)와 함께 사용합니다. 플레이스홀더 선택자는 css로 컴파일되지 않으며 오로지 재사용을 위한 스타일 블럭입니다.
/* SCSS */
//플레이스홀더 선택자
%button-base {
padding: 10px 20px;
font-size: 16px;
border: 1px solid transparent;
border-radius: 5px;
cursor: pointer;
}
.button-primary {
@extend %button-base;
background-color: blue;
color: white;
}
.button-secondary {
@extend %button-base;
background-color: gray;
color: black;
}
/* css */
.button-primary, .button-secondary {
padding: 10px 20px;
font-size: 16px;
border: 1px solid transparent;
border-radius: 5px;
cursor: pointer;
}
.button-primary {
background-color: blue;
color: white;
}
.button-secondary {
background-color: gray;
color: black;
}
@extend의 한계
앞서 말씀드렸듯이 @extend를 사용하면 선택자가 병합되어 코드의 부피를 줄입니다. 하지만 많은 선택자를 확장하면 복잡해진 병합으로 인해 선택자가 연결되어 버리거나 의도치 않은 css 코드가 생성될 수 있다는 단점이 있습니다. 또한 컴파일된 css에서는 확장시킨 스타일의 추적이 어려우므로 디버깅이 어려워 질 수 있습니다.
그렇다면 언제 @extend를 사용할까?
@extend를 사용하기 적합한 상황을 알아봅시다.
- 여러 요소가 공통 스타일을 공유하고, 추가 스타일이 약간씩 다른 경우
- 선택자 병합이 문제가 되지 않는 프로젝트의 경우
- 코드의 간결성과 재사용성을 높이고 싶은 경우
'👩💻 > CSS, SCSS' 카테고리의 다른 글
SCSS 활용 팁 6. 참조 선택자 "&"을 활용하여 BEM 방법론에 따라 클래스 네이밍하기 (0) | 2025.01.13 |
---|---|
SCSS 활용 팁 5. 믹스인(mixin)으로 반응형 중단점 쉽게 관리하기 (0) | 2025.01.10 |
SCSS 활용 팁 3. 변수와 믹스인 사용으로 배경 이미지 경로 관리하기 (0) | 2025.01.06 |
SCSS 활용 팁 2. @if/@else를 포함한 @mixin으로 텍스트 말줄임 쉽게 처리하기 (0) | 2025.01.06 |
SCSS 활용 팁 1. @function을 활용하여 px을 rem으로 쉽게 변환하기 (0) | 2025.01.06 |