Menu

Como centralizar uma imagem no HTML e no CSS

Um <img> é inline, então se centraliza como texto: text-align: center no pai. Ou transforme a imagem em bloco com margin: 0 auto, ou centralize com flexbox ou grid, inclusive na vertical. Cada método roda ao vivo e mede o resultado.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

A resposta rápida: text-align no pai

Um <img> é um elemento inline: ele fica em uma linha de texto como uma palavra. Então você o centraliza do mesmo jeito que centraliza texto, com text-align: center no pai:

O estilo vai na div, não na imagem. Colocar text-align: center no próprio <img> não faz nada, porque a imagem não tem texto dentro para alinhar.

Método 2: display block e margin auto

Se você prefere estilizar a própria imagem, transforme-a em bloco e dê a ela margens laterais automáticas. O espaço livre dos dois lados é dividido por igual:

A imagem cinza tem margin: 0 auto, mas continua no começo da linha: margens auto não fazem nada em um elemento inline. display: block é a peça que falta. max-width: 100% com height: auto impede que a imagem transborde uma tela estreita, preservando as proporções.

Método 3: flexbox ou grid, inclusive na vertical

Para centralizar uma imagem nas duas direções dentro de uma caixa, dê uma altura à caixa e centralize o conteúdo com grid ou flexbox:

O equivalente em flexbox é display: flex; justify-content: center; align-items: center;. Nos dois casos, a caixa precisa de uma altura maior que a da imagem, senão não há espaço para centralizar. Os mesmos métodos centralizam qualquer elemento; a página de como centralizar uma div compara todos eles.

Centralizar uma imagem com legenda

Uma foto com legenda vai em um <figure>. Centralize o conteúdo da figure, e a imagem e a legenda se alinham juntas:

Várias imagens em uma linha centralizada

Uma fileira de logos ou miniaturas é trabalho para o flexbox. justify-content: center centraliza o grupo, gap dá o espaçamento e flex-wrap deixa quebrar linha em telas pequenas, mantendo tudo centralizado:

Qual método usar

SituaçãoUse
Uma imagem em um parágrafo ou em um bloco simplestext-align: center no pai
Você só pode estilizar a imagemdisplay: block; margin: 0 auto;
Centralizar nas duas direções dentro de uma caixaGrid place-items: center (ou flexbox) na caixa
Uma fileira de imagensFlexbox com justify-content: center
Uma imagem com legenda<figure> com text-align: center
Uma imagem de fundo, não conteúdobackground-position: center, veja background-image

Os jeitos antigos, e por que não usar

Você ainda vai encontrar isto em tutoriais antigos:

<!-- obsolete: do not use -->
<center><img src="logo.png" alt="Logo"></center>
<img src="logo.png" alt="Logo" align="center">

<center> e o atributo align foram removidos do HTML. Os navegadores ainda renderizam <center> por compatibilidade, e align="center" em uma imagem nem sequer a centraliza na horizontal: os navegadores o tratam como um alinhamento vertical dentro da linha. Use um dos métodos CSS acima.

Erros comuns

  • text-align: center no <img>. Coloque no pai.
  • margin: 0 auto em uma imagem inline. Acrescente display: block.
  • Centralizar na vertical sem altura no pai. A caixa encolhe até o tamanho da imagem, sem espaço para centralizar.
  • float: center. Esse valor não existe. Floats só vão para um lado.
  • Esquecer o alt. Uma imagem centralizada continua precisando de texto alternativo; use alt="" só para imagens puramente decorativas.
  • Uma imagem esticada. Definir width e height no CSS com valores de proporção diferente a distorce. Defina um só e use height: auto, ou acrescente object-fit: cover.

Perguntas frequentes

Como centralizar uma imagem no HTML?

Coloque text-align: center no elemento que a contém, por exemplo <p style="text-align: center;"><img src="logo.png" alt="Logo"></p>. Uma imagem é inline por padrão, então se centraliza como uma palavra do texto.

Como centralizar uma imagem com margin auto?

Transforme a imagem em bloco primeiro: img { display: block; margin: 0 auto; }. Margens auto não centralizam elementos inline, e uma imagem é inline até você mudar isso.

Como centralizar uma imagem na vertical e na horizontal?

Transforme o contêiner em grid (ou flexbox) com uma altura: .box { display: grid; place-items: center; height: 300px; }. A imagem fica então no meio da caixa.

Posso usar a tag <center> ou align="center" para centralizar uma imagem?

Não. <center> e o atributo align em <img> estão obsoletos no HTML5. Os navegadores ainda renderizam <center> em páginas antigas, mas align="center" em uma imagem a alinha na vertical dentro da linha, não na horizontal. Use CSS.

Por que aparece um pequeno espaço embaixo da minha imagem centralizada?

Uma imagem inline fica apoiada na linha de base do texto, deixando espaço embaixo para as letras que descem. Defina display: block na imagem, ou vertical-align: middle, e o espaço some.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR