어떤 두 개 이상 블록 요소의 상하 마진이 겹칠 때 어느 한 쪽의 값만 적용하는 브라우저 출력
!마진 상쇄는 인접한 두 박스가 온전한 block-level 요소일 경우에만 적용됩니다.
- 좌우 마진은 겹치더라도 상쇄되지 않습니다.
마진 상쇄가 일어나는 3가지 상황
1. 인접 형제 박스 간 상하 마진이 겹칠 때
겹쳐진 두 마진 값을 비교해, 더 큰 마진 값으로 상쇄해 렌더링합니다. 만약 겹쳐진 두 값이 동일할 경우, 중복을 상쇄해 렌더링합니다.
2. 빈 요소의 상하 마진이 겹칠 때
'빈 요소' 란 높이(height)가 0인 상태의 블록 요소를 말합니다.
- height / min-height / padding / border 등 상하로 늘어나는 프로퍼티 값을 명시적으로 주지 않았거나
- 내부에 Inline 콘텐츠가 존재하지 않는 요소
3. 부모 박스와 첫 번째(마지막) 자식 박스의 상단(하단) 마진이 겹칠 때
마진이란 콘텐츠 간의 간격이고, 간격을 벌리기 위해서는 경계를 필요로 합니다. 브라우저는 부모 박스와 첫 번째(마지막) 자식 박스 간의 경계를 그 사이에 있는 border / padding / inline 콘텐츠 유무로 판단합니다. 앞에 설명했던 빈 박스의 마진 상쇄 현상과는 조금 다르게, 이미 명시적으로 height / min-height 값을 줬더라도 이번 경우에선 신경 쓰지 않습니다.
따라서 부모와 첫 번째(마지막) 자식 사이에 inline 콘텐츠(텍스트 등)가 없거나, 상단(하단)에 명시적으로 padding 또는 border 값을 주지 않았다면 마진이 겹치게 됩니다. 이때, 자식 요소의 마진이 더 크든 작든 상관없이 상쇄된 마진은 부모 박스의 바깥으로만 렌더링이 됩니다.
---> 부모 박스 상단(하단)에 padding 또는 border 값을 주어 벽을 만들어주는 것이 안전합니다
마진 상쇄 규칙 예외
다음과 같은 상황에서는 인접 요소 간 마진 상쇄가 일어나지 않습니다.
- 박스가 position: absolute 된 상태
- 박스가 float: left/right 된 상태 (단, clear 되지 않은 상태)
https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Box_Model/Mastering_margin_collapsing
'코딩 > HTML, CSS' 카테고리의 다른 글
flex-box (0) | 2021.10.05 |
---|---|
display porperty(inline, block, inline-block) (0) | 2021.10.05 |
flex (0) | 2021.08.10 |
gap (0) | 2021.08.10 |
window.innerHeight (0) | 2021.07.30 |