Lembre-se de várias coisas ao exibir imagens para os espectadores.
- Mantenha a proporção da imagem igual às dimensões originais
Fazemos isso para evitar que a imagem fique distorcida e para que as imagens fiquem embaçadas. Podemos manter a proporção da dimensão igual ou cortar as peças que não se encaixam.
Ao usar um <img>
elemento ou algo semelhante, isso é bastante direto, requer apenas o uso de um conjunto width
ou height
OR conjunto max-width
ou max-height
.
No entanto, no caso de uma imagem com largura total da janela de exibição, isso é um pouco mais complexo. Existem várias maneiras CSS de fazer isso , sendo a melhor delas background-size:cover
o primeiro exemplo vinculado no artigo e o programa de respostas da Talkingrock .
Além disso, agora temos a capacidade de usar os recursos encontrados na especificação de imagens responsivas incluindo srcset
e o <picture>
elemento, que são bastante úteis. Eu falo sobre isso mais adiante nesta resposta.
- Dê aos espectadores apenas as imagens necessárias
Para ter um carregamento mais rápido da página e impedir que os usuários precisem transferir mais dados, é de vital importância atender ao usuário final apenas as imagens que eles precisam, quando precisam. Isso significa que exibimos uma imagem do mesmo tamanho ou um pouco maior que a que a viewport está usando e aguardando o carregamento de imagens que não serão vistas imediatamente até após o carregamento inicial da página.
Podemos exibir uma imagem de tamanho mais apropriado usando CSS usando @media
consultas quando estivermos usando imagens de plano de fundo. As imagens que não estão na consulta de mídia em uso não são carregadas . Eu recomendo o uso de pelo menos três tamanhos de foto (o que significa pelo menos três consultas de mídia), mas ter mais algumas pode ser uma ótima performance. A seguir, é um exemplo, mas geralmente deve coincidir com alguns pontos de interrupção gerais para o layout do seu site.
@media (max-width: 320px) { /* For phones (this breakpoint is the one I'm least sure about) */
... background-image(imageURLforPhones.png); ...
}
@media (min-width:501px) and (max-width: 1024px) { /* For tablets and such */
... background-image(imageURLforTablets.png); ...
}
@media (min-width: 1025px) { /* For large screens */
... background-image(imageURLforLargeScreens.png); ...
}
Mas, vamos ser sinceros: não somos bons em escolher pontos de interrupção nem somos perfeitos em escolher as dimensões da imagem, considerando um determinado tamanho de tela. Não seria ótimo se pudéssemos deixar que algo fizesse isso 'magicamente' por nós?
A grande novidade é que agora podemos !
Com a especificação de imagens responsivas, podemos deixar o navegador decidir tudo isso por nós, desde que o ajudemos um pouco. A srcset
propriedade sempre tão útil pode ser usada com um <img>
ou um <picture>
elemento. Para mudar de resolução como estamos fazendo aqui, devemos usar um <img>
elemento.
A seguir, é apresentado um exemplo do HTML necessário para permitir srcset
sua execução. Para mais, você pode ler o excelente artigo de Yoav Weiss sobre o assunto. O exemplo é retirado dele.
<img src="cat_500px.jpg"
srcset="cat_750px.jpg 1.5x, cat_1000px.jpg 2x"
width="500" alt="lolcat">
Nota lateral: se você precisar exibir a mesma imagem com dimensões diferentes em determinados tamanhos de janela de exibição, poderá usar o sizes
atributo
Eu não estou dizendo que usar srcset
é necessariamente melhor do que usar uma imagem de plano de fundo CSS, eu não tenho trabalhado o suficiente para dizer isso com certeza, mas é potencialmente uma maneira melhor.
Além disso, para ajudar no desempenho, podemos "carregar preguiçosamente" imagens que não serão visíveis inicialmente. Isso significa que impedimos que eles carreguem inicialmente, mas começamos a carregá-los assim que a página inicial terminar de carregar. Dessa forma, podemos fazer com que o visualizador veja a página o mais rápido possível e preencha alguns detalhes mais tarde. Aqui está uma maneira de fazer isso: não entrarei em muitos detalhes agora.
- Verifique se o conteúdo da imagem que você deseja exibir é mostrado
Se temos as dimensões corretas e um ótimo desempenho, isso é incrível, mas se o espectador não vê o que queremos que ele veja, não faz sentido. Se estivermos mostrando a imagem completamente o tempo todo, isso não é um problema, mas se tivermos que cortar a imagem, isso pode ser um problema.
Podemos cortar background-image
s usando CSS usando background-size
e background-position
(e meio que usando clip
, mas isso geralmente é usado para formas mais artísticas e complexas). Os detalhes exatos disso variarão de imagem para imagem, dependendo de como está sendo implementado.
A segunda opção é usar o <picture>
elemento Usamos isso quando queremos apenas parte da imagem exibida, como visto aqui , mas aqui está um exemplo simples na prática (extraído do excelente artigo de Jason Grigsby sobre esse assunto).
<picture>
<source media="(min-width: 45em)" srcset="large.jpg">
<source media="(min-width: 32em)" srcset="med.jpg">
<img src="small.jpg" alt="The president giving an award.">
</picture>
Quero reiterar que, se você precisar apenas mudar de resolução , não use o <picture>
elemento , basta usá-lo <img>
com srcset
. O único momento em que precisamos do <picture>
elemento é para essa direção de arte, ou seja, recorte, etc.
Há também a possibilidade de cortar o lado do servidor, usar uma máscara SVG ou fazer algumas coisas com o Canvas, mas isso está um pouco fora do escopo desta resposta.
Algumas outras notas
Pontos de interrupção específicos não são tão importantes. Como em todo design responsivo, é importante fazer o melhor possível para todas as viewports, mas não há consultas de mídia perfeitas para todos os sites.
O tempo de carregamento da página é muito importante e as imagens podem diminuir muito o tempo de carregamento inicial. Certifique-se de carregar imagens que serão vistas imediatamente primeiro e depois outras. Tente impedir que imagens (como JPEGs) mostrem parte da imagem enquanto ela carrega o restante. Otimize também todas as suas imagens para que tenham o menor tamanho de arquivo possível e ainda tenham a quantidade de qualidade necessária.
É importante lembrar que as imagens, na maioria dos casos, devem ser um acessório, não uma necessidade. Eu recomendo sempre testar a aparência de uma página da Web sem imagens para garantir que seja utilizável.
Nota : Podemos usar um polyfill chamado Picturefill para atender navegadores mais antigos que não suportam a especificação de imagens responsivas.