Всё довольно просто, ловится событие window scroll и меняется CSS у элемента, в данном случае смещаются X и Y координаты с помощью transform: translate3d
Маржины складываются, вот и всё. То есть например у верхнего блока был нижний маржин 20, а у нижнего блока верхний 10, то сам маржин между ними будет 10. Это то, как работает маржин.