Это такая особенность margin. Должны быть ограничивающие свойства, иначе margin будет переходить от внутреннего блока к внешнему.
Решить это можно задав родительскому блоку border 1px solid transparent
или overflow
любое значение кроме visible.
Лично я использую padding.