
본 글에서는 css의 margin collapsing에 대해 알아봅니다.

가로, 세로가 150px인 parent 요소와 50px인 child 요소를 아래와같이 배치하고 싶은 상황을 가정해봅시다.

다음 그림과 같이 margin을 주면 될 것이라 판단하였고, 코드를 작성했습니다.

html 코드:
<div class="parent">
<div class="child"></div>
</div>
css 코드:
.parent {
width: 150px;
height: 150px;
background-color: orange;
margin: 50px;
}
.child {
width: 50px;
height: 50px;
background-color: green;
margin: 100px;
}
그렇게 결과를 확인해봤는데...!

너무나 엉뚱한 결과가 나왔는데요, 부모의 위쪽 마진과 자식의 위쪽 마진이 마진겹침이 일어났기 때문입니다.


이번엔 가로 150px, 세로 300px인 parent 요소와, parent 요소의 자식으로 가로, 세로 50px인 child 요소 2개를 아래와 같이 배치하고 싶은 상황을 가정해봅시다.

다음 그림과 같이 margin을 주면 될 것이라 판단했고, 코드를 작성했습니다.
html 코드:
<div class="parent">
<div class="child1"></div>
<div class="child2"></div>
</div>
css 코드:
.parent {
width: 150px;
height: 300px;
background-color: orange;
margin: 10px;
}
.child1 {
width: 50px;
height: 50px;
background-color: green;
margin: 50px;
}
.child2 {
width: 50px;
height: 50px;
background-color: darkorchid;
margin: 50px;
}
하지만 현실은 녹록치 않습니다. 정말 예상치도 못한 결과물이 나왔습니다.

결과 해석:
1. 부모와 초록색 자식의 마진 겹침
2. 초록색 자식과 보라색 자식의 마진 겹침
두 가지 마진 겹침으로 인해 위같은 결과가 나온 것입니다.

border를 지정padding을 지정display: inline-block을 지정display: inline-block을 지정display: flex를 지정형제 요소간 마진 겹침의 경우
border,padding지정으로는 해소되지 않습니다.