Imagens responsivas: compreender srcset, sizes e DPR
srcset lista os ficheiros disponíveis. Com descritores de largura, sizes descreve a largura prevista em píxeis CSS; o navegador combina-a com DPR e a sua política de seleção. O CSS continua a controlar a disposição real.
Neste guia
- Separe píxeis do ficheiro, CSS e densidade
- Use descritores de largura numa disposição variável
- Preveja o candidato e confirme no navegador
- Use descritores x para uma imagem de tamanho fixo
- Planeie proporção e comportamento de carga
- Faça uma revisão antes de publicar
- Perguntas frequentes
- Fontes e definições
Uma imagem pode parecer correta e transferir píxeis desnecessários, ou ficar desfocada quando um ficheiro pequeno ocupa um ecrã denso. Os ficheiros produzidos e o espaço visual devem representar a mesma disposição.
O exemplo usa uma coluna limitada a 800 píxeis CSS, margens exteriores de 16 em ecrãs estreitos e a mesma composição na proporção 4:3 em todos os ficheiros.
Separe píxeis do ficheiro, CSS e densidade
Um ficheiro com 800 píxeis de largura pode ocupar apenas 400 píxeis CSS. Com DPR 2, esse espaço corresponde aproximadamente a 800 píxeis físicos. É uma relação de planeamento; o navegador mantém liberdade de escolha.
Calcule primeiro o menor valor entre 800 e a largura da janela menos 32. Multiplique esse espaço pelo DPR. Não multiplique toda a janela se a imagem ocupa uma coluna estreita.
| Largura da janela | Espaço em píxeis CSS | DPR | Largura pretendida do ficheiro |
|---|---|---|---|
| 392 | 360 | 1 | 360 píxeis |
| 392 | 360 | 2 | 720 píxeis |
| 1024 | 800 | 1 | 800 píxeis |
| 1024 | 800 | 2 | 1600 píxeis |
Use descritores de largura numa disposição variável
O descritor w indica a largura intrínseca verdadeira do recurso, não um ponto de quebra. sizes descreve o espaço esperado. Neste exemplo, janelas a partir de 832 píxeis CSS usam 800; as restantes descontam as duas margens.
O CSS faz parte do exemplo. Se o componente passar a ocupar metade de uma grelha, atualize sizes. Um valor antigo de largura total pode selecionar um ficheiro excessivo. O atributo deve descrever a disposição, não tamanhos de ecrã populares.
<img
src="/images/workspace-800.webp"
srcset="/images/workspace-400.webp 400w,
/images/workspace-800.webp 800w,
/images/workspace-1600.webp 1600w"
sizes="(min-width: 832px) 800px, calc(100vw - 32px)"
width="1600" height="1200"
alt="A desk with a monitor and an open notebook"
style="display:block;width:calc(100vw - 32px);max-width:800px;height:auto;margin-inline:auto"
>Preveja o candidato e confirme no navegador
Numa janela de 392 com DPR 2, o espaço é 360 e o alvo 720 píxeis; 800w é um candidato razoável. Num ecrã largo com DPR 2, o alvo é 1600. A conta explica a escolha, mas não força uma transferência específica.
O navegador pode conservar uma imagem grande já transferida ao reduzir a janela. Abra um contexto novo ou recarregue depois de definir janela e DPR. Produza ficheiros reais de 400, 800 e 1600 píxeis; renomear cópias do mesmo ficheiro não cria resoluções diferentes.
- Meça a largura real do elemento.
- Compare currentSrc com a imagem no painel de rede.
- Verifique dimensões, tipo de resposta, cache e bytes transferidos.
- Teste janelas estreita e larga com DPR 1 e DPR 2.
- Procure transbordo horizontal e deslocações durante a carga.
Use descritores x para uma imagem de tamanho fixo
Um logótipo sempre apresentado a 120 píxeis CSS pode usar um ficheiro de 120 como 1x e outro de 240 como 2x. São resoluções alternativas do mesmo tamanho visual. Não misture x e w no mesmo srcset.
Recortes diferentes são outra decisão de desenho. Use picture e condições source se o telemóvel precisar de um rosto aproximado e o computador de uma cena larga. O texto alternativo descreve o conteúdo significativo apresentado.
<img src="/images/mark-120.png"
srcset="/images/mark-120.png 1x, /images/mark-240.png 2x"
width="120" height="120" alt="Example project mark">Planeie proporção e comportamento de carga
width e height permitem reservar espaço pela proporção antes da chegada da imagem; não impedem o CSS de alterar a largura. Na proporção 4:3, uma largura de 800 dá altura de 600; com 360, a altura é 270.
A carga diferida serve imagens mais abaixo, mas não deve atrasar indiscriminadamente a imagem principal visível à entrada. Candidatos, formato, compressão e estratégia de carga resolvem partes diferentes do custo.
Memória descodificada e tamanho transferido também diferem. Um WebP pequeno pode criar um grande buffer de píxeis. Calcule memória pelas dimensões e meça o ficheiro comprimido real.
Faça uma revisão antes de publicar
Guarde larguras, recorte, proporção, qualidade e sizes junto do componente para os atualizar em conjunto. Alterar o máximo de 800 para 1000 exige rever os candidatos.
Verifique src, todos os endereços de srcset, texto alternativo e espaço reservado. Reproduza a tabela com o cálculo de píxeis CSS e DPR e calcule alturas pela proporção. O resultado útil é a concordância entre ficheiros e disposição em dispositivos reais.
Perguntas frequentes
sizes altera a largura CSS da imagem?
Não. Descreve o espaço previsto para selecionar recursos com descritores de largura. O CSS controla a disposição e deve corresponder a essa descrição.
Porque continua a imagem grande ao reduzir a janela?
O navegador pode reutilizar um recurso já disponível. Faça uma carga nova com janela e DPR definidos e inspecione recurso e transferência.
Uma imagem 2x tem sempre o dobro dos bytes?
Não. Duplicar ambas as dimensões quadruplica os píxeis, mas os bytes dependem do conteúdo, formato e compressão. Meça os ficheiros gerados.
Fontes e definições
Método conferido: