피드로 돌아가기
A practical CSS variable setup for light/dark mode without theme flash
Dev.toDev.to
Frontend

Head 내 Inline Script와 CSS Variables를 통한 Theme Flash 제로 구현

A practical CSS variable setup for light/dark mode without theme flash

Hasan Sarwer2026년 6월 25일9intermediate

Context

브라우저의 HTML/CSS 파싱 속도가 JavaScript 실행 속도보다 빨라 발생하는 Theme Flash 현상 분석. localStorage 기반의 테마 설정이 렌더링 이후에 적용되어 사용자 경험을 저해하는 구조적 한계 존재.

Technical Solution

  • CSS Variables 기반의 Semantic Token 설계로 컴포넌트 수준의 테마 의존성 제거
  • HTML root 요소에 data-theme 속성을 부여하여 CSS 선택자 기반의 스타일 오버라이드 구조 구축
  • prefers-color-scheme와 :not([data-theme="light"]) 선택자를 조합하여 OS 설정 기반의 Fallback 메커니즘 구현
  • 브라우저의 Top-down 파싱 특성을 이용해 상단에 즉시 실행 함수(IIFE) 형태의 Inline Script 배치
  • DOMContentLoaded 대기 없이 실행되는 스크립트로 First Paint 전 data-theme 속성을 확정하여 시각적 깜빡임 원천 차단

1. 테마 결정 로직을 외부 JS 파일이 아닌 <head> 내 Inline Script로 구현했는가

2. CSS Variables를 사용하여 컴포넌트가 현재 테마 상태를 직접 참조하지 않도록 설계했는가

3. OS 기본 설정(prefers-color-scheme)과 사용자 명시적 설정을 구분하는 우선순위 로직이 반영되었는가

4. 디자인 토큰의 유지보수 효율을 위해 설정 객체 기반의 CSS 생성 자동화 로직을 검토했는가

원문 읽기