W3docs

Tag HTML <img>

Aprenda a tag HTML <img>: src e alt, srcset/sizes responsivo, lazy loading, width/height para CLS, formatos de imagem e fallbacks de erro.

A tag <img> é usada para inserir uma imagem em um documento HTML. A imagem em si não é inserida diretamente no documento; o navegador exibe uma imagem HTML a partir da fonte especificada na tag <img>.

Tag HTML img

Há dois atributos obrigatórios para um elemento <img>: src, que indica a fonte da imagem, e alt, que define um texto alternativo para a imagem.

Para tornar imagens HTML clicáveis, coloque a tag <img> dentro da tag <a>, que é usada para inserir um link de imagem HTML.

Sintaxe

A tag <img> é vazia, o que significa que a tag de fechamento não é necessária. Ela contém apenas atributos. Porém, em XHTML, a tag <img> deve ser auto-fechada (<img />).

Exemplo da tag HTML <img>:

Um exemplo de como usar a tag HTML <img>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h1>Heading </h1>
    <p>This is Aleq's photo</p>
    <img src="/uploads/media/default/0001/01/25acddb3da54207bc6beb5838f65f022feaa81d7.jpeg" alt="Aleq" width="200" height="185"/>
  </body>
</html>

Podemos usar CSS para alterar a aparência inicial de uma imagem.

Exemplo da tag <img> estilizada com CSS:

Como estilizar a tag HTML <img> usando as propriedades CSS vertical-align e padding?

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      img {
      border-radius: 50%;
      border: 4px dashed #077cb9;
      width: 300px;
      display: block;
      margin: 0 auto;
      }
    </style>
  </head>
  <body>
    <div>
     <img src="/uploads/media/default/0001/03/e91b0d7a957cadd0c3282d34e423ff0f97799a1d.jpeg" alt="Ararat mountain" width="256" height="256" />
    </div>
  </body>
</html>

Atributos Src e Alt

O atributo src (source) indica a fonte da imagem. Ele é obrigatório, pois define o caminho para a imagem. O valor do atributo src pode ser o nome do arquivo ou sua URL.

O atributo alt define um nome alternativo para a imagem. Ele também é obrigatório para a tag <img>. Seu valor é um texto descritivo exibido no navegador antes de a imagem ser carregada ou caso ela não consiga ser carregada.

Imagens decorativas vs. imagens significativas

Se alt deve ter texto depende da finalidade da imagem:

  • Imagens significativas (foto de produto, gráfico, logotipo que transmite informação) precisam de um alt curto e descritivo que comunique a mesma informação que a imagem transmite. Descreva o que ela mostra, não "imagem de".
  • Imagens decorativas (bordas, espaçadores, elementos visuais que nada acrescentam ao conteúdo) devem usar um alt="" vazio. Isso instrui os leitores de tela a ignorar a imagem. Não omita o atributo alt por completo — um alt ausente faz com que alguns leitores de tela anunciem o nome do arquivo.
<!-- Meaningful: describe the content -->
<img src="ararat.jpg" alt="Snow-capped Mount Ararat at sunrise" />

<!-- Decorative: empty alt so assistive tech skips it -->
<img src="divider.png" alt="" />
Dica

Para imagens significativas, inclua palavras-chave relevantes no texto alternativo onde se encaixem naturalmente. Um texto alt preciso beneficia tanto a acessibilidade quanto o posicionamento da imagem nos mecanismos de busca.

Usando "data:image/[type];base64,[base64-string]" para o atributo src

O formato data:image/[type];base64,[base64-string] pode ser usado como valor do atributo src de uma tag img para exibir uma imagem diretamente do código HTML, sem precisar carregá-la de um arquivo externo.

Veja um exemplo de como usar esse formato para exibir uma imagem em uma tag img:

Usando "data:image/[type];base64,[base64-string]" para o atributo src

<img
  src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
  alt="Tiny base64-encoded sample image"
  width="5"
  height="5">

Neste exemplo, image/png especifica o tipo MIME da imagem, e a longa string após base64, é o dado real da imagem codificado em base64. A string acima é uma PNG 5×5 completa (embora pequena).

Observe que o uso de imagens codificadas em base64 pode aumentar o tamanho do arquivo HTML e retardar o carregamento da página. Em geral, recomenda-se usar esse formato para imagens ou ícones pequenos, e arquivos externos para imagens maiores.

Exemplo da tag HTML <img> com os atributos src e alt:

Um exemplo da tag img com os atributos src e alt

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <img src="/uploads/media/default/0001/03/01cc5ccf0ce755075e468cc651f27c354e1b032e.jpeg" alt="Paris" width="256" height="256" />
  </body>
</html>

Por que definir width e height

Sempre defina os atributos width e height (em pixels, sem unidades) para corresponder ao tamanho intrínseco da imagem. Isso permite que o navegador calcule a proporção da imagem e reserve o espaço correto antes que o arquivo termine de ser baixado. Sem esses atributos, a página é renderizada primeiro sem espaço para a imagem e depois salta quando ela chega — uma experiência ruim que prejudica o Cumulative Layout Shift (CLS), uma das Core Web Vitals do Google.

<!-- Browser reserves a 4:3 box immediately, so no layout shift -->
<img src="photo.jpg" alt="Mountain view" width="800" height="600">

Você ainda pode redimensionar a imagem com CSS. Um padrão comum e seguro é definir os atributos width e height para a proporção e depois deixar o CSS torná-la fluida:

img {
  height: auto;   /* preserve aspect ratio */
  max-width: 100%; /* never overflow its container */
}

Os atributos loading e decoding

O atributo loading adia o carregamento de imagens (e iframes) até que o recurso esteja próximo de ser exibido. É um recurso padrão suportado por todos os navegadores modernos.

Valores suportados para o atributo loading:

  • lazy — adia o carregamento até que a imagem alcance um limite de distância do viewport. Use para imagens fora da tela / abaixo da dobra.
  • eager (o padrão) — carrega o recurso imediatamente.
<img src="defer.png" loading="lazy" alt="Gallery thumbnail" width="500" height="400">
Aviso

Não aplique lazy loading à sua imagem mais importante acima da dobra (frequentemente o elemento Largest Contentful Paint, ou LCP). O lazy loading atrasa sua requisição e torna a página mais lenta. Para essa imagem, use loading="eager" ou simplesmente omita o atributo.

O atributo relacionado decoding indica ao navegador como deve decodificar a imagem. decoding="async" permite que o navegador decodifique a imagem fora da thread principal, sem bloquear a renderização do conteúdo ao redor:

<img src="photo.jpg" alt="Landscape" width="800" height="600"
     loading="lazy" decoding="async">

O lazy loading adia o carregamento de recursos até que sejam necessários, em vez de carregar tudo antecipadamente. Isso melhora o desempenho e reduz o consumo desnecessário de dados no dispositivo do usuário.

Imagens responsivas com srcset e sizes

Uma única imagem de tamanho fixo ou desperdiça largura de banda em telas pequenas ou parece borrada em telas grandes. Os atributos srcset e sizes permitem que o navegador escolha o melhor arquivo para o tamanho de tela e a densidade de pixels do dispositivo, enquanto você mantém um único elemento <img>.

  • srcset lista os arquivos de imagem candidatos, cada um marcado com um descritor de largura (a largura real da imagem em pixels, ex.: 480w).
  • sizes informa ao navegador qual será a largura de exibição da imagem em diferentes breakpoints, para que ele possa escolher antes de o layout ser calculado.
<img
  src="photo-800.jpg"
  srcset="photo-480.jpg 480w,
          photo-800.jpg 800w,
          photo-1200.jpg 1200w"
  sizes="(max-width: 600px) 100vw,
         (max-width: 1000px) 50vw,
         800px"
  alt="Coastline at sunset"
  width="800" height="600">

Aqui o navegador lê sizes, calcula quantos pixels CSS a imagem precisa, multiplica pela proporção de pixels do dispositivo e baixa a correspondência mais próxima do srcset. O src simples permanece como fallback para navegadores que não suportam srcset.

Quando você precisa servir recortes diferentes para layouts diferentes (direcionamento de arte) ou oferecer formatos modernos com fallback (como AVIF/WebP com backup em JPEG), use o elemento <picture>.

Formatos de Imagem Suportados

Os formatos de arquivo de imagem são meios padronizados de organizar e armazenar imagens digitais. Um formato de arquivo de imagem pode armazenar dados em formato não comprimido, em formato comprimido (que pode ser com ou sem perdas) ou em formato vetorial. (Wikipedia).

Cada agente de usuário suporta diferentes formatos de imagem. Veja a lista dos formatos de imagem comuns:

AbreviaçãoFormato de arquivoTipo MIMEExtensão(ões) de arquivoCompatibilidade com navegadores
APNGAnimated Portable Network Graphicsimage/apng.apngChrome, Edge, Firefox, Opera, Safari
AVIFAV1 Image File Formatimage/avif.avifChrome 85+, Firefox 93+, Safari 16+, Opera
GIFGraphics Interchange Formatimage/gif.gifChrome, Edge, Firefox, Opera, Safari
ICOMicrosoft Iconimage/x-icon.ico, .curChrome, Edge, Firefox, Opera, Safari
JPEGJoint Photographic Expert Group imageimage/jpeg.jpg, .jpeg, .jfif, .pjpeg, .pjpChrome, Edge, Firefox, Opera, Safari
PNGPortable Network Graphicsimage/png.pngChrome, Edge, Firefox, Opera, Safari
SVGScalable Vector Graphicsimage/svg+xml.svgChrome, Edge, Firefox, Opera, Safari
WebPWeb Picture formatimage/webp.webpChrome, Edge, Firefox, Opera, Safari 14+

JPEG e PNG são universalmente suportados e continuam sendo as opções mais seguras. WebP e AVIF são formatos modernos que produzem arquivos notavelmente menores com qualidade similar — AVIF geralmente comprime melhor, WebP tem o suporte mais amplo. Como alguns navegadores mais antigos ainda não suportam AVIF, sirva esses formatos por meio do elemento <picture> com um fallback em JPEG ou PNG, em vez de colocá-los diretamente em <img src>.

Erros de Carregamento de Imagem

Podem ocorrer erros durante o carregamento de uma imagem. Se um manipulador de evento onerror tiver sido definido para o evento de erro, esse manipulador será chamado. Veja as situações em que isso pode acontecer:

  • O atributo src está vazio ("") ou é null.
  • A URL do src e a URL da página em que o usuário se encontra são iguais.
  • Alguma corrupção da imagem impede que ela seja carregada.
  • Os metadados da imagem estão corrompidos de forma a tornar impossível recuperar suas dimensões, e nenhuma dimensão está especificada nos atributos da tag <img>.
  • O formato não é suportado pelo agente de usuário.

Você pode ouvir esse evento error com o atributo onerror e substituir por uma imagem de fallback, para que os usuários vejam um placeholder em vez de um ícone de imagem quebrada:

<img
  src="profile.jpg"
  alt="User profile photo"
  width="200" height="200"
  onerror="this.onerror=null; this.src='fallback.png';">

Definir this.onerror=null primeiro é importante: remove o manipulador antes de alterar src, para que, se a imagem de fallback também falhar ao carregar, o manipulador não seja acionado novamente e não cause um loop infinito.

Atributos

Estes são os atributos atuais e padrões do elemento <img>. Os atributos obsoletos estão listados separadamente abaixo.

AtributoValorDescrição
alttextoDefine o texto alternativo para a imagem. Use alt="" para imagens puramente decorativas.
crossoriginanonymous | use-credentialsDefine se CORS é usado ao carregar a imagem. Imagens carregadas via CORS podem ser usadas no elemento <canvas> sem limitar sua funcionalidade.
decodingsync | async | autoIndica ao navegador como deve decodificar a imagem. async decodifica fora da thread principal.
heightpixelsDefine a altura da imagem. Defina junto com width para reservar espaço e evitar mudança de layout.
ismapismapEspecifica que o conteúdo da tag é um mapa de imagem do lado do servidor.
loadingeager | lazyControla se a imagem é carregada imediatamente ou adiada até próxima ao viewport.
sizescondições de mídia + comprimentosInforma ao navegador a largura de exibição da imagem por breakpoint, usado junto com srcset.
srcURLDefine a fonte da imagem.
srcsetURL + descritoresUma lista separada por vírgulas de imagens candidatas e seus descritores de largura (w) ou densidade (x).
usemap#mapnameEspecifica um link para o elemento <map>, que contém as coordenadas para o mapa de imagem do lado do cliente.
widthpixelsDefine a largura da imagem. Defina junto com height para reservar espaço e evitar mudança de layout.

A tag <img> também suporta os Atributos Globais e os Atributos de Evento.

Atributos Obsoletos

Esses atributos são obsoletos no HTML5. Use as alternativas CSS.

AtributoValoresDescriçãoAlternativa
alignleft right top bottom middleDefine o alinhamento da imagem em relação aos elementos ao redor. Centraliza a imagem HTML em relação aos elementos ao redor.As propriedades CSS float e/ou vertical-align.
borderpixelsDefine a largura da borda ao redor da imagem.A propriedade CSS border.
hspaceA propriedade CSS margin.
nameEspecifica um nome para o elemento.O atributo id.
vspacepixelsDefine espaços no topo e na parte inferior da imagem.Use a propriedade CSS margin.

Prática

Prática
Qual é a forma correta de marcar uma imagem puramente decorativa para que os leitores de tela a ignorem?
Qual é a forma correta de marcar uma imagem puramente decorativa para que os leitores de tela a ignorem?
Was this page helpful?