웹 디자인에서 레이어(layer)는 화면의 요소들이 쌓이는 순서를 나타냅니다. 웹페이지를 구성할 때, 여러 요소들이 겹치거나 서로 다른 위치에서 나타나는 경우가 많습니다. 이를 효과적으로 관리하기 위해 CSS z-index 속성을 사용하여 요소들의 쌓임 순서를 조정할 수 있습니다. 이 글에서는 z-index의 기본 개념과 활용 방법을 알아보고, 레이어 관리의 실전 적용 사례를 소개하겠습니다.
1. CSS z-index의 기본 개념
CSS의 z-index는 요소가 화면에서 어디에 위치할지를 결정하는 속성입니다. 이 속성은 HTML 요소가 쌓이는 순서를 조정하는데, 더 높은 z-index 값을 가진 요소가 더 위에 표시되고, 낮은 값을 가진 요소는 아래에 놓입니다.
z-index는 일반적으로 position 속성과 함께 사용됩니다. 요소의 위치가 static이 아닐 때(z-index는 relative, absolute, fixed, sticky와 같은 position 속성에서 동작), z-index 값이 작동합니다.
.element {
position: relative; /* 요소의 position 설정 */
z-index: 1; /* z-index 값 설정 */
}
위 코드에서 z-index: 1;은 해당 요소를 쌓임 순서에서 위로 올려줍니다. 만약 다른 요소에 z-index: 2;가 설정되어 있다면, 그 요소가 더 위에 위치하게 됩니다.
2. CSS z-index와 스택 컨텍스트(Stacking Context)
- 스택 컨텍스트(stacking context)는 요소들이 특정 순서대로 쌓이는 독립적인 레이어를 의미합니다. 이 컨텍스트는 특정 조건에 의해 생성되며, z-index는 이 컨텍스트 내에서만 영향을 미칩니다. 스택 컨텍스트는 HTML 문서 내에서 기본적으로 다음과 같은 규칙으로 생성됩니다:
- position이 relative, absolute, fixed인 요소에서 z-index 값이 설정되었을 때
- opacity 값이 1보다 작은 요소
- transform, filter, perspective 속성이 적용된 요소
- flex 컨테이너의 자식 요소 등
스택 컨텍스트가 생성되면, 그 안에 있는 요소들끼리만 z-index 값을 비교할 수 있습니다. 외부의 요소들과는 독립적인 쌓임 순서를 가지게 됩니다.
3. CSS z-index 활용 예시
1) 이미지와 텍스트 겹치기
웹 디자인에서 이미지 위에 텍스트를 겹쳐서 보여주는 경우가 많습니다. 이때 z-index를 활용하여 텍스트가 이미지 위로 올라오도록 설정할 수 있습니다.
HTML 코드:
<div class="container"> <img src="image.jpg" alt="background image" class="background"> <p class="text">이미지 위에 텍스트</p> </div>
CSS 코드:
.container {
position: relative;
}
.background {
width: 100%;
position: relative;
z-index: 1;
}
.text {
position: absolute;
top: 50px;
left: 20px;
z-index: 2; /* 텍스트가 이미지 위로 올라옴 */
color: white;
font-size: 24px;
}
이 예시에서는 이미지에 z-index: 1을 설정하고, 텍스트에는 z-index: 2를 설정하여 텍스트가 이미지 위에 쌓이도록 만들었습니다.
2) 모달 윈도우 구현
모달 창은 웹사이트에서 많이 사용하는 요소로, 다른 콘텐츠 위에 떠서 표시되는 창입니다. 모달은 보통 배경이 어두워지고, 상위 레이어에서 모달 창이 활성화됩니다.
HTML 코드:
<div class="modal-background"></div> <div class="modal-window"> <p>모달 창의 내용</p> </div>
CSS 코드:
.modal-background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5); /* 반투명 배경 */
z-index: 1;
}
.modal-window {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: white;
padding: 20px;
z-index: 2; /* 배경보다 위에 위치 */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
이 코드에서는 modal-background 요소에 z-index: 1, modal-window에 z-index: 2를 설정하여, 모달 창이 배경보다 위에 위치하도록 했습니다.
3) 헤더 고정과 배너 관리
웹사이트 상단의 헤더(header)는 스크롤을 하더라도 항상 상단에 고정되어 있어야 하는 경우가 많습니다. 이때 페이지 내 다른 요소들과의 겹침을 방지하기 위해 z-index를 활용할 수 있습니다.
CSS 코드:
header {
position: fixed;
top: 0;
width: 100%;
z-index: 10; /* 다른 모든 요소 위에 고정 */
background-color: #333;
color: white;
padding: 10px;
}
헤더에 z-index: 10을 적용하면, 다른 요소들 위에 고정되면서 스크롤해도 항상 상단에 표시됩니다.
4. z-index 문제 해결 팁
1) z-index가 작동하지 않을 때
z-index가 의도한 대로 작동하지 않는 경우가 있습니다. 이때는 다음 사항을 확인해볼 수 있습니다:
- Position 속성이 static으로 설정된 경우 z-index는 효과가 없습니다. 요소의 position을 relative, absolute, fixed 등으로 설정해야 합니다.
- 스택 컨텍스트를 확인하세요. z-index는 같은 스택 컨텍스트 내에서만 유효합니다. 만약 다른 컨텍스트 내에 있는 요소들은 z-index 값이 적용되지 않으니, 이를 고려하여 컨텍스트를 재설정해야 합니다.
2) 스택 순서에 따른 레이어 구성
여러 요소가 겹쳐진 페이지에서 특정 요소만 위에 표시하고 싶다면, z-index 값을 세심하게 설정해야 합니다. 큰 값을 무조건 적용하는 것이 아니라, 필요한 요소에만 적절한 z-index 값을 할당하는 것이 중요합니다.
z-index는 웹사이트 디자인에서 중요한 레이어 관리 도구로, 다양한 요소들의 쌓임 순서를 조절하여 사용자 경험을 개선할 수 있습니다. z-index와 스택 컨텍스트 개념을 제대로 이해하고 활용하면, 복잡한 레이아웃에서도 겹침 문제를 효과적으로 해결할 수 있습니다. 이를 통해 웹사이트의 레이아웃을 직관적이고 세련되게 만들어보세요.









