W3docs

Imagens HTML

Aprenda a incorporar imagens com a tag img do HTML: src e alt, width/height para evitar saltos de layout, srcset e picture responsivos e lazy loading.

Para incorporar uma imagem a uma página web, use a tag <img>.

A tag <img> suporta vários atributos obrigatórios e opcionais, que fornecem informações adicionais sobre ela.

Sintaxe

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

Atributos Obrigatórios de Imagem - src e alt

O atributo src (source) especifica o nome ou a localização da imagem a ser exibida. Seu valor pode ser um caminho relativo (um arquivo em seu próprio projeto) ou uma URL absoluta (uma imagem hospedada em outro lugar).

Caminho relativo — a imagem está no seu projeto, junto ao arquivo HTML:

<img src="images/example.jpg" alt="A description of the image" />

URL absoluta — a imagem está hospedada em outro servidor:

<img src="https://www.example.com/images/example.jpg" alt="A description of the image" />

O atributo alt fornece um texto alternativo que é exibido caso a imagem não carregue (conexão lenta, caminho quebrado) e lido em voz alta por leitores de tela. Há dois casos:

  • Imagens significativas — forneça ao alt uma descrição curta e precisa do que a imagem transmite (alt="Gráfico de barras de vendas de 2024").
  • Imagens decorativas que não acrescentam nada ao conteúdo — use alt="" vazio. Os leitores de tela então ignoram a imagem em vez de anunciar um nome de arquivo sem sentido.

Sempre inclua o atributo. Omitir alt completamente é diferente de alt="" e é sinalizado como um erro de acessibilidade.

Nota: o comportamento de dica ao passar o cursor é controlado pelo atributo title, não por alt.

A sintaxe da tag <img> com os atributos obrigatórios src e alt ficará assim:

Exemplo de Imagem HTML

<img src="example.jpg" alt="HTML tutorial" />
Dica

Use o atributo alt para todas as imagens, fornecendo uma descrição clara e concisa do conteúdo da imagem, o que melhora a acessibilidade e ajuda os mecanismos de busca a entender sua página.

Atributos de Imagem Recomendados - width e height

Sempre defina os atributos width e height em um <img>. Eles informam ao navegador a proporção de aspecto da imagem antes que o arquivo seja baixado, para que ele possa reservar exatamente o espaço certo no layout desde o início.

Sem eles, a página é reorganizada assim que cada imagem chega — textos e outros elementos se deslocam para abrir espaço. Esse salto visual é chamado de Cumulative Layout Shift (CLS), um dos Core Web Vitals do Google e uma fonte comum de cliques acidentais. Fornecer as dimensões evita isso.

Exemplo de Imagem HTML

<img src="https://www.example.com/images/example.jpg" alt="HTML tutorial" width="200" height="120" />

Os atributos recebem números de pixels sem unidade (width="200", não width="200px"). Você ainda pode redimensionar a imagem com CSS — o navegador usa os valores dos atributos apenas para calcular a proporção de aspecto e evitar o salto de layout.

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

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h1>Place for your heading </h1>
    <p>This is Aleq's photo</p>
    <img src="https://api.w3docs.com/uploads/media/default/0001/01/25acddb3da54207bc6beb5838f65f022feaa81d7.jpeg" alt="Aleq" width="200" height="185"/>
  </body>
</html>

Resultado

Aleq

Dica

Mantenha os atributos width e height para a proporção de aspecto e, em seguida, use as propriedades CSS max-width ou max-height para adicionar flexibilidade. Isso evita que imagens grandes transbordem o layout em telas pequenas.

Tornando imagens fluidas (responsivas)

Para evitar que uma imagem transborde seu contêiner em telas estreitas, aplique esta regra CSS. É a linha mais útil de CSS para imagens:

img {
  max-width: 100%;
  height: auto;
}

max-width: 100% limita a imagem renderizada à largura de seu contêiner, fazendo com que ela encolha em telas pequenas, mas nunca escale além de seu tamanho natural ficando borrada. height: auto permite que a altura acompanhe, para que a imagem mantenha suas proporções em vez de distorcer.

Isso funciona em conjunto com os atributos width/height: os atributos reservam o espaço da proporção de aspecto (sem CLS), enquanto o CSS torna o tamanho renderizado real fluido.

Flutuação de Imagens

Por padrão, um elemento <img> é inline, então ele fica na linha do texto. Você pode envolver texto ao redor de uma imagem com a propriedade CSS float — defina float: left ou float: right.

Float é uma técnica legada para esse tipo de layout. Para qualquer coisa além de simplesmente envolver um parágrafo ao redor de uma imagem — galerias, mídia lado a lado, cartões — use Flexbox ou CSS Grid. Eles oferecem alinhamento, espaçamentos e quebras sem as peculiaridades de limpeza que o float exige.

Para exibir a imagem à esquerda e o texto à direita, adicione float: left. Prefira uma classe CSS em vez de um atributo style inline para melhor manutenibilidade.

Exemplo da tag <img> e a propriedade CSS float para flutuar uma imagem para a esquerda:

Exemplo de uma Imagem com float|W3Docs

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h1>Place for your heading </h1>
    <img src="https://api.w3docs.com/uploads/media/default/0001/01/25acddb3da54207bc6beb5838f65f022feaa81d7.jpeg" alt="Aleq" width="200" height="185" style="float:left"/>
    <p>Aleq's photo</p>
  </body>
</html>

Adicionar o atributo style="float:right" à tag <img> posiciona o texto à esquerda e a imagem à direita.

Exemplo da tag <img> e a propriedade CSS float para flutuar uma imagem para a direita:

Exemplo com atributo float:right|W3Docs

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h1>Place for your heading </h1>
    <img src="https://api.w3docs.com/uploads/media/default/0001/01/25acddb3da54207bc6beb5838f65f022feaa81d7.jpeg" alt="Aleq" width="200" height="185" style="float:right"/>
    <p>Aleq's photo</p>
  </body>
</html>

Resultado

Aleq

Como a tag <a> é usada para inserir hiperlinks, basta colocar a imagem dentro da tag <a> para tornar sua imagem clicável.

Exemplo de uma imagem com hiperlink

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <a href="https://www.w3docs.com/" aria-label="w3docs homepage">
    <img src="https://api.w3docs.com/uploads/media/default/0001/01/0710cad7a1017902166203def268a0df2a5fd545.png" width="190" height="45" alt="logo"/>
    </a>
  </body>
</html>

Imagens responsivas: servindo o arquivo correto

Uma única imagem raramente se encaixa em todas as telas. Enviar uma foto de 2000px para um celular desperdiça largura de banda; enviar uma pequena para um display 4K fica borrada. O HTML oferece duas ferramentas para permitir que o navegador escolha o melhor arquivo para cada dispositivo.

srcset e sizes (mesma imagem, tamanhos diferentes)

Use os atributos srcset e sizes no <img> quando você tem a mesma imagem em várias larguras e quer que o navegador baixe a mais adequada.

<img
  src="photo-800.jpg"
  srcset="photo-400.jpg 400w, photo-800.jpg 800w, photo-1600.jpg 1600w"
  sizes="(max-width: 600px) 100vw, 50vw"
  width="800"
  height="600"
  alt="A scenic mountain lake"
/>
  • srcset lista os arquivos candidatos com suas larguras intrínsecas (400w significa que o arquivo tem 400px de largura).
  • sizes informa ao navegador quão larga a imagem será exibida — aqui, largura total do viewport abaixo de 600px, caso contrário, metade. O navegador combina isso com a densidade de pixels do dispositivo para escolher o menor arquivo que ainda pareça nítido.
  • src permanece como fallback para navegadores muito antigos.

O elemento picture (formatos diferentes ou direção de arte)

O elemento <picture> envolve vários elementos <source> e um <img>. O navegador percorre as sources de cima para baixo e usa a primeira que ele suporta, recorrendo ao <img> se nenhuma corresponder.

O uso clássico é servir um formato moderno e menor com um fallback garantido:

<picture>
  <source srcset="photo.avif" type="image/avif" />
  <source srcset="photo.webp" type="image/webp" />
  <img src="photo.jpg" alt="A scenic mountain lake" width="800" height="600" />
</picture>

Um navegador que entende AVIF baixa o arquivo AVIF; o que entende apenas WebP usa esse; todo o resto recorre ao JPEG. O <img> é obrigatório — ele fornece o texto alt e o fallback. Você também pode usar <picture> para direção de arte: exibindo uma imagem recortada em retrato em celulares e uma larga em desktops por meio de atributos media em cada <source>.

Lazy loading e decodificação

Por padrão, o navegador baixa avidamente todas as imagens da página. Para imagens muito abaixo da dobra, isso é esforço desperdiçado antecipadamente. Adicione loading="lazy" para que o navegador só busque a imagem quando ela se aproximar do viewport:

<img src="photo.jpg" alt="A scenic mountain lake" width="800" height="600" loading="lazy" />

Use loading="lazy" para imagens fora da tela, mas não para sua maior imagem acima da dobra (como um hero ou elemento LCP) — adiar essa imagem prejudica o carregamento percebido.

Você também pode adicionar decoding="async", que permite ao navegador decodificar a imagem fora da thread principal para não bloquear a renderização do conteúdo ao redor.

Qual formato de imagem escolher para a web

Existem três tipos principais de formatos de imagem suportados pelos navegadores:

  • GIF (Graphics Interchange Format)
  • JPG / JPEG (Joint Photographic Experts Group)
  • PNG (Portable Network Graphics)

GIF possui 256 cores únicas que tornam os gráficos simples e de carregamento rápido. Você pode usar GIF para pequenos desenhos, diagramas, gráficos, botões e outros elementos gráficos simples, que não impedirão que sua página carregue rapidamente.

JPEG é tipicamente um formato de 24 bits que combina luz vermelha, azul e verde para exibir milhões de cores. Assim, é usado principalmente para fotografias. Este formato oferece a flexibilidade de escolher quanto comprimir sua imagem — de 0% (compressão pesada) a 100% (sem compressão). Você pode escolher este formato se não se importar em sacrificar um pouco de qualidade para reduzir o tamanho. Evite usar JPEG para imagens com texto, formas ou grandes blocos de cores, pois quando o arquivo é comprimido, as linhas ficam borradas e as cores mudam.

O formato PNG combina os benefícios de JPEG e GIF: suporta milhões de cores e permite compressão sem perdas. Você pode usar PNG para gráficos web que exigem transparência, gráficos com muitas cores e gráficos complexos ou fotografias.

Formatos de imagem modernos

Dois formatos modernos agora são amplamente suportados nos navegadores e produzem arquivos menores e de carregamento mais rápido do que JPEG ou PNG.

WebP, desenvolvido pelo Google, suporta compressão lossless e lossy, bem como transparência e animação. Arquivos WebP são tipicamente 25–35% menores do que um JPEG ou PNG equivalente e são suportados por todos os principais navegadores atuais. (WebP - Wikipedia)

AVIF é um formato mais recente baseado no codec de vídeo AV1. Geralmente comprime ainda melhor do que WebP com a mesma qualidade visual e suporta uma ampla gama de cores, tornando-o excelente para fotografias. O suporte dos navegadores agora é amplo, mas ligeiramente atrás do WebP.

Como nem todo navegador de cada visitante suporta o formato mais recente, sirva-os com um elemento <picture> e um fallback JPEG ou PNG, conforme mostrado na seção de imagens responsivas acima. O navegador então escolhe o melhor formato que ele entende.

Informação

Você ainda pode encontrar formatos mais antigos como BPG e HEIC da Apple. Nenhum deles é suportado por navegadores web, portanto, evite-os para imagens na web — converta para WebP ou AVIF.

Prática

Prática
Selecione tudo que se aplica: quais afirmações sobre a tag img do HTML estão corretas?
Selecione tudo que se aplica: quais afirmações sobre a tag img do HTML estão corretas?
Prática
Por que você deve definir os atributos width e height em um elemento img?
Por que você deve definir os atributos width e height em um elemento img?
Prática
Qual atributo informa ao navegador para adiar o carregamento de uma imagem fora da tela até que seja necessária?
Qual atributo informa ao navegador para adiar o carregamento de uma imagem fora da tela até que seja necessária?
Prática
O que o atributo srcset permite ao navegador fazer?
O que o atributo srcset permite ao navegador fazer?
Was this page helpful?