Margin Collapsing이 발생하는 사례에 대한 생활코딩 강좌에 대한 정리를 포스팅하겠습니다.
연속된 태그들 사이에서 Collapsing
<style>
h1 { margin : 100 px; }
</style>
<h1>first h1</h1>
<h1>second h1</h1>
위의 코드에서 <h1>
은 각각 상하좌우로 100px씩 margin을 가져야한다. 즉, 두 <h1>
의 상하 간격은 200px이어야 한다. 그러나 실제로 개발자도구를 열어서 보면, 첫 번째 <h1>
의 margin-bottom과 두 번째 <h1>
의 margin-top이 겹치는 것을 확인할 수 있다. 이것이 Margin Collapsing(마진겹침)현상이다.
<h1>
의 margin이 150px이고, 두 번째 <h1>
의 margin이 100px이면, 두 태그의 간격은 Collapsing에 의해, 250px이 아니라 150px이 된다.Parent-Child 관계에서의 Collapsing
<style>
#parent {
border : 1px solid red;
margin-top: 100px;
}
#child {
background-color : green;
margin-top : 50px;
}
</style>
<div id="parent">
<div id="child">Margin Collapsing</div>
</div>
[3]
번 라인 주석처리 안했을 때)[3]
번 라인 주석처리 했을 때)위 코드에서 Parent의 border 스타일을 주석처리하면 Margin Collapsing이 발생한다.
이와 같이, Parent의 시각적 효과
가 사라지면 Margin-Collapsing이 발생한다.
<style>
#empty {
margin-top: 50px;
margin-bottom: 100px;
border : 1px solid tomato;
}
#normal {
background-color: powderblue;
margin-top : 50px
}
</style>
<div id="empty"><div>
<div id="normal">normal<div>
첫 번째 collapsing 예시에서 본 것처럼, <div id=normal>
에 margin 값을 줘도, 값이 <div id="empty">
의 margin-bottom보다 작으면, normal div의 위치는 변경되지 않는다.
여기서 empty div의 border를 없애면("시각적 요소를 없애면"), normal div의 margin값만 적용되며 viewport와 50px 떨어진 곳으로 이동된다.