안녕하세요! 다크 모드는 이제 웹사이트의 필수 기능이 되고 있습니다. CSS를 활용해 깔끔하게 다크 모드를 구현하는 방법을 알려드릴게요.
1. 시스템 설정 자동 전환: `prefers-color-scheme`
사용자의 운영체제(Windows, macOS 등) 설정에 따라 웹사이트의 테마를 자동으로 바꿔주는 방법입니다.
/* 기본 (라이트 모드) 스타일 */
body { background-color: #ffffff; color: #333333; }
.card { background-color: #f0f0f0; }
/* --- 다크 모드 스타일 (사용자 시스템이 다크 모드일 때 적용) --- */
@media (prefers-color-scheme: dark) {
body { background-color: #1a1a1a; color: #e0e0e0; }
.card { background-color: #2a2a2a; }
/* 필요한 다른 요소들의 색상도 여기서 변경 */
}
`var(--변수명)`을 사용하여 색상 변수를 정의해두면, `@media` 안에서 이 변수 값만 바꿔주면 되어 관리가 훨씬 쉬워집니다.
2. 사용자 토글 버튼 구현 (수동 전환)
사용자가 직접 테마를 켜고 끌 수 있는 버튼을 만들 때는 CSS 변수와 JavaScript를 함께 사용합니다.
2.1. HTML (버튼)
html
<button id="theme-toggle" aria-label="다크 모드 전환"></button>
2.2. CSS (변수 정의)
`body`에 `.dark-mode` 클래스가 붙었을 때 색상 변수 값을 변경하도록 설정합니다.
root { /* 라이트 모드 기본 값 */
--bg-color: #ffffff;
--text-color: #333333;
}
.dark-mode { /* .dark-mode 클래스가 있을 때 */
--bg-color: #1a1a1a;
--text-color: #e0e0e0;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
transition: background-color 0.3s ease, color 0.3s ease; /* 부드러운 전환 */
}
2.3. 자바스크립트 (클래스 토글 및 저장)
* 버튼 클릭 시 `body`에 `.dark-mode` 클래스를 추가/제거하고, 사용자의 선택을 `localStorage`에 저장하여 페이지를 다시 열어도 테마가 유지되도록 합니다.
javascript
document.addEventListener('DOMContentLoaded', () => {
const toggleButton = document.getElementById('theme-toggle');
const body = document.body;
// 저장된 테마 불러오기 또는 시스템 설정 따르기
const savedTheme = localStorage.getItem('theme');
if (savedTheme) {
body.classList.add(savedTheme);
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
body.classList.add('dark-mode');
}
// 버튼 클릭 시 테마 전환
toggleButton.addEventListener('click', () => {
if (body.classList.contains('dark-mode')) {
body.classList.remove('dark-mode');
localStorage.setItem('theme', ''); // 라이트 모드로 저장
} else {
body.classList.add('dark-mode');
localStorage.setItem('theme', 'dark-mode');
}
});
});
그누보드/영카트 적용 팁:
* 사용 중인 테마의 CSS 파일에 다크 모드 스타일 을 추가하세요.
* `head.php` 또는 `tail.php` 파일에 다크 모드 토글 버튼과 관련된 자바스크립트코드를 넣어주면 됩니다.
게시글 목록
| 번호 | 제목 |
|---|---|
| 3643 | |
| 3631 | |
| 3627 | |
| 3621 | |
| 3619 |
HTML
스크롤다운시 모션효과
|
| 3617 | |
| 3610 |
HTML
간단한 FLEX 예제
|
| 3609 |
HTML
간단한 반응형 페이지 레이아웃
1
|
| 3608 |
HTML
간단한 Flex 활용 예제
1
|
| 3607 | |
| 3606 | |
| 3603 | |
| 3602 | |
| 3601 | |
| 3600 | |
| 3595 | |
| 3591 | |
| 3587 | |
| 3578 | |
| 3567 | |
| 3561 |
웹접근성
웹 표준 검사하기
|
| 3560 |
반응형
반응형을 위한 미디어쿼리
2
|
| 3559 | |
| 3557 | |
| 3555 | |
| 3554 |
CSS
body 외부 정렬
|
| 3552 | |
| 3551 |
CSS
flex 레이아웃
1
|
| 3550 | |
| 3537 |
기타
howler.js
2
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기