Tableless - Desenvolvimento inteligente com Padrões Web

06/12/2007
Artigos

Centralizando um objeto na Horizontal e Vertical com CSS

Objeto no centro da tela Uma das dúvidas mais freqüentes é esta: Como fazer para que um objeto fique no centro da tela usando css? A resposta está nos passos abaixo! Colocando a imagem: Neste exemplo vamos usar uma imagem, …

Por


Objeto no centro da tela

Uma das dúvidas mais freqüentes é esta: Como fazer para que um objeto fique no centro da tela usando css?
A resposta está nos passos abaixo!

Colocando a imagem:

Neste exemplo vamos usar uma imagem, mas você pode perfeitamente usar um div, o processo é o mesmo.
Coloque na imagem (ou no div) um nome de ID… Colocamos neste exemplo o ID com nome “centro”.

<img src=”imagem.gif” id=”centro” />

Veja o html deste passo.

Definindo as dimensões do objeto:

Agora, no css, defina as dimensões do objeto (imagem ou div).
Nossa imagem tem 100 x 100 px’s, então vamos definir no css que a largura será de 100px (width:100px;) e que a altura também será de 100px (height:100px;).

#centro {
width:100px;
height:100px;
}

Veja o html deste passo.

Alinhando:

Estamos quase no final, você pode perceber que o objeto está um pouco desalinhado do centro. Vamos agora posicioná-lo… É aqui começa o truque.
Defina para nosso objeto, uma posição absoluta (position:absolute;), ele deverá ficar a 50% de distância do topo (top:50%;) e 50% de distância do lado esquerdo do documento (left:50%;).
O css não usa o centro do objeto como referência para o posicionamento, mas sim as extremidades, portanto, o que ficará no centro depois deste código, será o canto esquerdo superior do objeto.

#centro {
width:100px;
height:100px;
position:absolute;
top:50%;
left:50%;
}

Veja o html deste passo.

O grande final:

Eis o truque para tirar a diferença, não é nada de outro mundo.
Você irá definir ao objeto duas margens negativas… a margem do topo (margin-top) e a margem da esquerda (margin-left). Na margem do topo, você simplesmente colocará um valor negativo, este valor será a metade da altura do objeto, neste caso, será -50px (margin-top:-50px;) e no lado esquerdo você fará a mesma coisa, mas o valor será a metade da largura do objeto, neste caso -50px (margin-left:-50px;).

#centro {
width:100px;
height:100px;
position:absolute;
top:50%;
left:50%;
margin-top:-50px;
margin-left:-50px;
}

Veja o html final.

Por Diego Eis

Diego Eis criou o Tableless para disseminar os padrões web no Brasil. Como consultor já treinou equipes de empresas como Nokia, Globo.com, Yahoo! e iG. É palestrante e empreendedor.

http://twitter.com/diegoeis/

Veja os outros posts de

  • http://conexebemconstrução ShypersCoder

    Muito bom, eu so iniciante em css, e eu tava precisando muito disso ai.
    brigado.

  • http://eduardobcastro.freespaces.com/ Eduardo

    Muito bom! Simples e direto.

  • http://www.paralelo22.com.br Leandro Facchinetti

    Essa é uma boa técnica. Há outra solução na qual o tamanho do elemento não precise ser conhecido previamente?
    Outra coisa: você notou que todos os seus pontos-e-vírgula-fecha-parêntese se tornaram smileys com olhinhos piscantes?

  • Anderson Bispo

    Leandro, nesse site fala sobre centralização e dá uma dica de como fazer quando o tamanho do elemento não for conhecido previamente, onde tem “When you don’t know the width”. Espero que ajude.

    Abraço!

  • Anderson Bispo
  • http://www.deziner.com.br Vinicius

    E em relacao a tao famosa duvida de centralizar a imagem dentro de uma DIV, como fazer ? Abraço

  • http://www.paralelo22.com.br Leandro Facchinetti

    Anderson, ajudou, sim. Obrigado.
    E desculpa a demora em responder, é que seu comentário só apareceu no feed agora.

  • Daniel

    Em casa ficou perfeito no firefox, porém no trabalho no IE7 a página fica com sobras, barras de rolagem na vertical e horizontal, e o objeto centralizado em relação a esse tamanho, então a página inicial torta.

  • Raphael Azeredo

    Valeu excelente tutorial, obrigado :)

  • http://gebexd.blogspot.com Gabriel Tadra

    http://www.plugmasters.com.br/sys/materias/600/1/Centralizar-a-Pagina-na-horizontal-e-vertical

    Copiadores de plantão???

    Bom tutorial :}

    uma dúvida:
    Tipo, o tamanho da minha imagem é 375 x 104

    se eu dividir 375/2 = 187,5

    nesse caso eu arredondei pra menos.

    seria o certo?

  • Priscilla

    Muito bom!
    Obrigada :)

  • aryel gomes

    na minha opinião objeto é aquilo que tudo nos vemos!

  • Décio

    Valeu pelo tutô! Muito simples e eficiente!

  • Lorena

    Perfeito

    nem acredito que era tão simples!

    Obrigada!

  • http://www.webstandards.blog.br/css/hack-para-safari-e-google-chrome/ Lincoln

    realmente … a técnica de Alinhamento vertical e horizontal com CSS ajuda muito. Usei essa muito para fazer popups com jQuery com mensagens do site.

  • Pingback: links for 2009-08-03 « Minesa IT

  • Pingback: Guia para estudar CSS | import Zeh.Design

  • Deivis

    Cara, ate que fim encontrei uma boa explanação sobre o assunto, eu tinha uma baita dificuldade, mas matou minha duvida.
    Obrigado

  • Geidivan

    Perfeito! Resolveu muito dos meus problemas!

  • Francisco Leal

    O que eu procurava, aliás o site tem me ajudado bastante no meu aprendizado em css. obrigado por compartilhar.! obs: O tabeless.com é bem conciso, objetivo.. acho particularmente a navegação bem facil… o layout agradeavél.

  • http://animehobby.com.br Ícaro Pablo

    Teria como centralizar várias imgs com larguras diferentes?

  • http://b2-estudio.blogspot.com/ Bruno

    Oi,

    Eu segui passo a passo, mais quando apliquei a minha pagina web com o width:960px e o height:700px; minha tela não ficou no centro. Ficou totalmente desalinhada.

  • BHSP

    Mais para que se usa o (Position:Absolute;) neste caso o objeto terá uma posição fixa na página. Na Vertical não entendi muito bem, mais para alinhar na Horizontal eu coloco assim:

    Ex: #ctr-h {margin-left:auto; margin-right:auto;}

    E funciona do jeitinho que eu quero, Mais Vlw a explicação vou praticar aqui Forte abraço.

  • valdiclecio

    como fazer para centraliza uma diva dentro de um laude no fireworks usando adobe dreamweaver cs5

    aki quando eu insiro uma div no laude fica certo ne uma certa resolução mas quando diminuo a resolução fica fora do laude meu Email= orkut