CSS로 다크 모드 구현하기: 사용자 친화적인 디자인 가이드

반응형


다크 모드는 현대 웹 디자인에서 점점 더 중요해지고 있습니다. 사용자 경험을 향상시키고, 눈의 피로를 줄이며, 배터리 소모를 절감할 수 있는 다크 모드는 간단한 CSS만으로도 구현 가능합니다. 이 글에서는 CSS를 활용한 다크 모드 구현법을 단계별로 알아보겠습니다.

1. 다크 모드란?


다크 모드는 화면 배경을 어둡게 하고 텍스트 및 요소를 밝게 보여주는 색상 테마입니다. 많은 디바이스와 웹사이트에서 제공되며, 사용자의 환경 설정에 따라 자동으로 적용될 수도 있습니다.

2. 다크 모드 구현 방법


2-1. CSS 변수 활용


CSS 변수는 다크 모드와 라이트 모드의 색상 값을 쉽게 변경할 수 있도록 도와줍니다.

:root {
    --background-color: #ffffff;
    --text-color: #000000;
}

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


2-2. 다크 모드 색상 정의


다크 모드 테마를 위해 CSS 변수를 덮어씁니다.

body.dark-mode {
    --background-color: #121212;
    --text-color: #ffffff;
}


Tip: 클래스를 변경해 모드를 전환할 수 있습니다.

3. 사용자 시스템 설정에 따른 자동 다크 모드


CSS의 @media를 활용하면 사용자의 시스템 설정에 따라 다크 모드를 자동으로 적용할 수 있습니다.

:root {
    --background-color: #ffffff;
    --text-color: #000000;
}

@media (prefers-color-scheme: dark) {
    :root {
        --background-color: #121212;
        --text-color: #ffffff;
    }
}

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


결과: 사용자의 시스템 설정에 따라 자동으로 라이트 모드 또는 다크 모드가 적용됩니다.

4. 다크 모드 토글 버튼 구현


4-1. HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>다크 모드 구현</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <button id="toggle-mode">다크 모드 전환</button>
    <p>이 페이지는 다크 모드를 지원합니다.</p>

    <script src="script.js"></script>
</body>
</html>


4-2. CSS

:root {
    --background-color: #ffffff;
    --text-color: #000000;
}

body {
    background-color: var(--background-color);
    color: var(--text-color);
    font-family: Arial, sans-serif;
    transition: background-color 0.3s ease, color 0.3s ease;
}

body.dark-mode {
    --background-color: #121212;
    --text-color: #ffffff;
}

button {
    padding: 10px 20px;
    font-size: 16px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    background-color: var(--text-color);
    color: var(--background-color);
    transition: background-color 0.3s ease, color 0.3s ease;
}


4-3. JavaScript

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


결과: 버튼 클릭 시 라이트 모드와 다크 모드가 전환됩니다.

5. 고급 구현: 사용자 설정 저장


5-1. 로컬 스토리지를 활용한 모드 저장


사용자가 선택한 모드가 페이지를 새로고침하거나 다시 방문했을 때 유지되도록 로컬 스토리지를 사용할 수 있습니다.

JavaScript 코드

const toggleButton = document.getElementById('toggle-mode');
const currentMode = localStorage.getItem('mode');

if (currentMode === 'dark') {
    document.body.classList.add('dark-mode');
}

toggleButton.addEventListener('click', () => {
    document.body.classList.toggle('dark-mode');
    const mode = document.body.classList.contains('dark-mode') ? 'dark' : 'light';
    localStorage.setItem('mode', mode);
});


결과: 사용자가 선택한 모드가 로컬 스토리지에 저장되어, 페이지를 새로고침해도 유지됩니다.

6. 다크 모드 디자인 팁

1. 색상 대비 유지: 텍스트와 배경 사이의 충분한 대비를 유지하세요. 낮은 대비는 가독성을 떨어뜨릴 수 있습니다.
• 배경: 어두운 회색 (#121212)
• 텍스트: 순백 (#ffffff) 대신 약간의 톤을 줄인 색 (#e0e0e0) 사용.
2. 중간 톤 활용: 완전히 어두운 블랙 대신, 중간 톤의 어두운 회색을 사용하는 것이 눈에 덜 부담됩니다.
3. 애니메이션 효과 추가: 다크 모드 전환 시 배경색과 텍스트 색상이 부드럽게 전환되도록 transition을 활용하세요.
4. 아이콘 변경: 다크 모드와 라이트 모드에 적합한 아이콘을 제공하세요.

7. 다크 모드와 브라우저 호환성


CSS의 prefers-color-scheme는 최신 브라우저에서 지원됩니다. 그러나 구형 브라우저에서는 동작하지 않을 수 있으므로, 필요 시 기본 색상을 설정하세요.

body {
    background-color: #ffffff; /* 기본 색상 */
}


CSS와 JavaScript를 결합하면 다크 모드를 간단히 구현할 수 있습니다. 사용자 친화적인 다크 모드를 제공하면 웹사이트의 접근성과 가독성이 크게 향상됩니다.

이 글을 바탕으로 다크 모드 기능을 프로젝트에 추가하고 사용자 경험을 개선해 보세요.

반응형