CSS 변수(CSS Custom Properties)는 재사용 가능한 값을 CSS 내에서 저장하고 관리할 수 있게 해주는 기능입니다.
/* 변수 선언 */
:root {
--main-color: #007bff;
--text-color: #333;
--spacing-unit: 8px;
}
/* 변수 사용 */
.button {
background-color: var(--main-color);
color: white;
padding: var(--spacing-unit);
}
재사용성
유지보수 용이성
동적 변경 가능
<div class="app">
<button onclick="toggleTheme()">테마 변경</button>
<div class="content">
<h1>안녕하세요!</h1>
<p>이것은 다크 모드 예시입니다.</p>
</div>
</div>
/* 라이트 모드 (기본) */
:root {
--bg-color: #ffffff;
--text-color: #333333;
--secondary-bg: #f0f0f0;
--border-color: #dddddd;
}
/* 다크 모드 */
[data-theme="dark"] {
--bg-color: #1a1a1a;
--text-color: #ffffff;
--secondary-bg: #2d2d2d;
--border-color: #444444;
}
/* 스타일 적용 */
body {
background-color: var(--bg-color);
color: var(--text-color);
transition: all 0.3s ease;
}
.content {
background-color: var(--secondary-bg);
border: 1px solid var(--border-color);
padding: 20px;
margin: 20px;
}
function toggleTheme() {
const root = document.documentElement;
const currentTheme = root.getAttribute('data-theme');
if (currentTheme === 'dark') {
root.removeAttribute('data-theme');
} else {
root.setAttribute('data-theme', 'dark');
}
}
:root {
--container-width: 1200px;
--spacing-small: 8px;
--spacing-medium: 16px;
--spacing-large: 24px;
}
@media (max-width: 768px) {
:root {
--container-width: 100%;
--spacing-large: 16px;
}
}
.card {
--card-padding: 16px;
--card-border-radius: 8px;
padding: var(--card-padding);
border-radius: var(--card-border-radius);
}
.card.small {
--card-padding: 8px;
}
// CSS 변수 값 가져오기
const rootStyles = getComputedStyle(document.documentElement);
const mainColor = rootStyles.getPropertyValue('--main-color');
// CSS 변수 값 설정하기
document.documentElement.style.setProperty('--main-color', '#ff0000');
.element {
/* 폴백으로 사용할 값을 먼저 지정 */
color: #333;
/* CSS 변수를 지원하는 브라우저에서는 이 값이 사용됨 */
color: var(--text-color, #333);
}
@supports (--css: variables) {
/* CSS 변수를 지원하는 브라우저에서만 적용될 스타일 */
.element {
color: var(--text-color);
}
}