Centralizando floats com largura variável e um bug no IE 7

Trabalhar com elementos com float nas páginas é uma tarefa bastante comum. A idéia do float, como podemos deduzir dos seus valores possíveis, é posicionar objetos à esquerda ou à direita. Porém, nem sempre temos esta intenção ao usar floats.

Um caso bastante típico é quando usamos float apenas para poder colocar altura, largura ou margens verticais num elemento. Como o float força um display: block, podemos aplicar height, width e padding (vertical) neste elemento.

Num segundo cenário, já encontrei casos em que tenho um elemento de largura variável e não previsível e, que tenho também de deixá-lo centralizado na página ou em relação a um outro elemento pai. Este é um dos casos onde precisamos centralizar floats.

Eu já conhecia esta técnica aqui do Stu Nicholls em seu site CSSplay. Já usei este método e sei que ele funciona bem. Tudo bem que ele usa uma tag del (pode ser uma ins também) sem necessidade… mas, com comentários condicionais podemos esconder ela dos navegadores atualizados e deixá-la visível apenas para o Internet Explorer (sim, como já era de se imaginar, a tag é necessária apenas para o IE).

Lendo o doggdot.us hoje, achei uma referência para outro artigo que descreve uma segunda técnica, mais simples e objetiva. Testei o exemplo disponível e funcionou no Firefox, IE 7 e 6. Apenas no IE 7 é que surgiu a barra de rolagem horizontal. Nada muito complicado de se resolver.

O IE 7 tem um bug (certo, muitos bugs, mas vamos falar só desse) que um elemento pai com overflow: hidden e um filho com position: relative, faz com que o efeito do overflow não funcione. Se você adicionar position: relative no pai também, terá o resultado esperado. Acabei de deixar um comentário ao autor sobre esta correção. :D Veja mais sobre este bug.

Ficam aí as dicas para quando você precisa centralizar elementos com float ou se deparar com este bug do IE 7, bom proveito! =)

Referências
Centralizando floats – Método simples
Centralizando floats – Método do Stu Nicholls
Comentários condicionais (conditional comments)
Bug do IE 7 com overflow e position

2 comentários »

  1. Igor Negrão disse,

    23/10/2008 @ 17:51

    Ae… muito obrigado pela dica do OVERFLOW no IE7, me ajudou muito.

    é por isso que eu adoro a internet, tem sempre uma pessoa inteligente pra colaborar.

    valeu!

  2. marilise rossetti disse,

    15/07/2009 @ 16:43

    Olá,

    Obrigada pelas informações! Consegui posicionar meu carousel no ie7 com o position: relative, acesso minha página no ie 7 e está td normal, qdo mudo de guia no navegador e volto para a minha pagina o carousel desestrutura de novo (overlap das imagens), o q pode estar acontecendo?

    Grata

Deixe seu comentário

* campos obrigatórios