el problema es que usas margin, lo ideal seria usar capas relativas o absolutas.
cuando aplicas margin a diversos objetos en un contenedor suelen solaparse los margenes superiores e inferiores adyacentes, para obtener el mismo
margen y así tener elementos con el mismo espaciado, esto no ocurre en el caso del relleno o padding.
ejemplo padding vs margin:
fuente:
http://librosweb.es/css/capitulo4/margen_y_relleno.html