Como centralizar uma div: todos os métodos lado a lado

Como centralizar uma div

Como centralizar uma div: 7 métodos CSS, ao vivo e comparados | We.Inc

Centralize uma div na horizontal, na vertical ou nos dois sentidos. Alterne entre flexbox, grid, margin auto, posicionamento absoluto, text-align e line-height em uma mesma caixa, veja o CSS e quando cada um falha.

Centralizar uma div nos dois sentidos leva duas linhas no pai: display: grid; place-items: center; ou display: flex com justify-content: center e align-items: center. Só na horizontal, dê uma largura à div e margin-inline: auto. O pai precisa de uma altura maior que a do filho para a centralização vertical aparecer.

A versão curta

Escolha um método e um eixo e a caixa da demo se move, o CSS do pai e do filho é escrito por extenso e uma nota diz onde aquele método falha. São sete técnicas, incluindo as antigas que você ainda vai encontrar em código existente, seguidas de uma tabela de decisão para escolher uma.

Perguntas frequentes

Por que minha div não centraliza na vertical?

Normalmente porque o pai não tem altura sobrando. Um bloco só tem a altura do seu conteúdo, então não há espaço onde centralizar. Dê ao pai uma height, uma min-height (por exemplo 100dvh para tela cheia) ou deixe que ele se estique dentro de um layout flex ou grid mais alto.

Qual é o jeito mais curto de centralizar uma div?

display: grid; place-items: center; no pai. Isso centraliza o filho nos dois sentidos, funciona para qualquer tamanho de filho e não precisa de largura nem altura no filho.

Como centralizo uma div na página inteira?

Faça o body ou um contêiner ter pelo menos a altura do viewport: min-height: 100dvh; display: grid; place-items: center;. Para um modal que flutua sobre a página, use position: fixed; inset: 0; margin: auto; com largura e altura definidas, ou o elemento nativo dialog, que se centraliza sozinho.

margin: 0 auto ainda funciona?

Sim, para centralizar na horizontal um bloco com largura menor que a do pai. margin-inline: auto é a forma lógica moderna e não mexe nas margens de cima e de baixo.

Como centralizo uma div no Tailwind?

Coloque flex items-center justify-center, ou grid place-items-center, no pai e dê a ele uma altura como h-screen ou min-h-dvh. Para um bloco centralizado na horizontal, adicione mx-auto e uma largura ou max-width ao filho.

Duas direções, dois problemas diferentes

Quando os métodos antigos ainda fazem sentido

Tabela de decisão

Qual método para qual tarefa

Receitas prontas para copiar

Um card no meio da tela

Em uma página real, use min-height: 100dvh no contêiner. O quadro aqui usa uma altura fixa para caber.

Botão de play sobre uma miniatura

inset: 0 com margin: auto centraliza um filho de tamanho fixo sem transform, então as bordas ficam nítidas.

Um item centralizado, os outros nas bordas

Margens auto em um filho de flex ocupam todo o espaço livre, então o logo fica no meio da barra enquanto o menu e o carrinho ficam nas laterais.

A centralização vertical exige que o pai seja mais alto que o filho. Com flex-direction: column as duas propriedades trocam de eixo.

Vários filhos se empilham em linhas, cada um centralizado na sua própria linha, então eles se espalham na vertical em vez de ficarem juntos. Envolva-os em um único elemento.

No fluxo normal de blocos ele só centraliza na horizontal, e só quando o filho tem largura menor que a do pai. Dentro de um pai flex ou grid, margin: auto centraliza nos dois sentidos.

O filho sai do fluxo, então o pai deixa de crescer ao redor dele. Deslocamentos de meio pixel podem borrar o texto, e o transform faz do filho um bloco de contenção e um contexto de empilhamento.

O filho precisa de um tamanho explícito no eixo centralizado. Sem ele, inset: 0 simplesmente estica o filho para preencher o pai. Larguras fit-content também funcionam nos navegadores atuais.

Só move conteúdo inline: texto, imagens, caixas inline-block. Uma div de bloco normal o ignora, e o texto dentro do filho também herda a centralização.

Quebra assim que o texto passa para uma segunda linha, e a altura precisa ser fixada no código duas vezes. Serve para um selo ou botão de uma linha, mais nada.

Teste todos os métodos de centralização

Eixo

Centralizar

Método

Pai (tracejado) e filho (azul)

Caixa filha

Este método não consegue centralizar nesse eixo. A caixa mostra onde ela fica sem ele.

Copiar CSS

Copiar classes

Quando falha:

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site