Uma imagem vale mais que mil palavras, e as imagens são parte integrante de todas as páginas. Mas eles também costumam ser responsáveis pela maior parte dos bytes baixados. Com o Web design responsivo, não apenas os layouts podem mudar com base nas características do dispositivo, mas também as imagens.
O web design responsivo significa que não apenas nossos layouts podem mudar com base nas características do dispositivo, mas o conteúdo também pode mudar. Por exemplo, em telas de alta resolução (2x), os gráficos de alta resolução garantem a nitidez. Uma imagem com 50% de largura pode funcionar bem quando o navegador tem 800 px de largura, mas ocupa muito espaço em um smartphone estreito e requer a mesma sobrecarga de largura de banda quando reduzida para caber em uma tela menor.
Direção de arte
Em outros casos, pode ser necessário mudar a imagem de forma mais drástica: alterar as proporções, cortar e até mesmo substituir a imagem inteira. Nesse caso, mudar a imagem geralmente é chamado de direção de arte. Consulte responsiveimages.org/demos/ para mais exemplos.
Imagens responsivas
Você sabia que as imagens representam, em média, mais de 60% dos bytes necessários para carregar uma página da Web?
Neste curso, você vai aprender a trabalhar com imagens na Web moderna para que elas fiquem ótimas e carreguem rapidamente em qualquer dispositivo.
Ao longo do caminho, você vai aprender uma série de habilidades e técnicas para integrar imagens responsivas ao seu fluxo de trabalho de desenvolvimento. Ao final do curso, você vai desenvolver com imagens que se adaptam e respondem a diferentes tamanhos de janela de visualização e cenários de uso.
Este é um curso sem custo financeiro oferecido pelo Udacity
Imagens na marcação
O elemento img é poderoso: ele faz o download, decodifica e renderiza
conteúdo, e os navegadores mais recentes são compatíveis com vários formatos de imagem. Incluir
imagens que funcionam em vários dispositivos não é diferente do que para computadores e requer
apenas alguns pequenos ajustes para criar uma boa experiência.
Resumo
- Use tamanhos relativos para imagens para evitar que elas transbordem acidentalmente do contêiner.
- Use o elemento
picturequando quiser especificar imagens diferentes dependendo das características do dispositivo (também conhecido como direção de arte). - Use
srcsete o descritorxno elementoimgpara dar dicas ao navegador sobre a melhor imagem a ser usada ao escolher entre diferentes densidades. - Se a página tiver apenas uma ou duas imagens que não são usadas em nenhum outro lugar do site, use imagens inline para reduzir as solicitações de arquivos.
Usar tamanhos relativos para imagens
Lembre-se de usar unidades relativas ao especificar larguras para imagens para evitar que elas
transbordem acidentalmente a janela de visualização. Por exemplo, width: 50%; faz com que a largura da imagem seja 50% do elemento que a contém (não 50% da janela de visualização ou 50% do tamanho real do pixel).
Como o CSS permite que o conteúdo ultrapasse o contêiner, talvez seja necessário usar max-width: 100% para evitar que imagens e outros conteúdos ultrapassem o limite. Exemplo:
img, embed, object, video {
max-width: 100%;
}
Forneça descrições significativas usando o atributo alt em elementos img.
Isso ajuda a tornar seu site mais acessível, fornecendo contexto para leitores de tela
e outras tecnologias adaptativas.
Melhorar imgs com srcset para dispositivos de alta DPI
O atributo srcset melhora o comportamento do elemento
img, facilitando o fornecimento de vários arquivos de imagem
para diferentes características de dispositivo. Semelhante à função CSS
image-set, nativa do CSS, srcset permite que o navegador escolha a melhor
imagem de acordo com as características do dispositivo. Por exemplo, usando
uma imagem 2x em uma tela 2x e, possivelmente, no futuro, uma imagem 1x em
um dispositivo 2x quando estiver em uma rede de largura de banda limitada.
<img src="photo.png" srcset="photo@2x.png 2x" ...>
Em navegadores que não são compatíveis com srcset, o navegador usa o arquivo de imagem padrão especificado pelo atributo src. Por isso, é importante
sempre incluir uma imagem de 1x que possa ser exibida em qualquer dispositivo, independentemente
dos recursos. Quando srcset é compatível, a lista de imagens/condições separada por vírgulas é analisada antes de qualquer solicitação, e apenas a imagem mais adequada é baixada e exibida.
Embora as condições possam incluir tudo, desde a densidade de pixels até a largura e a altura, apenas a densidade de pixels é bem aceita atualmente. Para equilibrar o comportamento atual com os recursos futuros, basta fornecer a imagem 2x no atributo.
Direção de arte em imagens responsivas com picture
Para mudar as imagens com base nas características do dispositivo, também conhecido como direção de arte, use o elemento picture. O elemento
picture define uma solução declarativa para
fornecer várias versões de uma imagem com base em diferentes
características, como tamanho do dispositivo, resolução, orientação
e muito mais.
Use o elemento picture quando uma origem de imagem
existir em várias densidades ou quando um design responsivo ditar uma
imagem um pouco diferente em alguns tipos de tela. Assim como no elemento
video, é possível incluir vários elementos source,
o que permite especificar diferentes arquivos de imagem
dependendo das consultas de mídia ou do formato da imagem.
<picture>
<source media="(min-width: 800px)" srcset="head.jpg, head-2x.jpg 2x">
<source media="(min-width: 450px)" srcset="head-small.jpg, head-small-2x.jpg 2x">
<img src="head-fb.jpg" srcset="head-fb-2x.jpg 2x" alt="a head carved out of wood">
</picture>
No exemplo acima, se a largura do navegador for de pelo menos 800 px, head.jpg ou head-2x.jpg será usado, dependendo da resolução do dispositivo. Se o
navegador estiver entre 450 px e 800 px, head-small.jpg ou head-small-
2x.jpg será usado, dependendo da resolução do dispositivo. Para larguras de tela
menores que 450 px e compatibilidade com versões anteriores em que o elemento picture não é
compatível, o navegador renderiza o elemento img, que precisa sempre ser
incluído.
Imagens de tamanho relativo
Quando o tamanho final da imagem não é conhecido, pode ser difícil especificar um descritor de densidade para as origens da imagem. Isso é especialmente verdadeiro para imagens que abrangem uma largura proporcional do navegador e são fluidas, dependendo do tamanho do navegador.
Em vez de fornecer tamanhos e densidades de imagem fixos, você pode especificar o tamanho de cada imagem fornecida adicionando um descritor de largura com o tamanho do elemento de imagem, permitindo que o navegador calcule automaticamente a densidade de pixels efetiva e escolha a melhor imagem para download.
<img src="lighthouse-200.jpg" sizes="50vw"
srcset="lighthouse-100.jpg 100w, lighthouse-200.jpg 200w,
lighthouse-400.jpg 400w, lighthouse-800.jpg 800w,
lighthouse-1000.jpg 1000w, lighthouse-1400.jpg 1400w,
lighthouse-1800.jpg 1800w" alt="a lighthouse">
O exemplo acima renderiza uma imagem que tem metade da largura da janela de visualização
(sizes="50vw") e, dependendo da largura do navegador e da proporção de pixels do
dispositivo, permite que o navegador escolha a imagem correta, independentemente do tamanho
da janela do navegador. Por exemplo, a tabela abaixo mostra qual imagem o
navegador escolheria:
| Largura do navegador | Proporção de pixels do dispositivo | Imagem usada | Resolução eficaz |
|---|---|---|---|
| 400px | 1 | 200.jpg |
1 x |
| 400px | 2 | 400.jpg |
2x |
| 320px | 2 | 400.jpg |
2,5x |
| 600px | 2 | 800.jpg |
2,67x |
| 640px | 3 | 1000.jpg |
3,125x |
| 1100px | 1 | 800.png |
1.45x |
Considere os pontos de interrupção em imagens responsivas
Em muitos casos, o tamanho da imagem pode mudar dependendo dos pontos de interrupção do layout do site. Por exemplo, em uma tela pequena, talvez você queira que a imagem abranja toda a largura da janela de visualização, enquanto em telas maiores, ela deve ocupar apenas uma pequena proporção.
<img src="400.png"
sizes="(min-width: 600px) 25vw, (min-width: 500px) 50vw, 100vw"
srcset="100.png 100w, 200.png 200w, 400.png 400w,
800.png 800w, 1600.png 1600w, 2000.png 2000w" alt="an example image">
O atributo sizes, no exemplo acima, usa várias consultas de mídia para especificar o tamanho da imagem. Quando a largura do navegador é maior que
600 px, a imagem tem 25% da largura da janela de visualização. Quando está entre 500 px
e 600 px, a imagem tem 50% da largura da janela de visualização. Abaixo de 500 px, ela
tem largura total.
Permitir que as imagens de produtos sejam expandidas
Os clientes querem ver o que estão comprando. Em sites de varejo, os usuários esperam poder ver close-ups de alta resolução dos produtos para conferir melhor os detalhes, e os participantes do estudo ficaram frustrados quando não conseguiram fazer isso.
Um bom exemplo de imagens expansíveis e clicáveis é fornecido pela J. Site da equipe. Uma sobreposição que desaparece indica que uma imagem pode ser tocada, fornecendo uma imagem ampliada com detalhes visíveis.
Outras técnicas de imagem
Imagens compressivas
A técnica de imagem compressiva oferece uma imagem 2x altamente compactada para todos os dispositivos, independentemente dos recursos reais do dispositivo. Dependendo do tipo de imagem e do nível de compactação, a qualidade da imagem pode não parecer mudar, mas o tamanho do arquivo diminui significativamente.
Substituição de imagem em JavaScript
A substituição de imagens em JavaScript verifica os recursos do dispositivo e "faz o que é certo". É possível determinar a proporção de pixels do dispositivo usando
window.devicePixelRatio, conferir a largura e a altura da tela e até mesmo fazer
uma detecção de conexão de rede usando navigator.connection ou emitindo uma solicitação
falsa. Depois de coletar todas essas informações, você pode decidir qual
imagem carregar.
Uma grande desvantagem dessa abordagem é que o uso do JavaScript significa que você vai
atrasar o carregamento da imagem até que pelo menos o analisador de antecipação seja concluído. Isso
significa que o download das imagens só vai começar depois que o evento pageload
for acionado. Além disso, o navegador provavelmente vai fazer o download das imagens 1x e 2x, o que aumenta o peso da página.
Imagens inline: rasterizadas e vetoriais
Há duas maneiras fundamentalmente diferentes de criar e armazenar imagens, e isso afeta como você as implanta de forma responsiva.
Imagens rasterizadas, como fotografias e outras imagens, são representadas como uma grade de pontos de cor individuais. As imagens rasterizadas podem vir de uma câmera ou scanner ou ser criadas com o elemento de tela HTML. Formatos como PNG, JPEG e WebP são usados para armazenar imagens rasterizadas.
As imagens vetoriais, como logotipos e desenhos de traço, são definidas como um conjunto de curvas, linhas, formas, cores de preenchimento e gradientes. As imagens vetoriais podem ser criadas com programas como o Adobe Illustrator ou o Inkscape, ou escritas à mão em código usando um formato vetorial, como SVG.
SVG
O SVG possibilita incluir gráficos vetoriais responsivos em uma página da Web. A vantagem dos formatos de arquivo vetorial em relação aos formatos de arquivo rasterizado é que o navegador pode renderizar uma imagem vetorial em qualquer tamanho. Os formatos vetoriais descrevem a geometria da imagem, ou seja, como ela é construída com linhas, curvas, cores etc. Os formatos rasterizados, por outro lado, só têm informações sobre pontos de cor individuais, então o navegador precisa adivinhar como preencher os espaços em branco ao dimensionar.
Confira abaixo duas versões da mesma imagem: uma imagem PNG à esquerda e uma SVG à direita. O SVG fica ótimo em qualquer tamanho, enquanto o PNG ao lado dele começa a ficar desfocado em tamanhos de exibição maiores.
Se você quiser reduzir o número de solicitações de arquivo que sua página faz, codifique as imagens inline usando o formato SVG ou URI de dados. Se você visualizar a origem desta página, vai notar que os dois logotipos abaixo são declarados inline: um URI de dados e um SVG.
O SVG tem ótimo suporte em dispositivos móveis e computadores, e as ferramentas de otimização podem reduzir significativamente o tamanho do SVG. Os dois logotipos SVG inline a seguir parecem idênticos, mas um tem cerca de 3 KB e o outro apenas 2 KB:
URI de dados
Com os URIs de dados, é possível incluir arquivos in-line (como imagens) definindo o atributo src do elemento img como uma string codificada em Base64 com este formato:
<img src="data:image/svg+xml;base64,[data]">
O início do código do logotipo HTML5 acima é assim:
<img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiB
BZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW ...">
(A versão completa tem mais de 5.000 caracteres!)
Ferramentas de arrastar e soltar, como jpillora.com/base64-encoder, estão disponíveis para converter arquivos binários, como imagens, em URIs de dados. Assim como os SVGs, os URIs de dados são compatíveis com navegadores para dispositivos móveis e computadores.
Inlining em CSS
URIs de dados e SVGs também podem ser inline no CSS, o que é compatível com dispositivos móveis e computadores. Veja duas imagens idênticas implementadas como imagens de plano de fundo em CSS: um URI de dados e um SVG:
Prós e contras do inlining
O código inline para imagens pode ser detalhado, especialmente os URIs de dados. Então, por que você usaria isso? Para reduzir as solicitações HTTP. Os SVGs e os URIs de dados permitem que uma página da Web inteira, incluindo imagens, CSS e JavaScript, seja recuperada com uma única solicitação.
Por outro lado:
- Em dispositivos móveis, os URIs de dados podem ser significativamente mais lentos
para exibição do que as imagens de um
srcexterno. - Os URIs de dados podem aumentar consideravelmente o tamanho de uma solicitação HTML.
- Eles adicionam complexidade à marcação e ao fluxo de trabalho.
- O formato de URI de dados é consideravelmente maior que o binário (até 30%) e, portanto, não reduz o tamanho total do download.
- Os URIs de dados não podem ser armazenados em cache, então precisam ser baixados para cada página em que são usados.
- Eles não são compatíveis com o IE 6 e 7, e o suporte é incompleto no IE8.
- Com o HTTP/2, reduzir o número de solicitações de recursos será menos prioritário.
Como em tudo que é responsivo, você precisa testar o que funciona melhor. Use ferramentas para desenvolvedores para medir o tamanho do arquivo de download, o número de solicitações e a latência total. Às vezes, os URIs de dados podem ser úteis para imagens rasterizadas, por exemplo, em uma página inicial que tem apenas uma ou duas fotos que não são usadas em nenhum outro lugar. Se você precisar de imagens vetoriais inline, o SVG é uma opção muito melhor.
Imagens em CSS
A propriedade CSS background é uma ferramenta poderosa para adicionar imagens complexas
a elementos, facilitando a adição de várias imagens e fazendo com que elas se repitam,
entre outras coisas. Quando combinada com consultas de mídia, a propriedade de plano de fundo se torna
ainda mais poderosa, permitindo o carregamento condicional de imagens com base na resolução
da tela, no tamanho da janela de visualização e muito mais.
Resumo
- Use a melhor imagem para as características da tela, considerando o tamanho, a resolução do dispositivo e o layout da página.
- Mude a propriedade
background-imageno CSS para telas de alta DPI usando consultas de mídia commin-resolutione-webkit-min-device-pixel-ratio. - Use srcset para fornecer imagens de alta resolução, além da imagem 1x na marcação.
- Considere os custos de desempenho ao usar técnicas de substituição de imagens em JavaScript ou ao exibir imagens de alta resolução altamente compactadas para dispositivos de baixa resolução.
Usar consultas de mídia para carregamento condicional de imagens ou direção de arte
As consultas de mídia não afetam apenas o layout da página. Elas também podem ser usadas para carregar imagens condicionalmente ou fornecer direção de arte, dependendo da largura da janela de visualização.
Por exemplo, no exemplo abaixo, em telas menores, apenas small.png é
baixado e aplicado ao conteúdo div, enquanto em telas maiores,
background-image: url(body.png) é aplicado ao corpo e background-image:
url(large.png) é aplicado ao conteúdo div.
.example {
height: 400px;
background-image: url(small.png);
background-repeat: no-repeat;
background-size: contain;
background-position-x: center;
}
@media (min-width: 500px) {
body {
background-image: url(body.png);
}
.example {
background-image: url(large.png);
}
}
Usar image-set para fornecer imagens de alta resolução
A função image-set() em CSS melhora a propriedade de comportamento background,
facilitando o fornecimento de vários arquivos de imagem para diferentes características
de dispositivo. Isso permite que o navegador escolha a melhor imagem de acordo com
as características do dispositivo, por exemplo, usando uma imagem 2x em uma tela 2x
ou uma imagem 1x em um dispositivo 2x quando estiver em uma rede de largura de banda limitada.
background-image: image-set(
url(icon1x.jpg) 1x,
url(icon2x.jpg) 2x
);
Além de carregar a imagem correta, o navegador também a dimensiona adequadamente. Em outras palavras, o navegador assume que as imagens 2x são duas vezes maiores que as imagens 1x e, portanto, reduz a imagem 2x por um fator de 2, para que a imagem pareça ter o mesmo tamanho na página.
O suporte para image-set() ainda é novo e só está disponível no Chrome e
no Safari com o prefixo de fornecedor -webkit. Inclua uma
imagem substituta para quando image-set() não for compatível. Por exemplo:
.sample {
width: 128px;
height: 128px;
background-image: url(icon1x.png);
background-image: -webkit-image-set(
url(icon1x.png) 1x,
url(icon2x.png) 2x
);
background-image: image-set(
url(icon1x.png) 1x,
url(icon2x.png) 2x
);
}
O código acima carrega o recurso apropriado em navegadores compatíveis com image-set.
Caso contrário, ele usa o recurso 1x. A ressalva óbvia é que, embora
o suporte do navegador image-set() seja baixo, a maioria dos navegadores recebe o recurso 1x.
Usar consultas de mídia para fornecer imagens de alta resolução ou direção de arte
As consultas de mídia podem criar regras com base na proporção de pixels do dispositivo, o que possibilita especificar imagens diferentes para telas de 2x e 1x.
@media (min-resolution: 2dppx),
(-webkit-min-device-pixel-ratio: 2)
{
/* High dpi styles & resources here */
}
O Chrome, o Firefox e o Opera são compatíveis com o padrão (min-resolution: 2dppx),
enquanto os navegadores Safari e Android exigem a sintaxe mais antiga com prefixo do fornecedor,
sem a unidade dppx. Lembre-se de que esses estilos só serão carregados se o
dispositivo corresponder à consulta de mídia, e você precisa especificar estilos para o caso base.
Isso também garante que algo seja renderizado se o navegador
não for compatível com consultas de mídia específicas de resolução.
.sample {
width: 128px;
height: 128px;
background-image: url(icon1x.png);
}
@media (min-resolution: 2dppx), /* Standard syntax */
(-webkit-min-device-pixel-ratio: 2) /* Safari & Android Browser */
{
.sample {
background-size: contain;
background-image: url(icon2x.png);
}
}
Também é possível usar a sintaxe min-width para exibir imagens alternativas dependendo do
tamanho da janela de visualização. Essa técnica tem a vantagem de que a imagem não é
transferida por download se a consulta de mídia não corresponder. Por exemplo, bg.png só é
baixado e aplicado ao body se a largura do navegador for de 500 px ou mais:
@media (min-width: 500px) {
body {
background-image: url(bg.png);
}
}
Usar SVG para ícones
Ao adicionar ícones à sua página, use ícones SVG sempre que possível ou, em alguns casos, caracteres Unicode.
Resumo
- Use SVG ou Unicode para ícones em vez de imagens rasterizadas.
Substituir ícones simples por Unicode
Muitas fontes são compatíveis com uma infinidade de glifos Unicode, que podem ser usados em vez de imagens. Ao contrário das imagens, as fontes Unicode são dimensionadas bem e ficam boas, não importa o tamanho em que aparecem na tela.
Além do conjunto de caracteres normal, o Unicode pode incluir símbolos para setas (←), operadores matemáticos (√), formas geométricas (★), imagens de controle (▶), notação musical (♬), letras gregas (Ω) e até peças de xadrez (♞).
A inclusão de um caractere Unicode é feita da mesma forma que as entidades nomeadas:
&#XXXX, em que XXXX representa o número do caractere Unicode. Exemplo:
You're a super ★
Você é uma superestrela ★
Substituir ícones complexos por SVG
Para requisitos de ícones mais complexos, os ícones SVG geralmente são leves, fáceis de usar e podem ser estilizados com CSS. O SVG tem várias vantagens em relação às imagens rasterizadas:
- Eles são gráficos vetoriais que podem ser dimensionados infinitamente.
- Os efeitos CSS, como cor, sombreamento, transparência e animações, são simples.
- As imagens SVG podem ser incorporadas diretamente no documento.
- Eles são semânticos.
- Eles oferecem melhor acessibilidade com os atributos adequados.
With SVG icons, you can either add icons using inline SVG, like
this checkmark:
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="32" height="32" viewBox="0 0 32 32">
<path d="M27 4l-15 15-7-7-5 5 12 12 20-20z" fill="#000000"></path>
</svg>
or by using an image tag, like this credit card icon:
<img src="credit.svg">.
Usar fontes de ícones com cuidado
As fontes de ícones são conhecidas e fáceis de usar, mas têm algumas desvantagens em comparação com os ícones SVG:
- Eles são gráficos vetoriais que podem ser dimensionados infinitamente, mas podem ser suavizados, resultando em ícones que não são tão nítidos quanto o esperado.
- Estilo limitado com CSS.
- O posicionamento perfeito de pixels pode ser difícil, dependendo da altura da linha, do espaçamento entre letras etc.
- Eles não são semânticos e podem ser difíceis de usar com leitores de tela ou outras tecnologias adaptativas.
- A menos que sejam devidamente limitados, eles podem resultar em um arquivo grande para usar apenas um pequeno subconjunto dos ícones disponíveis.
With Font Awesome, you can either add icons by using a unicode
entity, like this HTML5 logo (<span class="awesome"></span>)
or by adding special classes to an <i> element like the CSS3
logo (<i class="fa fa-css3"></i>).
Há centenas de fontes de ícones sem custo financeiro e pagas disponíveis, incluindo Font Awesome, Pictos e Glyphicons.
Equilibre o peso da solicitação HTTP adicional e o tamanho do arquivo com a necessidade dos ícones. Por exemplo, se você precisar de apenas alguns ícones, talvez seja melhor usar uma imagem ou um sprite de imagem.
Otimizar imagens para melhorar o desempenho
As imagens geralmente representam a maior parte dos bytes baixados e também ocupam uma quantidade significativa do espaço visual na página. Como resultado, a otimização de imagens geralmente pode gerar algumas das maiores economias de bytes e melhorias de desempenho para seu site: quanto menos bytes o navegador precisar baixar, menor será a concorrência pela largura de banda do cliente e mais rápido o navegador poderá baixar e exibir todos os recursos.
Resumo
- Não escolha um formato de imagem aleatoriamente. Entenda os diferentes formatos da imagem disponíveis e use o mais adequado.
- Inclua ferramentas de otimização e compactação de imagens no seu fluxo de trabalho para reduzir o tamanho dos arquivos.
- Reduza o número de solicitações HTTP colocando imagens usadas com frequência em sprites de imagem.
- Para melhorar o tempo de carregamento inicial da página e reduzir o peso inicial dela, carregue as imagens somente depois que elas forem exibidas na tela.
Escolha o formato certo
Há dois tipos de imagens a serem considerados:
imagens vetoriais
e imagens rasterizadas.
Para imagens rasterizadas, você também precisa escolher o formato de compactação correto,
por exemplo: GIF, PNG, JPG.
As imagens rasterizadas, como fotografias e outras imagens, são representadas como uma grade
de pontos ou pixels individuais. As imagens rasterizadas normalmente vêm de uma câmera ou
scanner ou podem ser criadas no navegador com o elemento canvas. À medida que o
tamanho da imagem aumenta, o tamanho do arquivo também aumenta. Quando dimensionadas para um tamanho maior que o original, as imagens rasterizadas ficam desfocadas porque o navegador precisa adivinhar como preencher os pixels ausentes.
As imagens vetoriais, como logotipos e desenhos de linha, são definidas por um conjunto de curvas,
linhas, formas e cores de preenchimento. As imagens vetoriais são criadas com programas como
o Adobe Illustrator ou o Inkscape e salvas em um formato vetorial, como
SVG. Como as imagens vetoriais são criadas com
primitivas simples, elas podem ser dimensionadas sem perda de qualidade ou
mudança no tamanho do arquivo.
Ao escolher o formato adequado, é importante considerar a origem da imagem (rasterizada ou vetorial) e o conteúdo (cores, animação, texto etc.). Nenhum formato se adapta a todos os tipos de imagem, e cada um tem seus próprios pontos fortes e fracos.
Comece com estas diretrizes ao escolher o formato apropriado:
- Use
JPGpara imagens fotográficas. - Use
SVGpara arte vetorial e gráficos de cores sólidas, como logotipos e desenhos de linha. Se a arte vetorial não estiver disponível, tenteWebPouPNG. - Use
PNGem vez deGIF, porque ele permite mais cores e oferece melhores taxas de compactação. - Para animações mais longas, use
<video>, que oferece melhor qualidade de imagem e permite que o usuário controle a reprodução.
Reduzir o tamanho do arquivo
É possível reduzir consideravelmente o tamanho do arquivo de imagem fazendo o "pós-processamento" das imagens depois de salvar. Há várias ferramentas para compactação de imagens: com e sem perda, on-line, GUI, linha de comando. Sempre que possível, é melhor tentar automatizar a otimização de imagens para que ela seja integrada ao seu fluxo de trabalho.
Há várias ferramentas disponíveis que realizam uma compactação adicional sem perdas em arquivos JPG
e PNG sem afetar a qualidade da imagem. Para JPG, use
jpegtran ou
jpegoptim (disponível apenas no Linux;
execute com a opção --strip-all). Para PNG, use
OptiPNG ou
PNGOUT.
Usar sprites de imagem
O CSS Sprites é uma técnica em que várias imagens são combinadas em uma única imagem de "folha de sprite". Em seguida, você pode usar imagens individuais especificando a imagem de plano de fundo de um elemento (a folha de sprites) e um deslocamento para exibir a parte correta.
.sprite-sheet {
background-image: url(sprite-sheet.png);
width: 40px;
height: 25px;
}
.google-logo {
width: 125px;
height: 45px;
background-position: -190px -170px;
}
.gmail {
background-position: -150px -210px;
}
.maps {
height: 40px;
background-position: -120px -165px;
}
O spriting tem a vantagem de reduzir o número de downloads necessários para receber várias imagens, além de permitir o armazenamento em cache.
Considere o carregamento lento
O carregamento lento pode acelerar significativamente o carregamento em páginas longas que incluem muitas imagens abaixo da dobra, carregando-as conforme necessário ou quando o conteúdo principal terminar de ser carregado e renderizado. Além de melhorar a performance, o carregamento lento pode criar experiências de rolagem infinita.
Tenha cuidado ao criar páginas de rolagem infinita. Como o conteúdo é carregado à medida que se torna visível, os mecanismos de pesquisa podem nunca detectá-lo. Além disso, os usuários que procuram informações que esperam ver no rodapé nunca as encontram porque novos conteúdos são sempre carregados.
Evite imagens completamente
Às vezes, a melhor imagem não é uma imagem. Sempre que possível, use os recursos nativos do navegador para oferecer a mesma funcionalidade ou uma semelhante. Os navegadores geram recursos visuais que antes exigiam imagens. Isso significa que os navegadores não precisam mais baixar arquivos de imagem separados, evitando imagens com escala inadequada. É possível usar fontes de ícones especiais ou Unicode para renderizar ícones.
Coloque o texto na marcação em vez de incorporá-lo em imagens
Sempre que possível, o texto precisa ser texto e não estar incorporado em imagens. Por exemplo, usar imagens para títulos ou colocar informações de contato, como números de telefone ou endereços, diretamente em imagens impede que os usuários copiem e colem as informações, as torna inacessíveis para leitores de tela e não é responsivo. Em vez disso, coloque o texto na marcação e, se necessário, use fontes da Web para conseguir o estilo que você quer.
Usar CSS para substituir imagens
Os navegadores mais recentes podem usar recursos CSS para criar estilos que antes exigiam imagens. Por exemplo, gradientes complexos podem ser criados usando a
propriedade background, sombras podem ser criadas usando box-shadow e cantos
arredondados podem ser adicionados com a propriedade border-radius.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sit amet augue eu magna scelerisque porta ut ut dolor. Nullam placerat egestas nisl sed sollicitudin. Fusce placerat, ipsum ac vestibulum porta, purus dolor mollis nunc, pharetra vehicula nulla nunc quis elit. Duis ornare fringilla dui non vehicula. In hac habitasse platea dictumst. Donec ipsum lectus, hendrerit malesuada sapien eget, venenatis tempus purus.
<style>
div#noImage {
color: white;
border-radius: 5px;
box-shadow: 5px 5px 4px 0 rgba(9,130,154,0.2);
background: linear-gradient(rgba(9, 130, 154, 1), rgba(9, 130, 154, 0.5));
}
</style>
O uso dessas técnicas requer ciclos de renderização, que podem ser significativos em dispositivos móveis. Se usado em excesso, você vai perder todos os benefícios que pode ter conquistado, e isso pode prejudicar a performance.