O elemento <picture> permite servir imagens diferentes baseado em media queries, formato e resolução.
<source>Define condições (media queries, tipo de arquivo) e a imagem correspondente
<img>Elemento obrigatório que serve como fallback e define o alt text
O <picture> contém múltiplos <source> e um <img> obrigatório. O navegador avalia as condições de cada source de cima para baixo e usa a primeira que corresponder.
Media QueriesUse o atributo
mediapara servir imagens diferentes baseado no tamanho da viewport:media="(min-width: 768px)"
Formatos de ImagemUse o atributo
typepara formatos modernos com fallback:type="image/webp"
export default function ResponsiveImageExample() {
return (
<picture>
{/* Formato moderno WebP */}
<source
srcSet="/imagem.webp"
type="image/webp"
/>
{/* Telas grandes */}
<source
srcSet="/imagem-desktop.jpg"
media="(min-width: 1024px)"
/>
{/* Telas médias */}
<source
srcSet="/imagem-tablet.jpg"
media="(min-width: 768px)"
/>
{/* Fallback para mobile e navegadores antigos */}
<img
src="/imagem-mobile.jpg"
alt="Descrição da imagem"
loading="lazy"
/>
</picture>
);
}Redimensione a janela do navegador para ver o elemento picture em ação. Diferentes imagens serão carregadas baseado no tamanho da tela.

A imagem muda conforme o tamanho da tela
Dica: Abra o DevTools (F12) e alterne entre dispositivos para ver a troca de imagens em tempo real.