Técnicas de Centralização Horizontal e Vertical com CSS

1. Posicionamento Absoluto com margin: auto

Ao aplicar margin: auto, o elemento se centraliza apenas horizontalmente por padrão. Para obter o efeito vertical, é necessário definir o posicionamento como absoluto, esticar as coordenadas para zero e garantir que o contêiner pai tenha posicionamento relativo.

<div class="container">
    <div class="box"></div>
</div>
.container {
    position: relative;
    width: 500px;
    height: 100px;
    background-color: #f0f0f0;
}
.box {
    position: absolute;
    inset: 0; /* Substitui top, right, bottom e left com valor 0 */
    width: 120px;
    height: 50px;
    margin: auto;
    background-color: #3498db;
}

2. Layout Flexível (Flexbox)

A maneira mais moderna e direta de centralizar itens é utilizando o Flexbox no elemento pai, distribuindo os eixos principal e transversal.

.container {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 500px;
    height: 100px;
    background-color: #f0f0f0;
}
.box {
    width: 120px;
    height: 50px;
    background-color: #e74c3c;
}

3. Posicionamento Absoluto com Deslocamento

Com o elemento posicionado de forma absoluta, diferentes estratégias podem ser aplicadas dependendo do conhecimento prévio das suas dimensões.

Dimensões Conhecidas: Margens Negativas

Ao definir top e left em 50%, o canto superior esquerdo do elemento ficará no centro do pai. Aplicar margens negativas equivalentes à metade da largura e altura corrige o deslocamento visual.

.box {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 50px;
    margin-top: -25px;
    margin-left: -60px;
    background-color: #2ecc71;
}

Dimensões Conhecidas: Função calc()

Uma alternativa mais semântica é utliizar a função nativa do CSS para subtrair a metade das dimensões diretamente nas propriedades de deslocamento.

.box {
    position: absolute;
    top: calc(50% - 25px);
    left: calc(50% - 60px);
    width: 120px;
    height: 50px;
    background-color: #9b59b6;
}

Dimensões Desconhecidas: Transformação

Se o tamanho do elemento for dinâmico, a propriedade transform com translate é a solução ideal, pois os valores percentuais da translação sempre referenciam o próprio tamanho do elemento alvo.

.box {
    position: absolute;
    top: 50%;
    left: 50%;
    background-color: #f1c40f;
    transform: translate(-50%, -50%);
}

4. Alinhamento de Texto e Altura de Linha

Para centralizar uma única linha de texto tanto horizontal quanto verticalmente, a combinação de text-align e line-height (igual à altura do contêiner) é bastante eficaz.

<div class="wrapper">
    <div class="text-content">Texto Centralizado</div>
</div>
.wrapper {
    width: 500px;
    height: 100px;
    background-color: #f0f0f0;
}
.text-content {
    line-height: 100px;
    text-align: center;
}

5. Layout de Grade (CSS Grid)

O Grid Layout oferece métodos robustos para centralização, seja aplicando propriedades no contêiner ou no item. Utilizar a propriedade abreviada place-items torna o código extremamente conciso.

Agrupando propriedades no contêiner pai:

<div class="grid-wrapper">
    <div class="grid-item">Conteúdo</div>
</div>
.grid-wrapper {
    display: grid;
    place-items: center; /* Atalho para align-items e justify-items */
    width: 500px;
    height: 100px;
    background-color: #f0f0f0;
}

Alternativamente, aplicando margin: auto no item filho dentro de um contêiner Grid:

.grid-item {
    margin: auto;
}

6. Tabela CSS (table-cell)

Uma técnica mais tradicional envolve emular o comportamento de uma célula de tabela com display: table-cell, permitindo o uso do vertical-align combinado com o alinhamento de texto.

.wrapper {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    width: 500px;
    height: 100px;
    background-color: #f0f0f0;
}
.inline-item {
    display: inline-block;
}

Tags: CSS Flexbox CSS Grid Posicionamento CSS Centralização CSS

Publicado em 10-14 13:23