CSS: Distância entre Colunas

edit 5 comentários
Desconto Progressivo Fnac | LEITOR DE BLU RAY | Queda de Preço Apple - Até R$ 500,00 de Desconto!


Recebo sempre emails com pedidos de ajuda sobre colunas, principalmente dúvidas de como ajustar as colunas de forma que fiquem com distância equilibrada. No artigo Float, Clear e as Colunas do Blogger passei uma idéia das propriedades "float" e "clear", mas acho que ainda falta um aprofundamento no assunto.



Sempre que desejamos 3 colunas, seja no Header, Main, Footer, etc, precisamos utilizar a propriedade "float".

Há 2 opções:
- Flutuar 2 colunas à esquerda e 1 coluna à direita;
- Flutuar as 3 colunas à esquerda.

Vamos ver a primeira opção

2 colunas com float: left e 1 coluna com float: right


Supondo que você tenha um container (Header, Main, Footer, etc) de 960px de largura. Dividindo esse valor por 3, terá o espaço de 320px para cada coluna. Usando esse valor, uma das colunas poderá escorregar para debaixo das outras, porque um mínimo padding, ou uma borda, que houver em qualquer elemento irá superar os 960px de largura. Ou, se a margin e o padding estiverem zerados, tudo ficará colado, sem espaço entre as colunas. Sendo assim, você precisa de um valor menor que 320px para cada uma das 3 colunas. E então surge o problema - a distância entre elas pode não ficar igual.

Isso ocorre porque 2 das colunas irão procurar a margem extrema da esquerda e 1 coluna irá procurar a margem extrema da direita do container.


Nessa situação, você deve aplicar uma margin para que a distância entre a primeira coluna e a segunda fique igual à distância entre a segunda e a terceira.

Como calcular a margem ideal?
Em nosso exemplo do container de 960px, vamos supor que você tenha escolhido a medida de 315px de largura para cada coluna e que exista uma borda de 1px ao redor das 3 colunas e nenhuma margin ou padding.

Temos:
315px de largura x 3 = 945px
1px de borda de cada lado de cada coluna = 6px
Total = 951px
Sobra: 960px - 951px = 9px (essa é a distância que está entre a segunda e a terceira coluna)

Se você dividir essa "sobra" por 2 e aplicar como margin entre a primeira e a segunda coluna você resolve o problema.

Exemplo do código para o outer-wrapper:

#outer-wrapper {
margin:0 auto;
width: 960px;}

#sidebar-left {
border: 1px solid #ccc;
float: left;
margin-right: 4.5px;
width: 315px;}

#main-wrapper {
border: 1px solid #ccc;
float: left;
width: 315px;}

#sidebar-right {
border: 1px solid #ccc;
float: right;
width: 315px;} 

Se você quiser as duas colunas dos extremos (primeira e terceira colunas) descoladas das margens do container, use a "sobra" para fazer esse distanciamento e recalcule a margem necessária entre a primeira e segunda colunas.



#outer-wrapper {
margin:0 auto;
width: 960px;}

#sidebar-left {
border: 1px solid #ccc;
float: left;
margin-right: 3px;
margin-left: 3px;
width: 315px;}

#main-wrapper {
border: 1px solid #ccc;
float: left;
width: 315px;}

#sidebar-right {
border: 1px solid #ccc;
margin-right: 3px;
float: right;
width: 315px;} 

As 3 colunas com float: left


Usando essa opção, as 3 colunas irão procurar a margem esquerda do container, sobrando um espaço na margem direita.


A "sobra" continua sendo de 9px, portanto precisamos dividir essa medida para distanciar uma coluna da outra. Aplicamos então margin-right na primeira coluna (distanciando a primeira da segunda) e margin-left na terceira coluna (distanciando a terceira da segunda):

#outer-wrapper {
margin:0 auto;
width: 960px;}

#sidebar-left {
border: 1px solid #ccc;
float: left;
margin-right: 4.5px;
width: 315px;}

#main-wrapper {
border: 1px solid #ccc;
float: left;
width: 315px;}

#sidebar-right {
border: 1px solid #ccc;
margin-left: 4.5px;
float: left;
width: 315px;} 

Comentários: 5

Victor Maio 10, 2010 4:34 PM

Muito complicado isso, prefiro os templantes de 2 colunas. Fica um pouco mais organizado em minha opnião, os de 3 colunas geralmente tem sidebars muito pequenas. Cada um e sua escolha xD

Otimo post Rô.

Marcelo R. Souza Maio 18, 2010 9:24 AM

Lembrando que quando você flutua um elemento dentro de um conteiner, ele automaticamente não existe mais dentro desse elemento, então você terá que aplicar clear:both para que o documento exista novamente para poder aplicar imagem de fundo e outras regras.

Rô Zanchetta Maio 20, 2010 3:35 PM

Obrigada, Victor! Isso vai do gosto de cada um. Templates com sidebar - post - sidebar continuam sendo bem populares, apesar de também não serem meus preferidos.

Bem lembrado, Marcelo!

Abraços!

Bleffe Julho 29, 2010 12:27 PM

Olá Roseli...

Como faço pra alinhar esse blog?

Não consigo fazer com que a distância entre as colunas fique uniforme e nem que os widgets fiquem centralizados....SOCORRO!! rs

Felipe Correia Dezembro 08, 2010 12:09 AM

Marcelo R. Souza,
Muito Obrigado pela dica ajudou , muito! o post esta de parabéns tbm!
Muito obrigado!

Postar um comentário

Para deixar o link da sua última postagem coloque este código:
<em><strong>Seu nome</strong> publicou um post sobre.. <a href="seu-link-do-último-post">Título do Post</a></em>

Quando você estiver testando algum hack e tiver dúvidas sobre ele, informe:
1 - O endereço do blog onde você está testando (ou instalando o hack);
2 - O navegador que você está usando (Firefox, Opera, IExplorer, etc).

Leia sobre a política de Comentários!

Eu gosto de conhecer meus leitores! Se você usar OpenId ou perfil fechado, assine o comentário com seu nome e me deixará muito contente!

Bem-vindos e obrigada pela visita!

Observação: somente um membro deste blog pode postar um comentário.

Feed dos Comentários