In CSS adjoining vertical margins of two or more boxes (these may or may not be siblings), can combine to form a single margin. These boxes must be in-flow block level boxes.
CSS margin collapsing example between siblings
Bottom margin 50px (box1) + top margin 25px (box2) => collapsed margin 50px (higher)
<style type="text/css" media="screen">
body {margin:0;}
.box1 {
  background:lightgreen;
  width:50px; height: 50px;
  margin-bottom: 50px;
}
.box2 {
  background:lightgray;
  width:50px; height:50px;
  margin-top: 25px;
}
</style>
<div class="box1">
</div>
<div class="box2">
</div>CSS margin collapsing example between parent and child
This is somewhat counter intuitive can surprise people initially.
Top margin 0 (parent) + top margin 25px (child) => collapsed margin 25px applied to both parent and child.
<style type="text/css" media="screen">
body {margin:0;}
.parent {
  background:lightgreen;
  width:100px; height: 100px;
}
.child {
  background:lightgray;
  width:50px; height:50px;
  margin-top: 20px;
}
</style>
<div class="parent">
<div class="child">
</div>
</div>How to avoid CSS margin collapsing example between parent and child
We can add a padding-top of 1px to parent. This way margins will no longer be adjoining and won’t collapse.
<style type="text/css" media="screen">
body {margin:0;}
.parent {
  background:lightgreen;
  width:100px; height: 100px;
  padding-top:1px;
}
.child {
  background:lightgray;
  width:50px; height:50px;
  margin-top: 20px;
}
</style>
<div class="parent">
<div class="child">
</div>
</div>