위치 지정 및 z-index

상품 사진의 오른쪽 상단 모서리에 작은 "할인" 배지를 놓고 싶습니다. 페이지가 스크롤될 때 고정된 상태로 유지되는 헤더를 원합니다. 페이지의 다른 모든 것 위에 떠있는 대화 상자를 원합니다. 일반적인 CSS 간격은 요소를 하나씩 배열하기만 하므로 이 중 어느 것도 할 수 없습니다. 위치 지정은 요소를 그 일반적인 배열에서 벗어나 정확히 원하는 위치에 앉힐 수 있게 하는 도구의 집합입니다.
position 속성
모든 요소는 **static 위치 지정**으로 시작합니다. 이는 "페이지 흐름의 정상적인 위치에 앉아"라는 평범한 의미입니다. 이것이 기본값이며 대부분의 경우 원하는 것입니다. 위치 지정은 요소를 그 정상적인 위치에서 벗어나게 하려는 경우에 중요해집니다.
다음 단계는 position: relative입니다. 요소를 정상적으로 놓일 위치에서 이동시키며, 네 가지 오프셋 속성을 사용합니다: top, right, bottom, left. 핵심은 요소가 원래 공간을 유지한다는 것입니다. 다른 것은 공백을 채우기 위해 움직이지 않습니다.
.badge {
position: relative;
top: 10px; /* 정상적인 위치에서 아래쪽으로 10px 밀림 */
left: 20px; /* 정상적인 위치에서 오른쪽으로 20px 밀림 */
}static 요소에 대해서는 top과 left 오프셋이 전혀 작동하지 않습니다. position을 static 이외의 것으로 설정한 후에야 작동합니다.
static으로 시작하므로 정상적인 위치에 앉아 있습니다. position: relative로 전환하면 top, right, bottom, left로 이동시킬 수 있으면서도 원래 공간은 예약됩니다. 오프셋 속성은 요소가 위치 지정될 때까지 아무것도 하지 않으므로, top이 무시되는 것처럼 보이면 먼저 position을 설정했는지 확인하세요. Absolute 위치 지정
position: absolute는 더 큰 이동입니다. 이는 요소를 정상 흐름에서 깨끗이 들어올리므로 더 이상 공간을 차지하지 않으며, 주변 요소들은 마치 존재하지 않았던 것처럼 접혀집니다. 그 다음 동일한 top, right, bottom, left 오프셋을 사용하여 요소를 배치합니다.
질문은: 무엇에 대한 오프셋입니까? absolute 요소는 가장 가까운 위치 지정된 조상 즉, static 이외의 position을 가진 가장 가까운 부모에 대해 자신을 위치 지정합니다. 이것이 배지-온-카드 패턴이 항상 쌍으로 나오는 이유입니다: 카드를 relative로 만들어서 참조점이 되게 한 다음 배지를 absolute로 만들어서 카드의 모서리에 앉을 수 있게 합니다.
.card {
position: relative; /* 참조점이 됨 */
}
.card .badge {
position: absolute;
top: 8px; /* 카드 상단에서 8px */
right: 8px; /* 카드 오른쪽에서 8px */
}카드에 position: relative가 없으면 배지는 페이지 위쪽의 위치 지정된 조상을 찾아서 의도하지 않은 어딘가에 착륙할 것입니다.
position: absolute는 요소를 흐름에서 끌어내므로 공간을 차지하지 않고 이웃들이 뒤로 이어집니다. 그 다음 position이 설정된 가장 가까운 부모에 대해 위치 지정합니다. 이것이 배지-온-카드 트릭이 쌍인 이유입니다: 카드에 relative, 배지에 absolute, 그래서 배지가 카드의 모서리에 착륙하고 임의의 어딘가가 아닙니다. Fixed 및 sticky
position: fixed는 요소를 화면 자체에 고정시킵니다. absolute처럼 흐름을 벗어나지만, 부모에 고정되는 대신 뷰포트(보이는 창)에 고정됩니다. 고정되면 페이지를 스크롤해도 화면의 같은 위치에 유지됩니다. 이것이 네비게이션 바 또는 "맨 위로 돌아가기" 버튼이 항상 보이는 방식입니다.
.site-header {
position: fixed;
top: 0; /* 창 상단에 고정 */
left: 0;
right: 0; /* 전체 너비에 걸쳐 확장 */
}position: sticky는 우호적인 중간 지대입니다. sticky 요소는 일반적으로 페이지와 함께 스크롤되다가 설정한 임계값에 도달하면 제자리에 붙습니다. 콘텐츠와 함께 스크롤되었다가 화면 상단에 고정되는 섹션 제목이 고전적인 예입니다.
.section-title {
position: sticky;
top: 0; /* 상단 모서리에 도달하면 붙음 */
}position: fixed는 요소를 화면에 고정시키므로 스크롤할 때도 그대로 유지되며, 이것이 헤더 또는 맨 위로 가기 버튼이 유지되는 방식입니다. position: sticky는 중간 지대입니다: 페이지와 함께 스크롤되었다가 top: 0 같은 임계값에 도달하면 붙습니다. Fixed는 또한 아래의 것과 겹치므로 콘텐츠를 위해 공간을 남겨두세요. z-index로 쌓기
요소가 겹치면, 어느 것이 위에 있는지 결정해야 합니다. 이것이 z-index가 제어하는 것입니다. 더 높은 z-index는 더 낮은 것 앞에 그려지므로, z-index: 10인 드롭다운이 z-index: 1인 카드를 덮습니다.
모두를 난처하게 하는 한 가지 규칙이 있습니다: z-index는 위치 지정된 요소에서만 작동합니다. 요소가 여전히 static이면, z-index는 무시됩니다. 따라서 거의 항상 position과 z-index를 함께 설정합니다.
.modal {
position: fixed;
z-index: 100; /* 정상적인 페이지 콘텐츠 위에 앉음 */
}
.modal-overlay {
position: fixed;
z-index: 99; /* 어두운 배경, 모달 뒤 한 단계 */
}보통 여기서 큰 숫자가 필요하지 않습니다. 9999를 가득 채운 페이지보다 1, 10, 100 같은 작고 정돈된 척도가 이유하기 더 쉽습니다.
z-index는 어느 것이 앞에 있는지 결정합니다: 더 높은 숫자가 우승합니다. 위치 지정된 요소에서만 작동하므로, 일반 static 요소의 z-index는 무시되며, position과 z-index를 함께 설정합니다. 9999 더미 대신 1, 10, 100 같은 작고 정돈된 숫자를 유지하세요. 
