프론트엔드 개발 · 심화
CSS Custom Properties(CSS 변수)를 활용하여 다크 모드, 브랜드 테마 등 동적인 테마 시스템을 구축하는 방법을 설명하고, JavaScript와의 연동 및 폴백(fallback) 전략에 대해 구체적인 코드 예시와 함께 논해주세요.
힌트 · :root 스코프, 변수 재정의, var() 함수, JavaScript를 통한 동적 값 변경, @supports를 고려하여 설명하세요.
CSS 변수다크 모드JavaScript 연동폴백theme-change 이벤트
모범답안
CSS Custom Properties, 즉 CSS 변수를 활용하면 동적인 테마 시스템을 효과적으로 구축할 수 있습니다. 먼저 :root에 테마의 기본 색상들을 변수로 정의합니다. 예를 들어 --primary-color: blue; 와 같이 설정하고, var(--primary-color)를 사용하여 요소에 적용합니다.
다크 모드처럼 테마를 변경하려면, 미디어 쿼리나 JavaScript를 사용하여 변수 값을 재정의합니다. JavaScript를 사용할 경우, 특정 이벤트 발생 시 documentElement의 style 속성을 통해 변수 값을 변경할 수 있습니다.
document.documentElement.style.setProperty('--primary-color', 'darkgreen');
폴백 전략으로는, CSS 변수를 지원하지 않는 브라우저를 위해 일반 CSS 속성 값을 먼저 정의하고, 그 다음에 변수를 사용하는 방법을 고려할 수 있습니다. @supports 규칙을 사용하여 CSS 변수 지원 여부에 따라 다른 스타일을 적용할 수도 있습니다. 예를 들어 @supports not ( --example: value ) { /* CSS 변수 미지원 시 스타일 */ } 와 같이 사용할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 HTML / CSS 면접 질문
- 웹 페이지 로딩 성능 최적화를 위해 Critical CSS를 추출하고 인라인하는 기법에 대해 설명하고, 이 과정에서 발생할 수 있는 잠재적인 문제점(예: FOUC, 캐싱 문제)과 해결 방안을 논해주세요.
- 복잡한 동적 웹 UI 컴포넌트(예: 커스텀 드롭다운, 탭 메뉴, 모달 다이얼로그)를 HTML과 CSS만으로 구현할 때, WAI-ARIA 속성을 사용하여 웹 접근성을 어떻게 보장할 수 있는지 구체적인 속성(예: role, aria-expanded, aria-labelledby)과 그 활용 사례를 들어 설명해주세요.
- 브라우저의 렌더링 파이프라인(DOM, CSSOM, Render Tree, Layout, Paint, Compositing)을 설명하고, 특정 CSS 속성(예: width 변경 vs transform: scale()) 변경이 렌더링 성능에 미치는 영향이 왜 다른지, 그리고 이를 최적화하기 위한 방법(예: will-change 속성)에 대해 논해주세요.
- CSS Houdini가 기존 CSS의 한계를 어떻게 극복하려 하는지, 그리고 Houdini의 주요 API(예: Worklet, Properties and Values API, Layout API, Paint API) 중 하나를 선택하여 설명하고, 이를 활용하여 어떤 종류의 UI/UX를 구현할 수 있을지 구체적인 아이디어를 제시해주세요.
- CSS Cascade Layers(@layer)가 도입된 배경과 @layer가 기존 CSS의 캐스케이드, 특수성(Specificity), 그리고 !important 규칙에 어떤 영향을 미치는지 상세히 설명하고, 이를 통해 대규모 프로젝트에서 CSS 충돌을 어떻게 효과적으로 관리할 수 있는지 논해주세요.