CSS 변수(CSS Custom Properties)는 CSS에서 재사용 가능한 값을 정의하고 관리할 수 있는 강력한 도구입니다. CSS 변수를 사용하면 유지보수성과 확장성을 높일 수 있으며, 동적 테마 변경과 재사용 가능한 스타일을 쉽게 구현할 수 있습니다. 이 글에서는 CSS 변수를 고급적으로 활용하여 동적 테마와 재사용 가능한 스타일을 설정하는 방법을 소개하겠습니다.

1. CSS 변수의 기본 개념 복습

CSS 변수는 --로 시작하는 사용자 정의 속성입니다. 변수는 일반적으로 :root 선택자에 정의되어 전역적으로 사용되며, var() 함수를 사용해 호출할 수 있습니다.

기본 예시:

:root {
    --main-bg-color: #f4f4f4;
    --main-text-color: #333;
    --primary-color: #3498db;
    --padding: 10px;
}

body {
    background-color: var(--main-bg-color);
    color: var(--main-text-color);
    padding: var(--padding);
}

.button {
    background-color: var(--primary-color);
    color: white;
    padding: var(--padding);
}

2. 동적 테마 변경

CSS 변수를 사용하면 테마를 쉽게 변경할 수 있습니다. 다크 모드와 라이트 모드와 같은 테마 전환을 구현할 때 유용합니다. 각 테마에 맞는 색상을 변수로 정의하고, 클래스나 미디어 쿼리를 통해 테마를 동적으로 변경할 수 있습니다.

다크 모드와 라이트 모드 설정:

/* 기본 테마 (라이트 모드) */
:root {
    --bg-color: #ffffff;
    --text-color: #000000;
    --primary-color: #3498db;
}

/* 다크 모드 테마 */
body.dark-mode {
    --bg-color: #333333;
    --text-color: #ffffff;
    --primary-color: #e74c3c;
}

body {
    background-color: var(--bg-color);
    color: var(--text-color);
}

.button {
    background-color: var(--primary-color);
    color: var(--text-color);
}

다크 모드 전환 JavaScript:

const toggleThemeButton = document.querySelector('.toggle-theme');

toggleThemeButton.addEventListener('click', () => {
    document.body.classList.toggle('dark-mode');
});

설명:

  • :root: 기본 라이트 모드 테마를 정의합니다.
  • body.dark-mode: 다크 모드 테마를 정의하고, dark-mode 클래스가 추가되면 변수를 업데이트합니다.
  • JavaScript: 버튼을 클릭할 때 dark-mode 클래스를 body에 추가하거나 제거하여 테마를 전환합니다.

3. 재사용 가능한 스타일 설정

CSS 변수는 반복적인 스타일을 재사용할 수 있도록 도와줍니다. 이를 통해 코드의 일관성을 유지하고, 업데이트 시 일괄적으로 스타일을 변경할 수 있습니다.

예시: 버튼 스타일링

:root {
    --button-bg-color: #3498db;
    --button-text-color: white;
    --button-padding: 12px 20px;
    --button-border-radius: 5px;
}

.button {
    background-color: var(--button-bg-color);
    color: var(--button-text-color);
    padding: var(--button-padding);
    border-radius: var(--button-border-radius);
    border: none;
    cursor: pointer;
    transition: background-color 0.3s ease;
}

.button:hover {
    background-color: darken(var(--button-bg-color), 10%);
}

설명:

  • 변수 정의: 버튼의 배경색, 텍스트 색상, 패딩, 둥근 모서리 등 반복적으로 사용되는 스타일을 변수로 정의합니다.
  • 재사용: 버튼 클래스에서 변수를 호출하여 스타일을 적용합니다. 이로 인해 여러 버튼이 동일한 스타일을 유지하면서도, 변수만 수정하면 모든 버튼의 스타일이 변경됩니다.

4. 미디어 쿼리와 결합한 반응형 디자인

CSS 변수를 미디어 쿼리와 결합하면 반응형 디자인에서 사용되는 스타일을 효율적으로 관리할 수 있습니다. 화면 크기에 따라 다른 값을 변수로 설정하고, 이를 사용해 스타일을 동적으로 조정할 수 있습니다.

반응형 디자인 예시:

:root {
    --font-size: 16px;
    --padding: 20px;
}

@media (max-width: 768px) {
    :root {
        --font-size: 14px;
        --padding: 15px;
    }
}

@media (max-width: 480px) {
    :root {
        --font-size: 12px;
        --padding: 10px;
    }
}

body {
    font-size: var(--font-size);
    padding: var(--padding);
}

설명:

  • 기본 설정: 기본적으로 폰트 크기와 패딩을 정의합니다.
  • 미디어 쿼리: 화면 너비가 줄어들수록 폰트 크기와 패딩을 줄여 작은 화면에서도 최적화된 스타일을 제공합니다.

5. 복잡한 계산과 함께 사용하는 CSS 변수

CSS 변수는 계산과 함께 사용되어 더욱 복잡한 스타일을 동적으로 관리할 수 있습니다. 예를 들어, calc() 함수를 사용해 변수를 활용한 동적인 계산이 가능합니다.

계산을 활용한 예시:

:root {
    --base-padding: 20px;
    --header-height: 60px;
}

.header {
    height: var(--header-height);
    padding: var(--base-padding);
}

.main-content {
    padding-top: calc(var(--header-height) + var(--base-padding));
    padding-left: var(--base-padding);
    padding-right: var(--base-padding);
}

설명:

  • calc() 함수: CSS 변수를 활용하여 동적으로 계산된 값을 사용할 수 있습니다. 여기서는 헤더 높이와 기본 패딩을 조합하여 콘텐츠의 패딩을 계산합니다.
  • 일관성 유지: 헤더와 콘텐츠의 패딩이 CSS 변수에 의해 일관되게 유지됩니다.

결론

CSS 변수는 동적 테마와 재사용 가능한 스타일을 설정하는 데 매우 유용한 도구입니다. 이를 통해 코드의 일관성과 유지보수성을 크게 향상시킬 수 있으며, 복잡한 레이아웃과 스타일도 쉽게 관리할 수 있습니다. CSS 변수를 활용하여 더욱 효율적이고 유연한 스타일시트를 작성해보세요. 이를 통해 웹 디자인의 품질과 사용자 경험을 향상시킬 수 있습니다.

+ Recent posts