Elemento da imagem

O módulo anterior demonstrou como o atributo srcset permite fornecer versões de tamanhos diferentes da mesma imagem. O navegador pode decidir qual é a versão correta a ser usada. Se você quiser mudar a imagem completamente, será necessário usar o elemento picture.

Da mesma forma que srcset se baseia no atributo src, o elemento picture se baseia no elemento img. O elemento picture se ajusta a um elemento img.

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

Se não houver um elemento img aninhado dentro do picture, o picture não vai funcionar.

Assim como o atributo srcset, o elemento picture vai atualizar o valor do atributo src nesse elemento img. A diferença é que, onde o atributo srcset dá sugestões ao navegador, o elemento picture fornece comandos. Isso permite o controle.

source

É possível especificar vários elementos source dentro de um elemento picture, cada um com o próprio atributo srcset. Em seguida, o navegador executa o primeiro que conseguir.

Formatos de imagem

Neste exemplo, há três imagens diferentes em três formatos diferentes:

<picture>
  <source srcset="image.avif" type="image/avif">
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="A description of the image." 
    width="300" height="200" loading="lazy" decoding="async">
</picture>

O primeiro elemento source aponta para uma imagem no novo formato AVIF. Se o navegador for capaz de renderizar imagens AVIF, esse é o arquivo de imagem escolhido. Caso contrário, ele avança para o próximo elemento source.

O segundo elemento source aponta para uma imagem no formato WebP. Se o navegador for capaz de renderizar imagens WebP, ele usará esse arquivo de imagem.

Caso contrário, o navegador voltará para o arquivo de imagem no atributo src do elemento img. Essa imagem é um JPEG.

Isso significa que você pode começar a usar novos formatos de imagem sem sacrificar a compatibilidade com versões anteriores.

Nesse exemplo, o atributo type informou ao navegador o tipo de formato de imagem especificado.

Tamanhos de imagem

Além de alternar entre formatos de imagem, você pode alternar entre os tamanhos de imagem. Use o atributo media para informar ao navegador qual será a largura da imagem. Coloque uma consulta de mídia no atributo media.

<picture>
  <source srcset="large.png" media="(min-width: 75em)">
  <source srcset="medium.png" media="(min-width: 40em)">
  <img src="small.png" alt="A description of the image." 
    width="300" height="200" loading="lazy" decoding="async">
</picture>

Aqui, você está informando ao navegador que, se a largura da janela de visualização for maior que 75em, ele precisará usar a imagem grande. Entre 40em e 75em, o navegador precisa usar a imagem média. Abaixo de 40em, o navegador precisa usar a imagem pequena.

Isso é diferente de usar os atributos srcset e sizes no elemento img. Nesse caso, você está fornecendo sugestões ao navegador. O elemento source se parece mais com um comando do que com uma sugestão.

Também é possível usar o descritor de densidade de pixels dentro do atributo srcset de um elemento source.

<picture>
  <source srcset="large.png 1x" media="(min-width: 75em)">
  <source srcset="medium.png 1x, large.png 2x" media="(min-width: 40em)">
  <img src="small.png" alt="A description of the image." width="300" height="200" loading="lazy" decoding="async"
    srcset="small.png 1x, medium.png 2x, large.png 3x">
</picture>

Nesse exemplo, você ainda informa ao navegador o que fazer em diferentes pontos de interrupção, mas agora ele tem a opção de escolher a imagem mais adequada para a densidade de pixels do dispositivo.

Corte

Se você só precisa veicular versões da mesma imagem de tamanhos diferentes, srcset é a melhor opção. No entanto, se uma imagem não ficar boa em tamanhos menores, tente criar uma versão cortada.

As diferentes imagens podem ter proporções de largura e altura diferentes para se adequar melhor ao contexto. Por exemplo, em um navegador para dispositivos móveis, convém veicular um recorte estreito e alto, enquanto em um navegador de computador, você pode querer um corte largo e curto.

Veja um exemplo de imagem principal que muda o conteúdo e a forma com base na largura da janela de visualização. Adicione os atributos width e height a cada elemento source.

<picture>
  <source srcset="full.jpg" media="(min-width: 75em)" width="1200" height="500">
  <source srcset="regular.jpg" media="(min-width: 50em)" width="800" height="400">
  <img src="cropped.jpg" alt="A description of the image." width="400" height="400" loading="eager" decoding="sync">
</picture>

Lembre-se de que não é possível mudar o atributo alt dependendo da origem da imagem. É necessário criar um atributo alt que descreva a imagem em tamanho original e a imagem cortada.

Você provavelmente não vai precisar usar o elemento picture para a maioria das imagens responsivas. Os atributos srcset e sizes no elemento img abrangem muitos casos de uso. Mas para as situações em que você precisa de um controle mais refinado, o elemento picture é uma ferramenta poderosa.

Há um tipo de imagem em que você pode não precisar de nenhuma solução: ícones. A seguir:.

Teste seu conhecimento

Teste seus conhecimentos sobre o elemento de imagem

Enquanto o atributo srcset informa ________ ao navegador, o elemento <picture> fornece ________.

sugestões, comandos
O elemento de imagem fornece controle, o que o torna ótimo para direção de arte.
comandos, sugestões
Ops, você conseguiu voltar.

Alguns recursos do elemento <picture> são:

Corte alternativo
Por exemplo: imagens em modo paisagem ou retrato, dependendo da janela de visualização.
Formatos alternativos
Por exemplo: arquivos avif ou webp são menores e mais fáceis de fazer o download, se possível.
Tamanhos alternativos
Por exemplo: imagens maiores para monitores maiores.
Densidades alternativas
Por exemplo: oferecer qualidade de pixels avançada para telas de alta definição.
Proporções alternativas
O elemento de imagem não tem recursos de proporção.