z-index가 같아도 겹치는 순서가 달라지는 이유

2025. 10. 16. 22:53·Computer Science/Web Development

웹 개발을 하다 보면 z-index를 설정했음에도 겹치는 요소의 순서가 예상과 다르게 나타나는 경우가 있다. 이런 현상의 핵심 원인은 CSS의 stacking context에 있다.

 

1. 부모 요소의 stacking context

z-index는 같은 stacking context 내에서만 비교된다.

부모 요소에 position: relative|absolute|fixed|sticky 와 z-index가 설정되어 있으면 그 부모 안에서만 자식들의 z-index가 적용된다. 즉, 자식 요소들의 z-index가 같더라도 부모 stacking context가 다르면 부모 요소의 순서에 따라 겹침 순서가 달라질 수 있다. 부모의 z-index 가 더 높으면, 자식들의 z-index 도 같이 높아진다고 이해하면 된다.

.parent1 { position: relative; z-index: 1; }
.child1  { position: absolute; z-index: 5; }

.parent2 { position: relative; z-index: 2; }
.child2  { position: absolute; z-index: 5; }

이 경우 .child2가 .child1 위에 표시된다. 그 이유는 .child2의 부모 .parent2가 .parent1보다 높은 z-index stacking context를 가지기 때문이다.

 

2. DOM 순서

stacking context가 같고 z-index도 동일하면 HTML 문서에서 뒤에 나오는 요소가 위에 표시된다. 따라서 같은 z-index라도 DOM 순서를 확인해야 한다.

 

3. transform, opacity, filter 등으로 생성된 stacking context

transform, opacity < 1, filter, perspective, isolation 등의 CSS 속성은 새로운 stacking context를 만든다. 이렇게 생성된 stacking context 내에서만 z-index가 적용되므로 예상과 다른 겹침 현상이 발생할 수 있다.

.div1 { position: relative; z-index: 10; transform: translateZ(0); }
.div2 { position: relative; z-index: 10; }

.div1에 transform이 적용되어 새로운 stacking context가 생성되면 .div2 위에 표시되지 않을 수 있다.

 

4. 핵심 정리

  1. z-index는 같은 stacking context 내에서만 비교된다.
  2. stacking context가 같고 z-index도 같으면 DOM 순서가 겹침 순서를 결정한다.
  3. transform, opacity, filter, isolation 등은 새로운 stacking context를 만들어 z-index 비교 범위를 제한한다.

'Computer Science > Web Development' 카테고리의 다른 글

JWT(Json Web Token)  (0) 2025.10.17
SPA, CSR, SSR, 그리고 Hybrid Rendering — 웹 렌더링의 진화  (0) 2025.10.17
Document Object Model(DOM)  (0) 2025.10.16
브라우저의 동작 원리  (0) 2025.10.15
브라우저의 구조와 웹 스토리지  (0) 2025.10.15
'Computer Science/Web Development' 카테고리의 다른 글
  • JWT(Json Web Token)
  • SPA, CSR, SSR, 그리고 Hybrid Rendering — 웹 렌더링의 진화
  • Document Object Model(DOM)
  • 브라우저의 동작 원리
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;)
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    Threads and Multithreading
    mobile app
    testing
    딥다이브
    indie hacker
    이벤트
    프론트엔드 성능 최적화 가이드
    CPU scheduling algorithm
    database
    자바스크립트 딥다이브
    자바스크립트
    js pattern
    TCP/IP
    스코프
    모던 자바스크립트 Deep Dive
    Shared resources
    VoiceJournal
    need a database
    Javascript Essentials
    DOM
    structure of os
    Operating System
    Network
    Binary Tree BFS
    Data Structure
    커리어
    leetcode
    Time complexity and Space complexity
    How memory manage data
    polylingo
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
z-index가 같아도 겹치는 순서가 달라지는 이유
상단으로

티스토리툴바