**CSS Variables(변수)**는 CSS에서 값을 재사용 가능하게 정의할 수 있는 기능으로, 웹 디자인의 일관성을 유지하면서도 동적 스타일링을 손쉽게 구현할 수 있습니다. CSS 변수는 --로 시작하며, JavaScript와 결합하면 실시간으로 스타일을 변경하는 강력한 도구가 됩니다. 이 글에서는 CSS 변수의 기본 사용법과 동적 스타일링의 다양한 사례를 소개합니다.
1. CSS Variables의 기본 개념과 문법
CSS Variables는 다른 프로그래밍 언어의 변수와 유사하게 동작하며, 특정 값을 선언한 후 재사용할 수 있습니다.
- CSS Variables 선언
- CSS 변수는 --로 시작하며, 주로 :root에 선언하여 전역적으로 사용할 수 있습니다.
:root { --primary-color: #3498db; --font-size: 16px; }
- CSS 변수는 --로 시작하며, 주로 :root에 선언하여 전역적으로 사용할 수 있습니다.
- CSS Variables 사용
- var() 함수를 사용해 변수를 참조합니다.
body { background-color: var(--primary-color); font-size: var(--font-size); }
- var() 함수를 사용해 변수를 참조합니다.
- 기본값 설정
- 변수가 선언되지 않았을 경우 var() 함수에서 기본값을 제공할 수 있습니다.
h1 { color: var(--secondary-color, #2ecc71); /* 변수 없을 경우 #2ecc71 사용 */ }
- 변수가 선언되지 않았을 경우 var() 함수에서 기본값을 제공할 수 있습니다.
- 변수의 상속
- CSS 변수는 DOM 구조를 따라 상속됩니다. 이를 활용해 특정 영역에서 변수 값을 변경할 수 있습니다.
.theme-dark { --primary-color: #2c3e50; }
.theme-light { --primary-color: #ecf0f1; }
- CSS 변수는 DOM 구조를 따라 상속됩니다. 이를 활용해 특정 영역에서 변수 값을 변경할 수 있습니다.
2. CSS Variables를 사용한 반응형 디자인 구현
CSS Variables는 미디어 쿼리와 결합하여 다양한 화면 크기에 적응하는 동적 스타일링을 지원합니다.
- 미디어 쿼리에서 변수 값 변경
- 특정 화면 크기에서 변수 값을 변경하여 반응형 스타일을 적용할 수 있습니다.
:root { --font-size: 16px; }
@media (max-width: 768px) { :root { --font-size: 14px; } }
body { font-size: var(--font-size); }
- 특정 화면 크기에서 변수 값을 변경하여 반응형 스타일을 적용할 수 있습니다.
- 동적 레이아웃 설정
- 레이아웃의 여백이나 크기를 변수로 정의하여 화면 크기에 따라 유동적으로 조정합니다.
:root { --container-width: 1200px; }
@media (max-width: 1024px) { :root { --container-width: 90%; } }
.container { width: var(--container-width); margin: 0 auto; }
- 레이아웃의 여백이나 크기를 변수로 정의하여 화면 크기에 따라 유동적으로 조정합니다.
3. JavaScript와 CSS Variables를 활용한 동적 스타일링
CSS Variables는 JavaScript와 결합하면 실시간으로 스타일을 변경하는 강력한 도구가 됩니다.
- JavaScript로 변수 값 변경
- document.documentElement.style.setProperty()를 사용해 변수 값을 동적으로 변경할 수 있습니다.
const root = document.documentElement; const themeToggle = document.getElementById('theme-toggle'); themeToggle.addEventListener('click', () => { root.style.setProperty('--primary-color', '#e74c3c'); });
- document.documentElement.style.setProperty()를 사용해 변수 값을 동적으로 변경할 수 있습니다.
- 슬라이더로 글꼴 크기 조정
- 사용자 입력 값에 따라 변수 값을 변경합니다.
<input type="range" id="font-size-slider" min="12" max="24" value="16">
<p>조정 가능한 텍스트</p>
<script> const slider = document.getElementById('font-size-slider'); slider.addEventListener('input', () => { document.documentElement.style.setProperty('--font-size', `${slider.value}px`); }); </script>
- 사용자 입력 값에 따라 변수 값을 변경합니다.
- 테마 변경 구현
- 다크 모드와 라이트 모드를 토글할 수 있습니다.
:root { --background-color: #ffffff; --text-color: #000000; }
.dark-theme { --background-color: #000000; --text-color: #ffffff; }
body { background-color: var(--background-color); color: var(--text-color); } -
const toggleButton = document.getElementById('toggle-theme'); toggleButton.addEventListener('click', () => { document.documentElement.classList.toggle('dark-theme'); });
- 다크 모드와 라이트 모드를 토글할 수 있습니다.
4. CSS Variables로 테마 시스템 구축하기
CSS Variables는 여러 테마를 쉽게 정의하고 관리하는 데 유용합니다.
- 테마별 변수 설정
- 테마에 따라 전역 변수 값을 변경합니다.
:root { --primary-color: #3498db; --secondary-color: #2ecc71; }
.dark-theme { --primary-color: #34495e; --secondary-color: #1abc9c; }
- 테마에 따라 전역 변수 값을 변경합니다.
- CSS 파일 분리
- 각 테마를 별도의 CSS 파일로 분리하여 필요할 때만 로드할 수 있습니다.
<link rel="stylesheet" href="light-theme.css" id="theme-stylesheet">
<script> const toggleTheme = () => { const themeStylesheet = document.getElementById('theme-stylesheet'); themeStylesheet.href = themeStylesheet.href.includes('light') ? 'dark-theme.css' : 'light-theme.css'; }; </script>
- 각 테마를 별도의 CSS 파일로 분리하여 필요할 때만 로드할 수 있습니다.
- 실시간 테마 변경
- 사용자 입력에 따라 테마를 동적으로 변경합니다.
<button onclick="toggleTheme()">테마 변경</button>
- 사용자 입력에 따라 테마를 동적으로 변경합니다.
CSS Variables 활용의 장점
- 유지보수 용이성
- 모든 스타일 값을 변수로 관리하여 코드 중복을 줄이고, 디자인 변경 시 수정 작업을 간소화합니다.
- 동적 스타일링 지원
- JavaScript와 결합하여 사용자 입력이나 조건에 따라 실시간 스타일 변경이 가능합니다.
- 반응형 및 확장성
- 미디어 쿼리와 결합해 화면 크기와 디바이스에 따라 유연한 디자인을 제공합니다.
- 효율적인 테마 관리
- 다크 모드, 라이트 모드와 같은 다양한 테마를 손쉽게 구현할 수 있습니다.
결론
CSS Variables는 현대적인 웹 디자인에서 필수적인 도구로, 동적 스타일링과 반응형 디자인을 간소화하고 효율적으로 관리할 수 있습니다. CSS Variables와 JavaScript를 결합하면 더욱 창의적이고 상호작용적인 웹 경험을 제공할 수 있습니다. 이를 활용해 더 나은 사용자 경험을 제공하고 프로젝트의 품질을 한 단계 끌어올려 보세요.
'웹퍼블리싱' 카테고리의 다른 글
PWA(Progressive Web Apps)로 웹 앱 성능 강화 (0) | 2025.01.13 |
---|---|
웹 폰트 최적화와 타이포그래피의 예술 (0) | 2025.01.13 |
CSS와 JavaScript로 스크롤 애니메이션 구현하기 (0) | 2025.01.13 |
CSS 프레임워크의 비교와 활용: Bootstrap, Tailwind, Foundation (0) | 2025.01.13 |
Git을 활용한 협업 중심의 퍼블리싱 워크플로우 (0) | 2025.01.13 |
AMP(Accelerated Mobile Pages)로 모바일 웹 최적화 (1) | 2025.01.13 |
SVG를 활용한 스케일러블 그래픽 제작 (0) | 2025.01.13 |
Cross-Browser 호환성을 위한 퍼블리싱 팁 (0) | 2025.01.13 |