본문 바로가기
Frontend2026년 6월 7일2분 읽기

CSS z-index가 안 먹히는 진짜 이유 — stacking context

YS
김영삼
조회 710
CSS z-index가 안 먹히는 진짜 이유 — stacking context

핵심 요약

z-index를 아무리 크게 줘도 안 올라오는 건, 그 요소가 부모가 만든 쌓임 맥락(stacking context) 안에 갇혀 있기 때문이다. z-index는 같은 맥락 안에서만 비교된다. transform, opacity < 1, filter, position+z-index 등이 새 맥락을 만든다.

1. 쌓임 맥락을 만드는 속성

  • position: relative/absolute/fixed + z-index 값
  • transform, filter, perspective, will-change
  • opacity가 1 미만
  • flex/grid 자식에 z-index 지정

2. 진단·해결

/* 모달이 헤더 뒤에 깔릴 때 */
/* 원인: 조상에 transform: ... 이 있어 맥락이 갇힘 */
/* 해결 1: 모달을 body 바로 아래로 portal */
/* 해결 2: 맥락을 만든 조상의 z-index를 함께 조정 */

3. 함정

  • z-index: 999999 같은 폭탄은 맥락이 다르면 무의미하다
  • 모달·툴팁은 React Portal로 DOM 최상단에 띄우는 게 근본 해결
  • 크롬 개발자도구 "Layers" 패널로 맥락을 시각적으로 확인 가능

자주 묻는 질문

z-index를 엄청 크게 주면 되지 않나요?

같은 쌓임 맥락 안에서만 비교되므로, 다른 맥락에 갇혀 있으면 100만을 줘도 못 올라옵니다. 맥락 구조를 봐야 합니다.

모달이 자꾸 뒤에 깔립니다.

조상 중 transform/opacity로 맥락을 만든 요소가 있을 가능성이 높습니다. 모달을 Portal로 body 직속에 렌더하면 대부분 해결됩니다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록