CSS – Centralizando conteúdo verticalmente

CSS – Centralizando conteúdo verticalmente

Como centralizar conteúdo verticalmente na página? Essa é uma dúvida comum e várias pessoas já me perguntaram se há alguma forma simples de se fazer.

Geralmente o que se quer é centralizar uma div ou imagem e é bastante comum ver esse tipo de layout em páginas de aviso, disclaimer e em páginas de sites “em construção”. Segue então uma solução que costumo usar:


.centralizado {
width: 600px;
height: 300px;
position: absolute;
top: 50%;
margin: -150px 0 0 0;
}

Entenda o que fizemos em cada uma das linhas:

width: 600px : configuramos a largura do elemento que queremos centralizar;
height: 600px : configuramos a altura do elemento que queremos centralizar;
position: absolute : deixamos o elemento posicionado absolutamente na página;
top: 50%; : posicionamos o topo do elemento no meio da página, verticalmente;
margin: -150px 0 0 0; : para compensar, colocamos uma margem superior com a metade da altura;

Pronto, basta adicionar a classe “centralizado” ao seu elemento e ele ficará posicionado no centro vertical da sua página.
E claro, você pode usar o mesmo princípio se quiser centralizar também na horizontal, basta fazer duas pequenas alterações no código, colocando a propriedade left e alterar a margem esquerda. Veja:

.centralizado {
width: 600px;
height: 300px;
position: absolute;
top: 50%;
left: 50%;
margin: -150px 0 0 -300px;
}

O que alteramos do código anterior:

left: 50% : posicionamos a borda esquerda do elemento no meio da página, horizontalmente;
margin: -150px 0 0 -300px : para compensar, colocamos uma margem esquerda com a metade da largura;

É isso aí, agora o elemento ficará posicionado bem no centro da página, horizontalmente e verticalmente. Veja aqui o exemplo publicado.

Você gostou deste post?

  • http://Seuwebsite yuri

    ae dom,
    parabéns pelo post…..sempre postando informações úteis!!

    []‘s

  • http://matheusmatos.com Matheus Matos

    Aew Dom!
    Não tem muita diferença entre centralizar horizontalmente e verticalmente não.. a lógica é a mesma! Só as pessoas que não conseguem pensar!

    Parabéns!

    Vlw
    Matheus Matos

  • http://www.andremoura.net/ André Moura de Andrade

    Muito bom a dica, eu estava procurando isso a um bom tempo.
    Pois vale lembrar que essa CLASS que criamos tem que estar dentro de uma DIV com “Position:Relative”

    Ao contrário não funciona…
    Vlw galera…

  • http://www.carlosfachini.hd1.com.br @carlosfachini

    Tambem pode ser feiro assim

    .centralizado {
    width: 600px;
    height: 300px;
    margin-left:auto;
    margin-right:auto;
    }

    Somente isso,com menos codigos ainda….

  • http://www.studioonix.com.br Guilherme

    @carlosfachini

    Olha amigo, se não me engano esse estilo que você supôs ai é para alinhar horizontalmente e não verticalmente.

  • http://profiles.google.com/ivan.zagoon Ivan Freitas Junior

    Então,
    para centralizar elementos faço de forma diferente, pois usando o position absolute podem cair elementos dependendo a resolução de tela, etc..
    Bem, vamos a prática.

    Alinhamento Horizontal:

    .elemento_pai{
    width:500px;
    height:500px;
    }
    .elemento_filho{
    width:200px;
    height:180px;
    margin:0 auto;
    }
    *também podemos usar o “text-align:center” no “elemento_pai”

    Alinhamento Vertical:

    .elemento_pai{
    width:500px;
    height:500px;
    display:table-cel;
    vertical-align:middle;
    }
    .elemento_filho{
    width:200px;
    height:180px;
    }

    Seguindo o tutorial acima.. , se o elemento a ser centralizado tiver 200px e o elemento_pai tiver, por exemplo, 600px, o elemento não será centralizado, pois terá uma distancia do topo de 50%, logo, 300px, e restará mais 300px abaixo. Tendo o elemento 200px. o resultado será 300px acima e 100px abaixo.. Ao fim não haverá centralização vertical.
    Acredito que a maneira que apresentei acima funcione bem.

    Ivan Freitas
    ActionPlus – Comunicação Visual e Web.

  • Anderson – Calebe Design

    galera e so usar a propriedade do css
    line-height
    ex: line-height: 40px;
    ele faz isso automaticamente

  • Hugo Júnior

    Leiam o título do post antes de falar besteira, é alinhamento VERTICAL, e
    para os mal informados margin:auto só funciona para alinhamento
    horizontal, e pro noobzinho ali line-height só aumenta o espaçamento
    entre as linhas, ou seja vai ter que ter um tamanho fixo, e a idéia é
    centralizar dinâmicamente.

    Quebrei muito a cabeça na epoca que precisei disso para um site fluido, e
    a solução mais viável que achei é exatamente como esta.

    Sucesso!

  • Pana

    Quando eu uso esses codigos ele fica no centro da página e se tem uma div pai, ele não obdece, como faço para ele ficar no centro de uma outra div?