Imagens decorativas, como gradientes de plano de fundo em botões ou imagens de plano de fundo em seções de conteúdo ou na página inteira, são de apresentação e devem ser aplicadas com CSS. Quando uma imagem adiciona contexto a um documento, ela é conteúdo e deve ser incorporada com HTML.
O principal método para incluir imagens é a tag
<img>
com o
atributo src
que faz referência a um recurso de imagem e o atributo alt
que descreve a imagem.
<img src="images/eve.png" alt="Eve">
O atributo srcset
em <img>
e o elemento <picture>
oferecem uma maneira de incluir várias origens de imagem com consultas de mídia associadas, cada uma com uma origem de imagem substituta, permitindo veicular o arquivo de imagem mais adequado com base na resolução do dispositivo, nos recursos do navegador e no tamanho da janela de visualização. O atributo srcset
permite fornecer várias versões de imagem com base na resolução e, junto com o atributo sizes
, no tamanho da janela de visualização do navegador.
<img src="images/eve.png" alt="Eve"
srcset="images/eve.png 400w, images/eve-xl.jpg 800w"
sizes="(max-width: 800px) 400px, 800px" />
Isso também pode ser feito com o elemento <picture>
, junto com os filhos <source>
, que usam um <img>
como fonte padrão.
<picture>
<source src="images/eve.png" media="(max-width: 800px)" />
<source src="images/eve-xl.jpg" />
<img src="images/eve.png" alt="Eve" />
</picture>
Além desses métodos de imagem responsiva HTML integrados, o HTML também permite melhorar o desempenho da renderização de imagens usando vários atributos. A tag
<img>
e, portanto, os botões gráficos de envio
<input type="image">
podem incluir atributos height
e width
para definir a proporção da imagem e
reduzir a mudança de layout do conteúdo. O atributo lazy
ativa o carregamento lento.
O HTML também aceita a inclusão de imagens SVG usando o
<svg>
diretamente, embora imagens SVG
com a extensão .svg
(ou como um
data-uri) possam ser incorporadas usando o
elemento <img>
.
No mínimo, cada imagem em primeiro plano precisa incluir os atributos src
e alt
.
O arquivo src
é o caminho e o nome do arquivo da imagem incorporada. O atributo src
é usado para fornecer o URL da imagem. Em seguida, o navegador busca
o recurso e o renderiza na página. Esse atributo é obrigatório para <img>
.
Sem ele, não há nada para renderizar.
O atributo alt
fornece um texto alternativo para a imagem, oferecendo uma descrição para quem não consegue ver a tela (como mecanismos de pesquisa e tecnologias assistivas, além de Alexa, Siri e Google Assistente). Ele pode ser exibido pelo navegador se a imagem não carregar. Além de usuários com redes lentas ou largura de banda limitada, o texto alt
é muito útil em e-mails HTML, já que muitos usuários bloqueiam imagens nos aplicativos de e-mail.
<img src="path/filename" alt="descriptive text" />
Se a imagem for do tipo SVG, inclua também
role="img"
,
necessário devido a VoiceOver do
VoiceOver.
<img src="switch.svg" alt="light switch" role="img" />
Escrever descrições de imagens alt
eficazes
Os atributos alt são curtos e concisos, fornecendo todas as informações relevantes que a imagem transmite e omitindo informações redundantes para outros conteúdos do documento ou que não são úteis. Ao escrever o texto, o tom precisa refletir o do site.
Para escrever um texto alternativo eficaz, imagine que você está lendo a página inteira para uma pessoa que não consegue vê-la. Ao usar o elemento semântico <img>
, os usuários de leitores de tela e bots são informados de que o elemento é uma imagem. É redundante incluir "Esta é uma imagem/captura de tela/foto de" no alt
. O usuário não precisa saber que há uma imagem, mas precisa saber quais informações ela transmite.
Normalmente, você não diria: "Esta é uma imagem granulada de um cachorro usando um chapéu vermelho". Em vez disso, você vai transmitir o que a imagem está transmitindo em relação ao contexto do restante do documento. O que você transmite muda dependendo do contexto e do conteúdo do texto ao redor.
Por exemplo, a foto de um cachorro é descrita de maneiras diferentes, dependendo do contexto. Se Fluffy for um avatar ao lado de uma avaliação da ração para cachorros Yuckymeat, alt="Fluffy"
será suficiente.
Se a foto fizer parte da página de adoção do Fluffy no site de um abrigo de animais, o público-alvo será o futuro tutor do cachorro. O texto precisa descrever as informações relevantes para um adotante que são transmitidas na imagem e não estão duplicadas no texto ao redor. Uma descrição mais longa, como
alt="Fluffy, a tri-color terrier with very short hair, with a tennis ball in her mouth"
é adequada. O texto de uma página de adoção geralmente inclui a espécie, a raça, a idade e o gênero do animal disponível para adoção. Portanto, não é necessário repetir essas informações no texto alternativo. Mas a biografia escrita do cachorro provavelmente não inclui comprimento do pelo, cores ou preferências de brinquedos.
É importante notar que não descrevemos a imagem por completo. O possível dono do cachorro não precisa saber se o animal está dentro ou fora de casa, ou que ele tem uma coleira vermelha e uma guia azul.
Ao usar imagens para iconografia, como o atributo alt
fornece o nome acessível, transmita o significado do ícone, não uma descrição da imagem.
Por exemplo, o atributo alt do ícone de lupa é search
. O ícone que parece uma casa tem home
como texto alternativo. A descrição do ícone de disquete de 5 polegadas é save
. Se houver dois ícones do Fluffy usados para indicar práticas recomendadas e antipadrões, o cachorro sorridente com uma boina verde poderá ter alt="good"
definido, enquanto o cachorro rosnando com uma boina vermelha poderá ler alt="bad"
. Use apenas iconografia padrão. Se você usar ícones não padrão, como o Fluffy bom e o ruim, inclua uma legenda e verifique se os ícones não são a única maneira de decifrar o significado dos elementos da interface.
Se a imagem for uma captura de tela ou um gráfico, escreva o que é aprendido com ela em vez de descrever a aparência. Embora uma imagem possa valer mais do que mil palavras, a descrição precisa transmitir de forma concisa tudo o que foi aprendido.
Omita informações que o usuário já conhece do contexto e que são informadas no conteúdo. Por exemplo, se você estiver em uma página de tutorial sobre
como mudar as configurações do navegador e a página for sobre clicar em ícones no navegador
Chrome, o URL da página na captura de tela não é importante. Limite o
alt
ao tema em questão: como mudar as configurações.
O alt
pode ser "O ícone de configurações está na barra de navegação abaixo do campo de pesquisa". Não inclua "captura de tela" ou "machinelearningworkshop", porque o usuário não precisa saber que é uma captura de tela nem onde o escritor técnico estava navegando quando escreveu as instruções. A
descrição da imagem é baseada no contexto de por que ela foi
incluída.
Se a captura de tela mostrar como encontrar o número da versão do navegador acessando
chrome://version/
, inclua o URL no conteúdo da página como instruções
e forneça uma string vazia como o atributo "alt", já que a imagem não fornece
informações que não estejam no texto ao redor.
Se a imagem não fornecer informações adicionais ou for meramente decorativa, o atributo ainda deve estar lá, assim como uma string vazia.
<img src="svg/magazine.svg" alt="" role="none" />
O site MachineLearningWorkshop.com tem sete imagens em primeiro plano, portanto, sete imagens com atributos alt: um interruptor de luz de easter egg, um ícone manual, duas fotos biográficas de Hal e Eve e três avatares de um liquidificador, um aspirador de pó e uma torradeira. A imagem em primeiro plano que parece uma revista é a única puramente decorativa. A página também tem duas imagens de plano de fundo. Essas imagens são decorativas e foram adicionadas com CSS. Portanto, elas são inacessíveis.
A revista, sendo puramente decorativa, tem um atributo alt
vazio e um
role
de none
porque a imagem é um SVG puramente de apresentação. Se for relevante, as imagens SVG devem incluir o role="img"
.
<img src="svg/magazine.svg" alt="" role="none" />
Há três avaliações na parte de baixo da página, cada uma com uma imagem do pôster. Normalmente, o texto alt
é o nome da pessoa na foto.
<img src="images/blender.svg" alt="Blendan Smooth" role="img" />
Em vez disso, como esta é uma página de piadas, transmita o que pode não ser aparente para usuários com baixa visão para que eles não percam o humor. Usamos a função original da máquina como alt
em vez do nome do personagem:
<img src="images/blender.svg" alt="blender" role="img" />
As fotos dos instrutores não são apenas avatares: são imagens biográficas e, portanto, recebem uma descrição mais detalhada.
Se fosse um site real, você daria uma descrição mínima da aparência do professor para que um possível estudante o reconhecesse ao entrar na sala de aula.
<img src="svg/hal.svg" role="img"
alt="Hal 9000; a camera lens containing a red dot that sometimes changes to yellow." />
Como este é um site de piadas, forneça as informações relevantes no contexto da piada:
<img src="svg/hal.svg" role="img"
alt="Hal 9000, the sentient AI computer from 2001: a Space Odyssey depicted as a camera lens with a red dot that changes to yellow when hovered." />
Se você estivesse lendo a página para um amigo por telefone, ele não se importaria com a aparência do ponto vermelho. Nesse caso, o histórico da referência do filme é importante.
Ao escrever um texto descritivo, considere quais informações a imagem transmite que são importantes e relevantes para o usuário e inclua isso. O conteúdo do atributo alt
de uma imagem varia de acordo com o contexto. Todas as informações transmitidas em uma imagem
que um usuário com visão pode acessar e que são relevantes para o contexto precisam ser transmitidas, nada mais. Seja breve, preciso e útil.
Os atributos src
e alt
são requisitos mínimos para imagens incorporadas. Há mais alguns atributos que precisamos discutir.
Imagens responsivas
Há uma infinidade de tamanhos de janela de visualização e resoluções de tela. Você não quer desperdiçar a largura de banda de um usuário de dispositivo móvel exibindo uma imagem larga o suficiente para um monitor de tela grande, mas talvez queira exibir imagens de resolução mais alta para dispositivos pequenos que têm quatro vezes a resolução de tela normal. Há algumas maneiras de veicular imagens diferentes com base no tamanho da janela de visualização e na resolução da tela.
<img> srcset
atributo
O atributo srcset
permite sugerir vários arquivos de imagem, com o navegador selecionando qual imagem solicitar com base em várias consultas de mídia, incluindo tamanho da janela de visualização e resolução da tela.
Pode haver um único atributo srcset
por elemento <img>
, mas esse srcset
pode ser vinculado a várias imagens. O atributo srcset
aceita uma lista de valores separados por vírgulas, cada um contendo o URL do recurso seguido por um espaço e por descritores para essa opção de imagem. Se um descritor de largura for usado, inclua também o atributo sizes
com uma consulta de mídia ou um tamanho de origem para cada opção srcset
, exceto a última. Vale a pena ler as seções de aprendizado sobre imagens responsivas com srcset
e sintaxes descritivas.
A imagem srcset
tem precedência sobre a imagem src
se houver uma correspondência.
<picture>
e <source>
Outro método para fornecer vários recursos e permitir que o navegador renderize o recurso mais adequado é com o elemento
<picture>
. O elemento <picture>
é um contêiner
para várias opções de imagem listadas em um número ilimitado de elementos <source>
e um único elemento <img>
obrigatório.
Os atributos de <source>
incluem srcset
, sizes
, media
, width
e height
.
O atributo srcset
é comum a img
, source
e link
, mas geralmente é implementado de maneira um pouco diferente na origem, já que as consultas de mídia podem ser listadas no atributo de mídia de <srcset>
. A <source>
também aceita formatos de imagem definidos no atributo type
.
O navegador considera cada elemento filho <source>
e escolhe a melhor correspondência entre eles. Se nenhuma correspondência for encontrada, o URL do atributo src
do elemento <img>
será selecionado. O nome acessível vem do atributo alt
do <img>
aninhado.
As seções de aprendizado que abordam o elemento <picture>
e as sintaxes prescritivas também valem a pena ser lidas.
Outros recursos de performance
Há vários outros recursos de imagem que podem melhorar o desempenho do seu site.
Carregamento lento
O atributo loading
informa ao navegador compatível com JS como carregar a imagem. O valor padrão eager
significa que a imagem é carregada imediatamente quando o HTML é analisado, mesmo que ela
esteja fora da janela de visualização visível. Ao definir
loading="lazy"
, o carregamento da imagem é adiado até que
ela provavelmente apareça na janela de visualização. "Provável" é definido pelo navegador com base na distância da imagem em relação à janela de visualização. Essa informação é atualizada conforme o usuário rola a tela. O carregamento lento ajuda a economizar largura de banda e CPU, melhorando o desempenho para a maioria dos usuários. Se o JavaScript estiver desativado, por motivos de segurança, todas as imagens
serão definidas como eager
por padrão.
<img src="switch.svg" alt="light switch" loading="lazy" />
Proporção
Os navegadores começam a renderizar o HTML quando ele é recebido, fazendo solicitações de recursos quando encontrados. Isso significa que o navegador já está renderizando o HTML quando encontra a tag <img>
e faz a solicitação. e as imagens podem levar um tempo para carregar. Por padrão, os navegadores não reservam espaço para imagens além do tamanho necessário para renderizar o texto alt
.
O elemento <img>
sempre foi compatível com atributos height
e width
sem unidade. Essas propriedades caíram em desuso em favor do CSS. O CSS pode definir dimensões de imagem, geralmente definindo uma única dimensão, como max-width: 100%;
, para garantir que a proporção seja preservada.
Como o CSS geralmente é incluído no <head>
, ele é analisado antes de qualquer <img>
ser encontrado. Mas, sem listar explicitamente a height
ou a proporção, o espaço reservado é a altura (ou largura) do texto alt
.
Quando os desenvolvedores declaram apenas uma largura, o recebimento e a renderização de imagens causam uma mudança de layout cumulativa, o que prejudica as métricas da Web. Para resolver esse problema, os navegadores
são compatíveis com proporções de imagem. Incluir atributos height
e width
no
<img>
funciona como dicas de dimensionamento,
informando ao navegador a proporção, permitindo que a quantidade certa de espaço seja
reservada para a renderização eventual da imagem.
Quando o navegador encontra uma única dimensão, como nosso exemplo de 50%, ele salva espaço para a imagem seguindo a dimensão CSS e com a outra dimensão mantendo a proporção largura-altura.
<img src="switch.svg" alt="light switch" role="img" width="70" height="112" />
As imagens são responsivas se o CSS foi configurado corretamente para torná-las
responsivas. Sim, os valores height
e width
sem unidade incluídos são substituídos com CSS. O objetivo de incluir esses atributos é reservar o espaço na proporção correta, melhorando o desempenho ao reduzir a mudança de layout. A página ainda vai levar aproximadamente o mesmo tempo para carregar, mas a interface não vai pular quando a imagem for renderizada na tela.
Outros recursos de imagem
O elemento <img>
também é compatível com os atributos crossorigin
, decoding
, referrerpolicy
e, em navegadores baseados no Blink, fetchpriority
.
Raramente usado. Se a imagem fizer parte de um mapa do lado do servidor, inclua o atributo booleano ismap
e aninhe o <img>
em um link para usuários sem dispositivos apontadores.
O atributo ismap
não é necessário nem compatível com o
<input type="image" name="imageSubmitName">
, já que as coordenadas x
e y
do local do clique são enviadas durante o envio do formulário, anexando
os valores ao nome de entrada, se houver. Por exemplo, algo como
&imageSubmitName.x=169&imageSubmitName.y=66
é enviado com o formulário quando
o usuário clica na imagem. Se a imagem não tiver um atributo
name
, as coordenadas x e y serão enviadas: &x=169&y=66
.
Teste seu conhecimento
Teste seus conhecimentos sobre imagens.
Quais são os dois atributos que uma imagem em primeiro plano sempre deve ter?
size
alt
src