Como resolver o bug de float/display:table do Firefox

Postado em 24 de junho de 2008 em Desenvolvimento Web, Tecnologia

Um dos bugs mais estranhos e odiados entre os desenvolvedores WebStandards é o do float no Firefox. A história é típica:

Você tem uma div#pai com um fundo (de cor ou imagem) e nela, duas div’s #filho com float. O primeiro problema que você vai reparar é que a div#pai não “estica” conforme as div’s #filho crescem, e então o fundo não vai aparecer. Veja o exemplo.

Você fuça, fuça e fuça, até que descobre que colocando display:table na div#pai, ela vai esticar certinho! Maravilha! Tudo funcionando e o site vai pro ar.

Só que aí que começa o verdadeiro problema: Você acessa o site e as div’s filhas ficam “quebradas”, uma embaixo da outra, como se o float não estivesse funcionando. Aí vc dá F5 para atualizar a página, e as div’s voltam pro lugar! Veja o exemplo.

Daí surgiram diversas teorias, entre as quais uma que diz que depende da força com que você aperta o F5, porque as div’s são sentimentais :P

Em uma discussão no fórum Webly, descobrimos que colocando uma div “fantasma” com clear:both logo no final das div’s #filhas e retirando o display:table o problema estava resolvido! Inclusive o Micox fez um post sobre essa solução.

Porém, todos nós sabemos que adicionar marcação desnecessária no seu HTML, não é uma prática profissional, é apenas uma gambiarra, para solucionar um problema que não entendemos.

Baseado na idéia da “div fantasma” e baseado nos pseudo-elementos (que o Firefox aceita) desenvolvi uma solução que não agride o meio ambiente, digo, não interfere no seu HTML:

		div#pai:after{
		    content:".";
		    display:block;
		    clear:both;
		    visibility:hidden;
		    height:0;
		    overflow:hidden;
		}

Explico. Nessa declaração você diz que logo depois da div#pai será inserido um “.” e que ele deve ter o mesmo clear:both que tínhamos na “div fantasma”. Ainda, fazemos com que ele não apareça e não ocupe espaço na tela, para não ter problema com seu layout tão bonito ;)

Eu suma, simulamos o que a div fantasma fazia, só que sem mexer no seu HTML, isso se chama profissionalismo! :) Veja a solução.

Um grande abraço a todos =)

Este tutorial foi escrito por André Gazola

Dica do Rafael Dourado (@rdourado), via twitter

Joares Miranda

Webdesigner, twitteiro, blogueiro. Para alguns, um falso nerd, acho que por conta de não perder a chance de gastar horas num bom papo off-line

Ver todos os posts de Joares Miranda | Twitter: @joares

Comentários

Kennedy Lucas
em 24 de agosto de 2008

A tecnica é realmente muito boa, mas o firefox não tem problemas com a propriedade float e não pode ser chamado de bug. O IE é que renderiza de forma errada elementos flutuantes.
Há outra solução sem usar marcação desnecessária: fazendo flutuar tb o elemento pai. Daí talvez seja necessario fazer flutuar quase tudo e se configura um elemento com a propriedade clear:both por ex. o rodapé.

Joares Miranda
em 26 de agosto de 2008

@Kennedy Lucas: Todos sabemos o qnto o IEca renderiza de modo errado, esta solução acima é uma das formas… eu não disse como sendo A forma…

A sua solução eu postei na comunidade sobre webstandard… http://www.orkut.com.br/Main#CommMsgs.aspx?cmm=52790&tid=5237030757095953553&start=1

Qnto ao problema com elementos flutuantes dentro da div pai… isso ocorre em TODOS os navegadores mais usados… Opera, FF, IEca 6 e 7…

Inserir comentário

Publicidade - Skybanner

Ícones para acesso às mídias sociais

Publicidade - Banner Quadrado

Publicidade - miniquadrados submarino

Blogs amigos

Patrocínio

Monitor online

Busca

Publicidade - Full Banner

Sobre este blog

O blog NumClique pode ser definido de várias maneira, seja por trazer um conteúdo diferenciado em relação aos assuntos ligados não só a tecnologia, bem como a tudo o que rola de interessante e que se refere à nossa grande paixão: A internet.

Quer saber quem faz este blog?

  • Joares

    CEO / Gerente de negócios

  • Antino

    CEO / Gerente de conteúdo

  • Pedro

    Produtor de conteúdo

NumClique – Estilo de vida digital

Política de privacidade

Todo material publicado neste blog e que tem como autor algum membro ou ex-membro da equipe é de propriedade do blog

Hospedado por Argohost.net - Especialista em Hospedagem de sites e blogs

Este blog utiliza WordPress como CMS