SCSS의 변수는 강력하지만, 런타임 동작이나 동적 스타일링과 관련된 한계가 존재합니다. SCSS 변수와 CSS의 변수를 연동하면, SCSS에서 선언한 변수값을 CSS에도 할당하기때문에 SCSS 변수의 기능은 활용하고, CSS 변수로서 런타임 동작으로 확장시킬 수 있습니다.
SCSS변수의 한계
SCSS변수는 막강한 기능을 가지고 있지만, 컴파일시에만 작동하며 일단 CSS로 컴파일되고 난 후에는 변수값을 동적으로 변경할 수 없는 한계를 가지고 있습니다. 이는 사용자 입력, 시스템 설정, 환경 변화에 따른 스타일을 동적으로 변경해야 하는 경우 불리합니다. 또한, 변수의 값이 컴파일 된 CSS코드에 직접적으로 출력되는 방식이므로, 여러번 반복하여 사용할 경우 CSS파일의 크기를 증가시킵니다.
결론적으로 SCSS변수는 정적 스타일 정의 및 복잡한 계산에는 탁월하지만, 동적 스타일링이나 런타임 동작이 필요한 경우 CSS 변수를 보완적으로 사용하는 것이 효과적일 수 있습니다.
SCSS변수로 CSS변수 정의
SCSS의 변수 값을 CSS변수로 할당하는 코드입니다. 앞서 다루었던 보간을 사용합니다.
// SCSS 변수 선언
$primary-color: #3498db;
$secondary-color: #2ecc71;
// CSS 변수에 SCSS 변수 할당
:root {
--primary-color: #{$primary-color};
--secondary-color: #{$secondary-color};
}
위와 같이 정의하고, var(--variable-name)형태로 사용합니다.
// 스타일에서 CSS 변수 사용
body {
color: var(--primary-color);
background-color: var(--secondary-color);
}
// CSS 변수 재정의 가능 (예: 다크 모드)
.dark-mode {
--primary-color: #ffffff;
--secondary-color: #333333;
}
SCSS변수를 CSS변수와 연동하는 믹스인 만들기
변수간 연동을 믹스인으로 만들어 관리하면 재사용성과 유지보수성을 더욱 높일 수 있습니다. 일단 아래와 같이 SCSS변수들을 맵(Map)형태로 정리합니다.
// SCSS 변수들을 맵으로 정의
$theme-colors: (
primary: #3498db,
secondary: #2ecc71,
danger: #e74c3c,
warning: #f1c40f
);
그리고 믹스인을 사용하여 CSS변수로 정의하겠습니다.
// SCSS 변수를 CSS 변수로 정의하는 믹스인
@mixin export-to-css($map) {
@each $key, $value in $map {
--#{$key}: #{$value};
}
}
이제 믹스인을 사용해 봅시다.
// :root에 CSS 변수 정의
:root {
@include export-to-css($theme-colors);
}
// CSS 변수 사용
body {
color: var(--primary);
background-color: var(--secondary);
}
button {
background-color: var(--danger);
color: var(--warning);
}
'👩💻 > CSS, SCSS' 카테고리의 다른 글
SCSS 활용 팁 12. @debug, @warn, @error로 디버깅하기 (0) | 2025.01.25 |
---|---|
SCSS 활용 팁 11. SCSS 반복문 활용으로 대규모 디자인 시스템 관리하기 (0) | 2025.01.24 |
SCSS 활용 팁 9. @import VS @use 차이점 알고 쓰기 (0) | 2025.01.17 |
SCSS 활용 팁 8. 보간 기능을 사용하여 동적으로 경로 관리하기 (0) | 2025.01.16 |
SCSS 활용 팁 7. 스타일시트를 효율적으로 모듈화 하기 위한 7-1패턴 (0) | 2025.01.15 |