z-Index
UI 요소의 쌓임 순서를 일관된 규칙으로 관리합니다. Dropdown, Modal, Tooltip 등 레이어가 충돌하지 않는 설계입니다.
z-Index Scale
기본 숫자 값과 시맨틱 토큰, 두 가지 카테고리로 구성됩니다.
기본값 (0–50)
0
z-010
z-1020
z-2030
z-3040
z-4050
z-50시맨틱 값
z-sticky100스티키 헤더, 고정 요소
z-dropdown1000드롭다운 메뉴, 셀렉트
z-overlay1100오버레이, 배경 마스크
z-modal2000모달 다이얼로그
z-popover2100팝오버, 호버 카드
z-tooltip2200툴팁
z-toast3000토스트 알림 (최상위)
| Token | Value | 사용 사례 |
|---|---|---|
z-sticky | 100 | 스티키 헤더, 고정 요소 |
z-dropdown | 1000 | 드롭다운 메뉴, 셀렉트 |
z-overlay | 1100 | 오버레이, 배경 마스크 |
z-modal | 2000 | 모달 다이얼로그 |
z-popover | 2100 | 팝오버, 호버 카드 |
z-tooltip | 2200 | 툴팁 |
z-toast | 3000 | 토스트 알림 (최상위) |
Interactive Demo
각 요소를 클릭해 z-index 계층을 확인해보세요.
Base Content
z-index: 0Dropdown
z-1000Modal Dialog
z-index: 2000드롭다운보다 앞에 표시됩니다
Tooltip
z-2200Recommended Values
각 UI 컴포넌트에 적합한 z-index 토큰
Header (sticky)
z-sticky100
Dropdown Menu
z-dropdown1000
Select Options
z-dropdown1000
Backdrop/Overlay
z-overlay1100
Modal/Dialog
z-modal2000
Popover
z-popover2100
Tooltip
z-tooltip2200
Toast/Notification
z-toast3000
Layer Hierarchy
z-index 값이 높을수록 앞에 표시됩니다.
Base일반 콘텐츠
z-0-50Sticky고정 헤더
z-100Dropdown메뉴
z-1000Overlay배경 마스크
z-1100Modal다이얼로그
z-2000Popover팝업 카드
z-2100Tooltip호버 힌트
z-2200Toast알림 메시지
z-3000위로 갈수록 z-index 값이 높고 앞에 표시
Common Issues
z-index 관련 자주 발생하는 문제와 해결 방법
모달이 드롭다운 뒤에 숨는 문제
→ 드롭다운이 새로운 스태킹 컨텍스트를 생성하고 있음
✓ Portal을 사용해 모달을 body 바로 아래에 렌더링
z-index: 9999 를 줘도 요소가 앞에 오지 않는 문제
→ 부모 요소의 스태킹 컨텍스트에 제한되어 있음
✓ 부모 요소의 z-index를 확인하거나 isolation: isolate 사용
position: fixed 요소가 모달 뒤에 있는 문제
→ fixed여도 적절한 z-index가 필요
✓ z-modal보다 높은 z-index(z-toast 등) 사용
Stacking Context
스태킹 컨텍스트란?
z-index는 같은 스태킹 컨텍스트 내에서만 비교됩니다. 새로운 스태킹 컨텍스트는 다음과 같은 경우에 생성됩니다:
- •position: absolute/relative/fixed와 z-index가 설정된 요소
- •opacity가 1 미만인 요소
- •transform, filter, perspective가 설정된 요소
- •isolation: isolate가 설정된 요소
Best Practices
✓
권장
- ✓시맨틱 토큰(z-modal 등) 활용
- ✓Portal을 사용해 모달을 body 바로 아래에 렌더링
- ✓isolation: isolate로 컨텍스트를 명시적으로 제어
- ✓z-index 계층 구조를 사전에 계획
✕
지양
- ✗z-index: 9999 같은 임의의 큰 값 사용
- ✗문제가 생길 때마다 z-index를 올리는 것
- ✗스태킹 컨텍스트를 고려하지 않은 구현
- ✗하드코딩된 z-index 값 남용