Eu realmente gosto do comportamento das margens recolhíveis em elementos de bloco, no entanto, pode ser bastante irritante quando afeta um contêiner oculto que você está deslizando / desaparecendo à vista. Veja isto, por exemplo:
<h1>Hello</h1>
<div style="display:none">
<h2>Hidden sub-heading</h2>
</div>
Se o div oculto for aberto usando jQuery:
$('div').slideDown(500);
… a margem inferior de h1 e a margem superior de h2 não se recolherão até que a animação slideDown () seja concluída, resultando em um ‘salto’ perceptível.
Uma maneira fácil de se livrar desse problema é aplicar um preenchimento superior e inferior de pelo menos 1px ao contêiner pai (neste caso, o div oculto), efetivamente colocando uma pequena barreira entre h1 e h2, que bloqueia as margens de entrar em colapso.
Isso é fácil de fazer, dando ao contêiner oculto um nome de classe e definindo o preenchimento superior / inferior com CSS. Por exemplo:
.hidden
{
display: hidden;
padding: 1px 0;
}
–
<h1>Hello</h1>
<div class="hidden">
<h2>Hidden sub-heading</h2>
</div>
Em uma de minhas compilações mais recentes, eu tinha alguns contêineres ocultos que não tinham nenhum preenchimento superior / inferior definido via CSS e não estava interessado em adicionar outro nome de classe a eles, então escrevi um pequeno pedaço de jQuery para verifique se o elemento do contêiner tinha qualquer preenchimento superior / inferior antes de executar a função slideDown (). Aqui está o exemplo, com um pequeno link para definir tudo.
<h1>Hello</h1>
<div id="more" style="display:none">
<h2>Hidden sub-heading</h2>
</div>
<p>
<a href="#" data-target="#more">Show the element with an ID of 'more'!</a>
</p>
–
$('[data-target]').on('click', function(e) {
e.preventDefault();
var target_selector = $(this).data('target');
var target_element = $(target_selector);
if (target_element.css('paddingTop') == '0px')
target_element.css({paddingTop: '1px'});
if (target_element.css('paddingBottom') == '0px')
target_element.css({paddingBottom: '1px'});
target_element.slideDown(500);
});
Você pode vê-lo em ação em artlines.co.uk – basta clicar nas setas laranja para revelar.
Espero que isso seja útil para algumas pessoas!