네이티브 다크 모드 구현 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
프론트엔드 개발자, UX/UI 디자이너, 웹 애플리케이션 개발자
핵심 요약
- CSS 변수와
prefers-color-scheme
미디어 쿼리 사용하여 시스템 설정 기반 다크 모드 자동 적용 - JavaScript를 통해 사용자 선호도 저장 및 동적 테마 전환 구현
localStorage
활용하여 사용자 설정 지속 관리- Flash of Inaccurate Color Theme(FICT) 방지 위해 스크립트 실행 시점 주의
섹션별 세부 요약
1. CSS 변수 기반 테마 파일 생성
:root
에--background-color
,--text-color
등 기본 색상 변수 정의light.css
와dark.css
파일로 각각의 색상 변수 분리body
스타일에서var(--background-color)
와var(--text-color)
사용
2. 미디어 쿼리 기반 자동 테마 전환
prefers-color-scheme
미디어 쿼리로 시스템 설정에 따른 테마 자동 적용@media (prefers-color-scheme: dark)
와@media (prefers-color-scheme: light)
사용
3. JavaScript 기반 사용자 설정 처리
matchMedia
API로 브라우저 기능 지원 여부 확인localStorage
에 사용자 선호 테마 저장 (saveColorScheme
)switchMedia
함수로 CSS 링크 태그의media
속성 동적으로 변경
4. 사용자 인터페이스 제어 요소 추가
input[type="radio"]
를 활용한 light, dark, auto 3가지 옵션 제공DOMContentLoaded
이벤트 후initColorSchemeControls
실행하여 UI 상태 초기화
5. 성능 및 UX 고려사항
- 스크립트를
상단에 삽입하여 FICT 방지
async
속성 사용 시initColorSchemeControls
실행 시점 주의- JavaScript 코드 최소화하여 First Contentful Paint 영향 최소화
결론
prefers-color-scheme
미디어 쿼리와localStorage
를 결합하여 사용자 선호도에 맞는 테마 전환 구현switchMedia
함수로 CSS 파일 동적 로드 및 미디어 쿼리 변경으로 테마 전환- FICT 방지를 위해 스크립트 실행 시점 조정 및 코드 최적화 필수