Existem dois tipos principais de colapso de margem:
- Recolhendo margens entre elementos adjacentes
- Recolhendo margens entre elementos pai e filho
O uso de um preenchimento ou borda impedirá o colapso apenas no último caso. Além disso, qualquer valor overflow
diferente do padrão ( visible
) aplicado ao pai evitará o colapso. Assim, ambos overflow: auto
e overflow: hidden
terão o mesmo efeito. Talvez a única diferença ao usar hidden
seja a consequência não intencional de ocultar o conteúdo se o pai tiver uma altura fixa.
Outras propriedades que, uma vez aplicadas ao pai, podem ajudar a corrigir esse comportamento são:
float: left / right
position: absolute
display: inline-block / flex
Você pode testar todos eles aqui: http://jsfiddle.net/XB9wX/1/ .
Devo acrescentar que, como sempre, o Internet Explorer é a exceção. Mais especificamente, no IE 7, as margens não diminuem quando algum tipo de layout é especificado para o elemento pai, como width
.
Fontes: artigo do Sitepoint Collapsing Margins