S03 – Atividade de Aprendizagem: Imagens Responsivas
Visão Geral
O trabalho do design de imagens responsivas é oferecer suporte a páginas com pesos menores e entregar conteúdo no tamanho da tela. Você trabalhou na otimização básica de imagens usando tipos de imagem, dimensionamento e ajustes de nível de qualidade. Você também precisa estar ciente da aparência da imagem em diferentes tamanhos de tela. Esta atividade tem como objetivo reduzir o tamanho da página, mantendo-se consciente da clareza e funcionalidade da imagem em diferentes tamanhos de tela e janelas de visualização ou viewports (a área visível de uma página da web).
"Exibir imagens do tamanho de um desktop em dispositivos móveis pode usar de duas a quatro vezes mais dados do que o necessário. Em vez de uma abordagem única para imagens, ofereça tamanhos de imagem diferentes para dispositivos diferentes. Quantas versões de imagem você deve criar? Não há uma resposta "correta" para esta pergunta. No entanto, é comum veicular de três a cinco tamanhos diferentes de uma imagem. Veicular mais tamanhos de imagem é melhor para o desempenho, mas ocupará mais espaço em seus servidores e exigirá escrever um pouco mais de HTML." – Web.dev
Preparação
Um princípio fundamental da experiência do usuário (UX) é que os usuários esperam rolar páginas da web verticalmente sem precisar rolar horizontalmente para visualizar o conteúdo. Além disso, os usuários não precisam aumentar ou diminuir o zoom para ver o conteúdo da página de forma nítida. Como as larguras das janelas de visualização variam, você não deve depender de uma largura específica para que a página seja renderizada corretamente.
Esta atividade se concentra no uso do atributo srcset para imagens usando os elementos picture e source. O navegador analisa a sintaxe da imagem responsiva e decide qual imagem é a melhor correspondência.
Esta atividade pressupõe o seguinte:
- O metaelemento da janela de visualização foi aplicado corretamente ao documento.
- As imagens a serem usadas foram otimizadas para a web, limitando a largura e a altura (dimensões) das imagens ao mínimo necessário para o design da página em qualquer tamanho de visualização.
- As imagens são de um tipo/formato web válido.
- As imagens são compactadas para reduzir o tamanho geral do arquivo. Em muitos pacotes de software de edição de imagem, isso é chamado de redução da "qualidade".
- O desenvolvedor criou e salvou imagens para uso em diferentes tamanhos de tela.
A direção de arte envolve cortar e redimensionar imagens para focar a atenção do usuário em uma parte específica delas, garantindo que os objetivos do design sejam atendidos em diferentes tamanhos de janela de visualização.
Leitura: 📄 Direção de Arte – MDN
Imagens responsivas são imagens que se ajustam perfeitamente a qualquer tamanho de navegador. O atributo srcset permite que o navegador escolha a melhor imagem para exibir de acordo com o tamanho e a resolução da tela do dispositivo. O atributo srcset é usado com os elementos picture e source.
O srcset oferece suporte à segmentação de diferentes intervalos de navegadores. Uma imagem diferente pode ser renderizada dependendo da largura da tela. Aqui está um exemplo:
<picture>
<source srcset="imagens/principal-grande.webp" media="(min-width: 1000px)">
<source srcset="imagens/principal-media.webp" media="(min-width: 550px)">
<img src="imagens/principal-pequena.webp" alt="Templo de Orem Utah" width="400" height="200">
</picture>
A tag picture tem uma referência a três imagens diferentes, duas fontes e uma tag
img padrão. A imagem renderizada pelo navegador depende das consultas de mídia. A seguir está uma
descrição do processo de renderização:
A largura do navegador é de pelo menos 1000 px? Se sim, o caminho srcset substituirá o
src da tag img e a imagem principal-grande.webp será exibida. Se a
largura de visualização do navegador for menor que 1000 px, o navegador testará a próxima fonte fornecida.
A largura do navegador é de pelo menos 550 px? Se sim, a imagem principal-media.webp será usada.
O padrão é a referência src da tag img para principal-pequena.webp.
Instruções da Atividade
Configuração de Arquivo e Pasta
- Se ainda não existir, crie uma pasta chamada "semana03" no diretório wdd131.
- Adicione um novo arquivo chamado "imagens-responsivas.html" à pasta semana03.
- Forneça uma estrutura HTML básica para o arquivo imagens-responsivas.html.
- Se ainda não existir, adicione uma pasta "estilos" à pasta semana03 e adicione um novo arquivo CSS chamado "imagens-responsivas.css" à pasta estilos.
- Se ainda não existir, crie uma pasta chamada "imagens" no seu diretório semana03.
Edição de Imagens
- Navegue até a Lista de Templos e clique no link do templo de sua escolha para obter acesso à Biblioteca de Mídia dele.
- Na Biblioteca de Mídia do templo, clique em uma das imagens e baixe uma versão grande dela usando Salvar imagem como... ou método equivalente.
- Usando um editor de imagens, como o Pixlr E, carregue a imagem baixada e crie 3 (três) imagens diferentes:
- Cada imagem deve ter um corte diferente (direção de arte)
- Salve todas as três imagens no formato de arquivo WebP com qualidade em torno de 50%.
- Crie uma versão pequena chamada "principal-pequena.webp" com 500 px de largura por 250 px de altura.
- Crie uma versão média chamada "principal-media.webp" com 1000 px de largura por 500 px de altura.
- Crie uma versão grande chamada "principal-grande.webp" com 1500 px de largura por 750 px
de altura.
Observe que as proporções de todas essas imagens são 2:1 para consistência.
- Coloque todas elas na sua pasta de imagens semana03.
HTML: Elemento Picture
- No seu arquivo html, adicione um elemento
maincom um elemento de divisão genérico com a classe "principal". - Dentro do elemento
div, adicione um elementopicture. - Dentro do elemento
picture, adicione um elementosourcecom atributos paramediaesrcset.Abreviação Emmet (inserir sintaxe + tabulação):main>div.principal>picture>source:media*2+img - Defina o caminho do srcset para a maior imagem.
- Defina o atributo de mídia como
min-width: 1000px, que é a largura da imagem principal grande criada anteriormente. - Se necessário, copie e cole a linha de origem da marcação e altere a imagem para a imagem média e a largura
mínima para 500px.
Nenhuma dessas imagens será renderizada em uma página. É necessário um elemento
imgcom umsrc. - Adicione o elemento
imgcom umsrcreferenciando a imagem menor. - Defina o valor do atributo
altcomo uma descrição da imagem. - Defina os atributos
widtheheightcom a largura e altura da imagem maior. Quais devem ser os valores de largura e altura? Já que você tem uma foto de 500 px por 250 px, uma de 1000 px por 500 px e outra de 1500 px por 750 px? É importante manter a proporção da imagem, conforme o navegador a utiliza para renderizar o espaço necessário para o carregamento da imagem. Podemos usar a imagem grande de 1500 e 750 ou qualquer proporção equivalente.
Exemplo
<div class="principal">
<picture>
<source srcset="imagens/principal-grande.webp" media="(min-width: 1000px)">
<source srcset="imagens/principal-media.webp" media="(min-width: 500px)">
<img src="imagens/principal-pequena.webp" alt="Nome e localização do templo" width="500" height="250">
</picture>
</div>
Algumas das causas mais comuns de mudança ou deslocamento de layout durante a renderização de uma página são imagens, anúncios, incorporações e iframes sem dimensões. "Mudanças de layout podem distrair os usuários. Imagine que você começou a ler um artigo e, do nada, alguns elementos mudam de lugar na página, te confundindo e te fazendo procurar onde parou. Isso é muito comum na web, inclusive ao ler notícias ou tentar clicar nos botões "Pesquisar" ou "Adicionar ao carrinho". Essas experiências causam desconforto visual e muita frustração. Elas geralmente são causadas quando elementos visíveis são forçados a se mover porque outro elemento foi adicionado repentinamente à página ou redimensionado."
Otimizar Mudança de Layout Cumulativa – Osmani and Pollard, web.devCSS:
- Na folha de estilo, habilite o comportamento responsivo para a imagem definindo a
largurado elemento img como 100% e aalturacomoauto(ou vice-versa). Esta é a maneira mais fácil de manter a proporção da imagem..principal img { width: 100%; height: auto; } - Ou você pode usar
object-fitcom contêineres de imagens definidos. Basta ter cuidado com a direção de arte para obter resultados responsivos..principal img { width: 100%; height: 100%; object-fit: cover; }Aqui está um exemplo desse erro e uma solução usando CSS object-fit no CodePen ☼ object-fit
- Outra solução é usar a propriedade aspect-ratio.
O ideal é que as imagens responsivas mantenham sua proporção intrínseca. Alternar a proporção da tela definindo a largura E a altura para valores (incluindo definir a altura para medida relativa de 100%) a fim de preencher o espaço do design pode distorcer e pixelizar a imagem. O Lighthouse relatará as principais violações de proporção.
Mais informações sobre proporções.
Recursos Opcionais
- Imagens Responsivas com os Atributos 'srcset' – YouTube
- Exibir Imagens Responsivas – web.dev
- A Propriedade Aspect-Ratio do CSS – web.dev