실무에 바로 적용할 수 있는 웹 제작 꿀팁 및 유용한 자료실 공간입니다.
나눔웹이 제공하는 핵심 노하우와 마케팅 인사이트를 자유롭게 활용해 보십시오.

나눔웹 퍼블리싱 꿀팁

z-index 올려도 메뉴가 가려질 때, 쌓임 맥락(stacking context) 확인법

드롭다운 메뉴나 팝업이 다른 영역 밑으로 숨어서 z-index를 9999, 99999까지 올려 봤는데도 그대로라면 숫자 문제가 아닙니다. 그 요소를 감싼 부모가 이미 쌓임 맥락(stacking context)을 만들고 있어서, 안쪽 숫자가 바깥과 비교되지 않는 경우가 대부분입니다.
원인 찾는 순서와 고치는 방법을 정리했습니다.

💡 숫자가 큰데 왜 아래에 깔리나요?

z-index는 페이지 전체에서 한 줄로 비교되는 값이 아닙니다. 같은 쌓임 맥락 안에 있는 형제끼리만 비교됩니다. 부모 A가 z-index: 1, 옆 영역 B가 z-index: 2라면, A 안의 메뉴에 9999를 줘도 A 전체가 B보다 아래에 있으니 메뉴도 B 밑에 깔립니다. 반에서 1등이어도 반 자체가 아래 층에 있으면 소용없는 것과 같습니다.

1. 먼저 z-index가 적용되는 조건인지 확인

가장 흔한 실수는 position이 없는 요소에 z-index만 준 경우입니다. 일반 블록 요소는 position: static이 기본값이라 z-index를 무시합니다. 단, flex나 grid의 자식 요소는 position 없이도 z-index가 적용됩니다.

/* 효과 없음: position이 static */
.dropdown { z-index: 100; }

/* 적용됨 */
.dropdown {
  position: absolute;
  z-index: 100;
}

2. 부모 중에 쌓임 맥락을 만드는 속성 찾기

조건이 맞는데도 안 된다면 개발자 도구에서 문제 요소부터 부모를 하나씩 거슬러 올라가며 아래 속성이 있는지 봅니다. 실무에서는 애니메이션 때문에 넣어 둔 transform이나 opacity, 그리고 고정 헤더의 position: fixed가 범인인 경우가 많았습니다.

속성쌓임 맥락이 생기는 경우
position + z-indexrelative/absolute에 z-index 값(auto 제외)이 있을 때
positionfixed 또는 sticky일 때
opacity1보다 작을 때
transform, filternone이 아닐 때
will-change위 속성을 미리 지정했을 때
isolationisolate일 때

3. 고치는 방법은 둘 중 하나

첫째, 비교가 일어나는 층에서 숫자를 조정합니다. 메뉴가 아니라 메뉴를 감싼 헤더 자체의 z-index를 옆 영역보다 높이는 식입니다. 둘째, 팝업이나 모달처럼 항상 맨 위에 떠야 하는 요소는 HTML 구조상 <body> 바로 아래로 빼 두는 것이 가장 확실합니다. 어떤 부모 영향도 받지 않기 때문입니다.

/* 사이트 공통 층 번호를 정해 두면 숫자 경쟁이 사라집니다 */
:root {
  --z-header: 100;
  --z-dropdown: 200;
  --z-modal: 1000;
}
.header { position: relative; z-index: var(--z-header); }

반대로 의도치 않게 바깥 요소와 섞이는 걸 막고 싶을 때는 컴포넌트 최상단에 isolation: isolate를 주면 다른 스타일 변화 없이 쌓임 맥락만 새로 만들 수 있습니다.

"z-index는 숫자보다 층 구조를 먼저 봐야 풀립니다."

나눔웹은 퍼블리싱 단계에서 헤더, 메뉴, 팝업의 층 순서를 미리 정해 두어
오픈 후에 메뉴가 가려지는 일이 없도록 작업합니다.


List of Articles
번호 분류 제목 글쓴이
47 웹 성능 홈페이지 로딩 속도를 3배 높이는 '이미지 최적화' 실무 가이드 나눔웹
46 퍼블리싱 CSS 변수로 유지보수와 테마 기능을 한 번에! (CSS Custom Properties) 나눔웹
45 마케팅 카카오톡 링크 썸네일의 비밀! 클릭률을 높이는 '오픈 그래프(OG)' 세팅법 나눔웹
44 모바일 모바일 꽉 찬 화면 하단 짤림 현상! '100vh'의 함정과 완벽 해결법 나눔웹
43 웹 성능 홈페이지 첫 화면 글자 깜빡임(투명 현상) 1초 만에 해결하는 법 나눔웹
42 퍼블리싱 스마트폰에서 로고가 흐리게 보인다고요? 'SVG' 포맷이 정답입니다. 나눔웹
41 웹 성능 클릭 실수 유발하는 '화면 덜컹거림(CLS)', 단 한 줄로 해결하는 법 나눔웹
40 모바일 고객의 이탈을 막는 1초 디테일, '모바일 맞춤형 키보드' 세팅법 나눔웹
39 UI/UX 모바일에서 버튼 누를 때 생기는 촌스러운 '회색 박스' 없애는 법 나눔웹
38 UI/UX 레이아웃을 망치는 긴 글, 예쁘게 '...'으로 자르는 마법의 CSS 나눔웹
37 UI/UX 상단 메뉴에 제목이 가려진다고요? '부드러운 스크롤' 마법의 2줄 나눔웹
36 모바일 아이폰에서 입력창 누를 때 화면 '자동 확대'되는 현상 막는 법 나눔웹
35 퍼블리싱 지저분한 모바일 스크롤바, 기능은 남기고 쏙 숨기는 마법의 CSS 나눔웹
34 모바일 모바일 웹을 진짜 '앱(App)'처럼! 이미지 꾹 누를 때 뜨는 팝업 막기 나눔웹
33 UI/UX 애플(Apple) 사이트처럼 고급스러운 '반투명 유리' 메뉴 만드는 법 나눔웹
32 퍼블리싱 무거운 플러그인 NO! 넷플릭스처럼 쫀득한 '가로 스와이프' CSS로 뚝딱 만들기 나눔웹
31 UI/UX 1%의 디테일이 브랜딩을 완성합니다! '텍스트 드래그 색상' 바꾸기 나눔웹
30 UI/UX 투박한 파란색 체크박스는 그만! 단 1줄로 우리 회사 컬러 입히기 나눔웹
29 모바일 하단 고정 버튼이 아이폰 '검은 줄'에 겹친다면? (Safe Area 대응법) 나눔웹
28 모바일 앗, 실수로 새로고침! 튕기는 모바일 화면 꽉 잡는 법 (Overscroll) 나눔웹
Board Pagination Prev 1 2 3 Next
/ 3
rhwlsghkcocndgus XE2.1.39 STAGE1.5.4