Sobre este problema HTML
Os atributos sizes e srcset trabalham em conjunto para permitir imagens responsivas, mas servem funções distintas e usam sintaxes diferentes. O atributo srcset lista os ficheiros de imagem disponíveis juntamente com as suas larguras intrínsecas usando o descritor w (por exemplo, 800w significa que o ficheiro de imagem tem 800 pixels de largura). O atributo sizes, por outro lado, informa o navegador sobre a largura real com que a imagem será renderizada no layout, usando unidades de comprimento CSS padrão. O navegador combina esta informação — sabendo quais ficheiros estão disponíveis e quão grande a imagem aparecerá — para escolher o ficheiro mais eficiente para descarregar.
Um erro comum é misturar estas duas sintaxes, tipicamente copiando um descritor de largura como 860w do srcset e colocando-o no sizes. Como w não é uma unidade CSS, o validador rejeita-o. Isto importa porque um valor sizes inválido impede o navegador de calcular corretamente qual fonte de imagem usar, potencialmente fazendo-o descarregar uma imagem desnecessariamente grande (desperdiçando largura de banda) ou uma imagem demasiado pequena (resultando em má qualidade).
Como funciona o atributo sizes
O atributo sizes aceita uma lista separada por vírgulas de condições de media emparelhadas com comprimentos CSS, mais um comprimento padrão opcional no final. Cada entrada segue o padrão (condição-de-media) comprimento. O navegador avalia as condições por ordem e usa o comprimento da primeira condição que corresponda. Se nenhuma corresponder, usa o valor padrão final.
As unidades de comprimento CSS válidas incluem px, em, rem, vw, vh, ch, cm, mm, in, pt, pc, e expressões CSS calc(). Você pode combinar unidades com calc() para dimensionamento mais preciso — por exemplo, calc(100vw - 2rem).
Exemplos
❌ Incorreto: usando w em sizes
Isto desencadeia o erro de validação porque 860w é um descritor de largura srcset, não um comprimento CSS:
<img
alt="Uma fotografia de paisagem"
sizes="860w"
srcset="photo-small.jpg 430w, photo-large.jpg 860w"
src="photo-large.jpg">
✅ Correto: usando px em sizes
Substitua o valor w por um comprimento CSS que reflita o tamanho de exibição real da imagem:
<img
alt="Uma fotografia de paisagem"
sizes="860px"
srcset="photo-small.jpg 430w, photo-large.jpg 860w"
src="photo-large.jpg">
✅ Correto: sizes responsivo com condições de media
Use condições de media para especificar diferentes tamanhos de exibição em diferentes larguras de viewport:
<img
alt="Uma fotografia de paisagem"
sizes="(min-width: 1024px) 860px, (min-width: 568px) 430px, 100vw"
srcset="photo-small.jpg 430w, photo-large.jpg 860w"
src="photo-large.jpg">
Isto informa o navegador:
- Em viewports de 1024px e maiores, a imagem exibe com 860px de largura.
- Em viewports de 568px e maiores, a imagem exibe com 430px de largura.
-
Em viewports menores, a imagem preenche toda a largura do viewport (
100vw).
✅ Correto: usando calc() em sizes
Quando a largura da imagem depende de padding ou margens, calc() fornece dimensionamento preciso:
<img
alt="Uma fotografia de paisagem"
sizes="(min-width: 768px) calc(50vw - 2rem), calc(100vw - 1rem)"
srcset="photo-small.jpg 400w, photo-medium.jpg 800w, photo-large.jpg 1200w"
src="photo-medium.jpg">
Pontos principais
-
O descritor
wpertence apenas aosrcset, onde descreve a largura intrínseca de cada ficheiro de imagem. -
O atributo
sizesusa unidades de comprimento CSS (px,vw,em,calc(), etc.) para descrever quão larga a imagem aparecerá no ecrã. -
Se a sua imagem sempre exibe numa largura fixa, um valor simples como
sizes="300px"é suficiente. - Se a largura da sua imagem varia por viewport, use condições de media com comprimentos CSS apropriados para dar ao navegador a informação de que precisa para selecionar a melhor fonte.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.