Respostas:
Adicione a seguinte propriedade:
.c{
...
overflow: hidden;
}
Isso forçará o contêiner a respeitar a altura de todos os elementos dentro dele, independentemente dos elementos flutuantes.
http://jsfiddle.net/gtdfY/3/
Recentemente, eu estava trabalhando em um projeto que exigia esse truque, mas precisava permitir que o estouro fosse exibido, então, em vez disso, você pode usar um pseudoelemento para limpar seus flutuadores, obtendo efetivamente o mesmo efeito enquanto permite o estouro em todos os elementos.
.c:after{
clear: both;
content: "";
display: block;
}
Você está fazendo os filhos flutuarem, o que significa que eles "flutuam" na frente do contêiner. Para obter a altura correta, você deve "limpar" o flutuador
O div style = "clear: both" limpa o flutuante e fornece a altura correta para o contêiner. consulte http://css.maxdesign.com.au/floatutorial/clear.htm para obter mais informações sobre flutuadores.
por exemplo.
<div class="c">
<div class="l">
</div>
<div class="m">
World
</div>
<div style="clear: both" />
</div>
A melhor ea solução mais à prova de balas é adicionar ::before
e ::after
pseudoelements ao recipiente. Portanto, se você tiver, por exemplo, uma lista como:
<ul class="clearfix">
<li></li>
<li></li>
<li></li>
</ul>
E todos os elementos da lista têm float:left
propriedades, então você deve adicionar ao seu css:
.clearfix::after, .clearfix::before {
content: '';
clear: both;
display: table;
}
Ou você pode tentar a display:inline-block;
propriedade, então você não precisa adicionar nenhum clearfix.