CSS: Truques para dominar a propriedade Float

Por Richard em 21/12/2007

O float é uma propriedade meio imprevisível no CSS. Este é um tutorial explicando passo-a-passo o seu funcionamento com alguns macetes que você não encontrará em nenhum site de referência CSS.

Para começar, vou usar uma estrutura Html simples com 3 tags Div:

<div class="tudo">
<div class="menu">Menu</div>
<div class="conteudo">Conteúdo</div>
</div>

Tutorial Div 1

O Float é uma propriedade que faz o objeto flutuar à esquerda ou à direita do restante do conteúdo. Se quisermos o menu à esquerda e o conteúdo à direita, o que os desenvolvedores geralmente fazem é:

.menu { float: left; width: 30%; }
.conteudo { float: right; width: 60%; }

Tutorial Float 2

Mas isso pode gerar uma série de dores de cabeça mais a frente no desenvolvimento. Vamos estudar o que pode dar errado e entender o porquê.

Macetes que ninguém ensinará para você

Esta técnica gera – principalmente no Internet Explorer – 2 erros de renderização:

1. Float sobrepõe o resto do site

Note que a borda do div pai que chamamos de “tudo” não está acompanhando os divs internos (.menu e .conteudo).

Layout Trepado

Para forçar o div “tudo” a circular também os objetos com float, mude o seu modo de exibição para table desta forma:

.tudo { display: table; }

UPDATE: um hack que pode funcionar melhor que o display:table; é adicionar uma div com clear: both; depois de todos os divs flutuantes.

.clear { clear: both; }
<div class="clear"> </div>

Muito bom, agora que o seu float está integrado com o restante do conteúdo da maneira que você queria, falta o cheque-mate.

2. Float:right não alinha com o Float:left

Quem já encontrou este problema sabe o quanto é irritante. Em alguns casos, as colunas não ficam uma do lado da outra NUNCA, por mais que você tente.

Float trepado 2

Para corrigir isso devemos usar o Float da maneira correta. Ao invés de colocar float:left; no da esquerda e float:right; no da direita, colocamos apenas no da esquerda e deixamos o da direita alinhar naturalmente com um espaço de margem.

Veja como é simples:

.menu { float: left; width: 30%; }
.conteudo { margin-left: 30%; }

Veja o código combinado de html e css:

<!-- CSS -->
<style rel="stylesheet" type="text/css">
.tudo { display: table; }
.menu { float: left; width: 30%; }
.conteudo { margin-left: 35%; }
</style>

<!-- HTML -->
<div class="tudo">
<div class="menu">Menu</div>
<div class="conteudo">Conteúdo</div>
</div>

Float Ok

Finalmente, um float dentro dos padrões e funcionando em qualquer browser. A fera está domada!


62 respostas »

  1. A maneira certa de usar a propriedade Float no CSS - Richard Barros - Blog e Portfolio em 22/12/2007 às 04:20 - Pingback

    [...] UPDATE: Confira também este link com vários macetes para dominar a propriedade Float. [...]

  2. helio em 24/12/2007 às 17:09

    manero esse display: table
    sabia nao, eu ja colocaria tudo pra flutuar…

    faria uma gambiarra total xD

    assim fica melhor

    [Responder]

  3. Gabi em 24/12/2007 às 18:50

    display: table, também n conhecia! Mto boa a dica!! Como sempre! =D

    [Responder]

  4. Helder Santana em 26/12/2007 às 09:45

    Estava conversando com o Dulcetti no Blogcamp PR sobre o display:table , segundo ele não é 100% efetivo para floats.

    Abraço.

    [Responder]

  5. Richard Barros em 26/12/2007 às 15:11

    @helder: Certamente não é 100% efetivo, mas servirá em alguns casos para alguem que esteja quebrando cabeça na montagem de um layout com float.

    Lembro a todos que os macetes ou css hacks em geral não devem ser incorporados à sua metodologia de desenvolvimento, mas conhecer todas as possibilidades certamente ajudará numa situação extraordinária.

    [Responder]

  6. Jonathan em 27/12/2007 às 15:11

    Cara…so num te do um bjo pq eu num so gay…heheheh… vlw d+++… salvou o dia !!!

    [Responder]

  7. Paola Sales em 05/01/2008 às 17:55

    Oie Richard!
    Feliz 2008!
    :o)

    [Responder]

  8. Vanessa em 24/01/2008 às 10:23

    Poxa, funcionou legal no firefox, mas no IE 7 não funcionou….não testei no IE 6.
    Tem algum macete pra funcionar no IE 7?

    [Responder]

  9. gabriel em 25/01/2008 às 16:43

    Valeu mesmo!!
    Tava arrancando os cabelos hehe.
    Já tinha feito muita gambiarra pra tentar solucionar este problema! Acho que a unica coisa que não tinha tentado era isso… porém tenho um pouco de receio a como isto funciona no IE, ele não interpreta bem a propriedade display:table;
    No IE 6 funciona quando você coloca um elemento float:left e um float:right, mas porque nesta situação o elemento ao redor aumenta sempre nele mesmo sem declarar esta propriedade, digamos que é um bug para o bem… mas bom seria se em todos funcionasse da mesma maneira…
    A propósito não testei no IE 7

    [Responder]

  10. guz em 14/03/2008 às 19:01

    mano vc me salvo :D

    [Responder]

  11. Junior em 24/03/2008 às 20:16

    Valeu cara. Gostei dos macetes que postou aqui.

    Sempre vou me lembrar dessas dicas
    =)

    E os testes q eu fiz pro site q eu to fazendo, funcionou em todos os browsers (Firefox 2.0.0.12, IE 7, IE 8 beta, Safari 3.1 e Opera
    9.26) sem problema nenhum.

    Vai pros favoritos
    =)

    [Responder]

  12. Paulo Henrique em 14/04/2008 às 02:22

    Primeiro duvidei do código mas quando pus a mão na massa vi que estava tudo certinho. Parabéns pelo blog, cara.

    [Responder]

  13. Wilian Fiabani em 28/04/2008 às 10:11

    caro Richard, tudo bem?
    poderia me explicar brevemente como faço para que um div circule outro(um div dentro de outro), de forma que o div interno(conteudo) esteja com position:absolute?

    desde já agradeço, grande abraço Richard.

    [Responder]

  14. Aurélio em 07/05/2008 às 07:51

    Estou com o mesmo problema da Vanessa. No IE 7 não funciona. Alguma dica?

    [Responder]

  15. Fernando em 14/05/2008 às 10:47

    Cara, cacei isso semanas! Uma dica simples e valiosa! Obrigado!

    Nota para Wilian: acho que div absolute é referente à janela e não ao div-pai. Pra isso, o div deveria ser relative.

    [Responder]

  16. Mário Homem em 26/05/2008 às 20:30

    Você é “GRANDE”… Uma dica bem estruturada e útil… bem haja… Pena não existirem mais como você a partilharem algum conhecimento…

    [Responder]

  17. Guto em 28/05/2008 às 21:46

    Demais o artigo, valeu mesmo! Rápido e prático, acabou com as dúvidas que eu tinha. Já está no s favoritos.

    [Responder]

  18. Julio Faerman em 03/07/2008 às 18:19

    clear:both salvou minha pele. valeu d+!

    [Responder]

  19. Henrique em 04/07/2008 às 19:11

    Rapaz… salvou minha pele também, tive o mesmíssimo problema do div pai não acompanhar o conteúdo dos divs com float.
    fiz conforme o exemplo e agora funfa na boa!
    parabéns!

    [Responder]

  20. Daniel Andrade Cyprestes em 20/07/2008 às 11:47

    Caraca cara valeu mesmo se nao fosse voce eu teria tomado dois tapas na cara que eu apostei eu nem sabia desse display: table; cara serio mesmo valeu ai.

    [Responder]

  21. marcos felipe em 24/07/2008 às 16:19

    Bom d+ velho =)!

    quando de poe + alguns ae pra nós. by

    [Responder]

  22. João Gabriel Taig em 27/07/2008 às 14:06

    Muito bom, você devia ganhar um premio procuro na net algo parecido a muito tempo e não achei você sem duvida resolveu todos os meus problemas.

    Mt obrigado.

    [Responder]

  23. Wagner Andrade em 28/07/2008 às 14:40

    Muito bom.
    A tempos procuro uma explicação como essa.
    Obrigado.

    [Responder]

  24. Dirceu em 30/07/2008 às 22:10

    Amigo como faço para alinhar no centro, uma imagem com essa função “float”?

    Obrigado!

    [Responder]

  25. Alice em 15/08/2008 às 18:00

    Richard,
    Usei a sua dica e funcionou perfeitamente. Obrigada. Você já está no meu “favoritos”.
    Mas gostaria de saber se pode me ajudar um pouco mais….fiz um site com o menu do lado esquerdo e o conteúdo do lado direito se divide em duas colunas. Está lindo no IE 7.0 e no Firefox, mas no IE 6.0 a última coluna da direita fica abaixo da central. Pode me dar alguma dica pra resolver isso? Estou há tempos tentando resolver isso e não consigo.
    Se puder ajudar agradeço.
    Obrigada.

    [Responder]

  26. Lucrecio em 24/08/2008 às 11:10

    eu não sei na verdade se o meu site e e-mail está em funcionamento porque ainda não enviei qualquer informação no meu site e nã sei enviar no meu proprio

    [Responder]

  27. Gray em 20/09/2008 às 14:32

    Exatamente o que estava precisando, obrigado

    [Responder]

  28. cleobes em 23/09/2008 às 14:01

    alguem poderia me ajudar como fazer o preencimento de um espaço que existe no site.
    Pois se eu colocar um background-color, ele pega todo o fundo da prncipal e eu somente queria que ela ficase no nas divs da esquerda e da direita.

    Obrigado

    [Responder]

  29. Rodrigo em 24/09/2008 às 15:50

    Muito útil! voce salvou minha vida.

    [Responder]

  30. Daniel em 29/09/2008 às 18:05

    Valeu Richard!
    Muito Bom!
    Obrigado!

    [Responder]

  31. Thiago Rodrigues em 03/11/2008 às 12:31

    Cara, tu salvou meu dia tbm! Isso me fio de grande ajuda. Muito obrigado msm. Que Deus continue abençoando sua vida para que vc possa continuar abençoando a nos, amadores e profissionais da web.

    Valeu MSM!!!

    [Responder]

  32. raphael em 05/11/2008 às 15:31

    cara o display table não funciona legal no crome. se já fez o teste? eu estou tendo problemas se souber me avisa ai se der monteiro.barboza@gmail.com

    valeuu

    [Responder]

  33. Vivian Ferreira em 24/11/2008 às 13:47

    Olá! Muito obrigada pela dica!!
    Me ajudou muito!

    [Responder]

  34. Daniel Façanha em 28/11/2008 às 14:16

    Cara muito Obrigado ja estava ficando louco com essas divs que não alinhavam. Muito obrigado mesmo.

    Abraço.

    [Responder]

  35. Alexandre Américo Fumes em 21/12/2008 às 13:14

    Eu gostaria de Adicionar mais algumas informações a este ótimo post!

    Utilizando essas técnicas que o Richard Barros passou… Se tiver uma tag dentro do conteudo…
    O design pode se desfazer… Seja com o o conteudo e o menu desalinhados ou então com um espaço no começo e no fim do conteudo…
    Para corrigir isso! Poem no CSS

    p {margin:0;}

    Se ainda não funcionar coloque um ESPAÇO FORÇADO
    Que é “ ” ( sem as aspas ) antes da TAG se necessário coloque outro depois da tag tbm!
    Que corrige o problema…

    Isto pode acontecer também com a tag

    Se verificar na net tem posts falando que isso pode acontecer com outras tags tbm e tem css’s que resetam as propriedades de margin dos elementos… é uma boa nesses casos…
    Abraço… Xande!

    [Responder]

  36. Alexandre Américo Fumes em 21/12/2008 às 13:25

    HTML não está ativado… é proteção do blog msm…
    Mas de qualquer modo eu coloco com espaços
    “& n b s p ;” (SEM ASPAS E SEM ESPAÇOS ENTRE AS LETRAS!) ISSO é o ESPAÇO FORÇADO!

    Richard Barros… Corrige aew meu coment plz!

    [Responder]

  37. SEO, Técnicas de Otimização - João Pedro Barros em 25/12/2008 às 22:44 - Pingback

    [...] – Muitos webmasters inserem o código HTML do menu antes do conteúdo. Isso faz com que o crawler possa dar uma relevância inadequada as partes do site. Nesse sentido, deve-se criar uma maneira para que o conteúdo seja inserido antes do menu de navegação. Para tanto, pode-se usar técnicas de tableless e parâmetros CSS como o float. [...]

  38. keven em 06/01/2009 às 10:32

    vale fera!!!

    [Responder]

  39. Guille em 08/01/2009 às 18:32

    muito bom estou começando a estudar CSS, a dica do clear: both; é melhor pra esse caso, vlw pelas dicas ein… abraço.. e sucesso!

    [Responder]

  40. Douglas em 18/01/2009 às 15:23

    Cara muito bom, obrigado, agora consegui entender a propriedade float.
    abraços!

    [Responder]

  41. Adriel em 13/02/2009 às 11:28

    Olá, agradeço seu post. Leigo no assunto, acabei por descobrir que o meu problema de alinhamento entre as duas sidebars do meu blog se encaixa no item 2: Float:right não alinha com o Float:left.

    Eu só tenho esse problema no IE 6, dentre os outros browsers: Opera, FF, Chrome e versões superiores ao IE 7 na qual testei. Penso em consertar isso no IE 6 porque meus visitantes que usam essa versão do navegador representa pouco mais de 30%, no entanto, seguindo sua diga de retirar o elemento “Float” de uma das sidebar e usando o “margin-left”, também não obtive resultados, a sidebar 1, da esquerda, insiste em ficar abaixo da sidebar 2.

    Basicamente, o espaço reservado no laytout as duas sidebar está assim no CSS:

    “/* Side */
    .SR { width: 350px; float: right; position: relative; padding: 0px; }”

    Aí vem as configs da:
    Sidebar 2 (direita):
    “/* Side Right*/
    .SRL { width: 170px; float: right; position: relative;}”

    Sidebar 1 (esquerda):
    “/* Side Left*/
    .SRR { width: 130px; float: left; padding: 0px 0px 0px 0px;}”

    Isso no modo padrão, antes de usar o elemento “margin-left” que também não deu certo. Você teria alguma sugestão a mais?

    De qualquer forma já agradeço pelo seu post sobre o elemento “float” ;)

    [Responder]

  42. Lineker em 15/02/2009 às 14:20

    obrigado pela dica…

    [Responder]

  43. Gabriel em 24/02/2009 às 11:50

    Meu to aprendendo agora webdesigner e isso foi uma “mão na luva” era exatamente o que tava me prendendo…valew, ótimo post, e realmente funciona.

    [Responder]

  44. Rafael Santana em 18/03/2009 às 16:12

    Muito obrigado pela dica! Me foi MUITO útil.

    Abraços

    [Responder]

  45. » Estilo Float (CSS Style Float) | Como Criar Sites | Aprenda grátis como fazer seu site em 07/04/2009 às 23:04 - Pingback

    [...] um estilo que nós podemos querer utilizar para outros fins. Essa técnica é abordada no site CSS: Truques para dominar a propriedade Float, mas sem muitas explicações de por que essa técnica [...]

  46. gadarf em 04/05/2009 às 14:34

    Muito bom o tutorial.

    [Responder]

  47. Usando a propriedade Float de maneira correta | Giuliano Rodrigues de Souza em 08/05/2009 às 00:17 - Pingback

    [...] também este link com vários macetes para dominar a propriedade Float. Categories : CSS, Tutoriais Tags : CSS, [...]

  48. Neu em 29/06/2009 às 20:13

    Parabéns
    meuito bom ;D
    como vc disse, “macetes que você não encontrará em nenhum site de referência CSS.” .

    Abraço

    [Responder]

  49. Jefferson em 29/07/2009 às 23:19

    Cara, interessante vc falar do assunto, mas o floate left no menu e rigth no conteudo funciona sim. Mas vc tem que definir bem o tamanho das duas divs, caso contrário uma vai tero deslocamento indesejável. Embora somente o float left já resolva o problema.

    Flw!

    [Responder]

  50. Gustavo Antão em 06/08/2009 às 09:17

    Estou com o mesmo problema do Adriel, alguém sabe como resolvê-lo?

    [Responder]

  51. Moiza em 06/09/2009 às 18:36

    Best tuto for use float eveeeeer

    [Responder]

  52. Michael DOni em 11/09/2009 às 16:08

    Muito bom… mas faltou umas coisinhas que ajudam quando se está mexendo com float… usar um clearboth depois de terminar uma “LINHA” de divs ou de estágio do site é sempre bom, pois isto limpa o que foi feito anteriormente, e algumas vezes usando o clear:both alguns navegadores entendem de mandeira errada criando espaços etc… tem que formatar tudo mesmo assim…

    Mas o tutorial é show eim
    da uma ajuda boa =D

    [Responder]

  53. Fernando Schuindt em 19/09/2009 às 09:51

    Puts cara! Muito bom!
    Afinal o float era uma faca de dois gumes :D

    Muito obrigado!

    OBS: Ganhou um feed reader :)

    [Responder]

  54. Ha. em 30/10/2009 às 09:13

    Para ficar mais padronizado e arrancar esse hack chato da clear… não acha legal colocar um float na div=”tudo” (prefiro main exemplo) e no body, se poem margin:auto; pra ficar centralizado ??? se puder dar a opinião, favor!!! eu uso desse modo.

    [Responder]

  55. DIEGO em 05/11/2009 às 12:53

    Cara,
    este seu tutorial é perfeito!
    simples o objetivo!
    eu trabalho muito com float e nunca encontrei algo que solucionasse meu problema com estes floats

    Valeu Cara
    Obrigado

    Quanto ao POST do Adriel
    você já tentou colocar os div .menu .conteudo como display inline
    ja resolví alguns problemas desta forma
    até Mais

    [Responder]

  56. Maico em 17/11/2009 às 09:39

    Valeu mesmo cara!! Me ajudou muito hoje!

    [Responder]

  57. Wellington em 03/12/2009 às 11:26

    Ótimo post, bem explicativo.

    A primeira coisa que tentei fazer foi um float left em uma div e float right em outra, não ia alinhar nunca rsrs.

    [Responder]

  58. Alexandre Broggio em 11/12/2009 às 13:23

    Vlw mesmo pela dica era exatemante isso que estava procurando ^_^ Obrigado

    [Responder]

  59. Klício Silva em 03/01/2010 às 21:25

    Muito boas as dicas publicadas aqui friend!
    Estou com 8 meses estudando webdesign e ainda encontro muitas dúvidas o que é normal, mas o importante é que eu gosto do assunto e não vou desistir.
    Estou projetando o meu site o com certeza essas dicas vão ajudar bastante, já te add aos meus favoritos ae ;)

    Tive uma dúvida em relação ao html, como eu faço para incorporar o estilo, terei que incrementar com método de link juntado ao css?
    Se puder responder eu agradeço.

    [Responder]

  60. Alessandro em 04/03/2010 às 04:22

    Que essa página dure para todo sempre !

    EXTRAORDINÁRIO !

    O assunto discutido “Float” do CSS é de grande dificuldade no entendimento, mais nesse post parecia que estava-mos lendo o tuto com grande facilidade !

    Chamamos isso de Professor ou “Mestre”.

    Parabéns e Sucesso!

    [Responder]

  61. A maneira certa de usar a propriedade Float no CSS | Richard Barros - Blog e Portfolio em 04/03/2010 às 12:32 - Pingback

    [...] Confira também este link com vários macetes para dominar a propriedade Float. Leia Também…Economizando código no CSS: Margin, Border e PaddingTabela de compatibilidade CSS [...]

  62. Vitor Melo em 05/03/2010 às 09:07

    Uma técnica que costumo utilizar é a usar o atributo: overflow: auto; na div de conteúdo, sendo assim, ela automaticamente irá englobar as outras.

    [Responder]

RSS feed for comments on this post. TrackBack URL

Deixe um comentário

192 Assinantes Assine o FEED