Tudo que você precisa saber sobre picture e srcset

Caelum
CaelumCaelum
<picture> & srcset
TUDO QUE VOCÊ PRECISA SABER SOBRE
@sergio_caelum
sergiolopes.org
IMAGENS
NA WEB
http://upload.wikimedia.org/wikipedia/commons/d/d2/
IPhone_4S_No_shadow.png http://upload.wikimedia.org/wikipedia/
commons/d/d2/IPhone_4S_No_shadow.png
<img src="frutas.jpg" alt="Banca de Frutas">
background-image: url(frutas.jpg);
TELAS ALTA
RESOLUÇÃO
http://upload.wikimedia.org/wikipedia/commons/d/d2/
IPhone_4S_No_shadow.png http://upload.wikimedia.org/wikipedia/
commons/d/d2/IPhone_4S_No_shadow.png
320px 640px
1x 2x
http://upload.wikimedia.org/wikipedia/commons/d/d2/
IPhone_4S_No_shadow.png http://upload.wikimedia.org/wikipedia/
commons/d/d2/IPhone_4S_No_shadow.png
1x 2x
http://upload.wikimedia.org/wikipedia/commons/d/d2/
IPhone_4S_No_shadow.png http://upload.wikimedia.org/wikipedia/
commons/d/d2/IPhone_4S_No_shadow.png
.foto {
background-image: url('balao_320px.jpg');
width: 320px;
}
@media (resolution: 2dppx) {
.foto {
background-image: url('balao_640px.jpg');
}
}
http://upload.wikimedia.org/wikipedia/commons/d/d2/
IPhone_4S_No_shadow.png http://upload.wikimedia.org/wikipedia/
commons/d/d2/IPhone_4S_No_shadow.png
<img src="balao_320px.jpg" alt="Balões turcos">
http://upload.wikimedia.org/wikipedia/commons/d/d2/
IPhone_4S_No_shadow.png http://upload.wikimedia.org/wikipedia/
commons/d/d2/IPhone_4S_No_shadow.png
<img src="baloes.jpg" alt="Balões turcos"
srcset="balao_320px.jpg 1x, balao_640px.jpg 2x">
http://upload.wikimedia.org/wikipedia/commons/d/d2/
IPhone_4S_No_shadow.png http://upload.wikimedia.org/wikipedia/
commons/d/d2/IPhone_4S_No_shadow.png
1x
balao_320px.jpg
2x
balao_640px.jpg
SRCSET
para densidades diferentes
<img src="baloes.jpg" alt="Balões turcos"
srcset="balao_320px.jpg 1x, balao_640px.jpg 2x">
Lista imagens & densidades de tela
Imagem de fallback no src
IMAGENS
RESPONSIVAS
Tudo que você precisa saber sobre picture e srcset
2560px
320px
ORIGINAL 4272px 6.4MB
Q=80 4272px 1.5MB
Q=60 4272px 960KB
4272px 1.5MB
2560px 627KB
1440px 230KB
720px 69KB
320px 17KB
7 ipT
16 ipT
44 ipT
145 ipT
589 ipT
Tudo que você precisa saber sobre picture e srcset
.foto { background-image: url('img_360px.jpg'); }
.foto { background-image: url('img_720px.jpg'); }
.foto { background-image: url('img_1440px.jpg'); }
.foto { background-image: url('img_2560px.jpg'); }
.foto { background-image: url('img_360px.jpg'); }
@media (min-width: 361px) {
.foto { background-image: url('img_720px.jpg'); }
}
@media (min-width: 721px) {
.foto { background-image: url('img_1440px.jpg'); }
}
@media (min-width: 1441px) {
.foto { background-image: url('img_2560px.jpg'); }
}
.foto { background-image: url('img_360px.jpg'); }
@media (min-width: 361px),
(min-resolution: 2dppx) {
.foto { background-image: url('img_720px.jpg'); }
}
@media (min-width: 721px),
(min-resolution: 2dppx) and (min-width: 361px) {
.foto { background-image: url('img_1440px.jpg'); }
}
@media (min-width: 1441px),
(min-resolution: 2dppx) and (min-width: 721px) {
.foto { background-image: url('img_2560px.jpg'); }
}
.foto { background-image: url('img_360px.jpg'); }
@media (min-width: 361px),
(min-resolution: 2dppx) {
.foto { background-image: url('img_720px.jpg'); }
}
@media (min-width: 721px),
(min-resolution: 2dppx) and (min-width: 361px),
(min-resolution: 3dppx) {
.foto { background-image: url('img_1440px.jpg'); }
}
@media (min-width: 1441px),
(min-resolution: 2dppx) and (min-width: 721px),
(min-resolution: 3dppx) and (min-width: 481px) {
.foto { background-image: url('img_2560px.jpg'); }
}
@media (min-width: 1600px) {
.foto { width: 33%; }
}
.foto { width: 100%;}
@media (min-width: 1024px) {
.foto { width: 50%; }
}
.foto { background-image: url('img_360px.jpg'); }
@media (min-width: 361px),
(min-resolution: 2dppx) {
.foto { background-image: url('img_720px.jpg'); }
}
@media (min-width: 721px) and (max-width: 1023px),
(min-width: 1441px) and (max-width: 1599px),
(min-width: 2160px),
(min-resolution: 2dppx) and (min-width: 361px) {
.foto { background-image: url('img_1440px.jpg'); }
}
@media (min-resolution: 2dppx) and (min-width: 721px) and (max-width: 1023px),
(min-resolution: 2dppx) and (min-width: 1441px) and (max-width: 1599px),
(min-resolution: 2dppx) and (min-width: 2160px) {
.foto { background-image: url('img_2560px.jpg'); }
}
.foto { background-image: url('img_360px.jpg'); }
@media (min-width: 361px),
(min-resolution: 2dppx) {
.foto { background-image: url('img_720px.jpg'); }
}
@media (min-width: 721px) and (max-width: 1023px),
(min-width: 1441px) and (max-width: 1599px),
(min-width: 2160px),
(min-resolution: 2dppx) and (min-width: 361px) {
.foto { background-image: url('img_1440px.jpg'); }
}
@media (min-resolution: 2dppx) and (min-width: 721px) and (max-width: 1023px),
(min-resolution: 2dppx) and (min-width: 1441px) and (max-width: 1599px),
(min-resolution: 2dppx) and (min-width: 2160px) {
.foto { background-image: url('img_2560px.jpg'); }
}
MEDIA QUERIES
SÃO
COMPLICADAS
tamanho viewport
densidade da tela
dimensões do arquivo
tamanho img na pg
tamanho viewport
tamanho img na pg
densidade da tela
dimensões do arquivo
BROWSER DEV
✓ ×
✓ ×
✓
✓
×
×
tamanho img na pg
dimensões do arquivo
×
✓
✓
×
×
img_360.jpg
img_720.jpg
img_1440.jpg
img_2560.jpg
360px
720px
1440px
2560px
100% 100vw
img_360.jpg
img_720.jpg
img_1440.jpg
img_2560.jpg
360
720
1440
2560
100vw
<img srcset="img_360.jpg 360w,
img_720.jpg 720w,
img_1440.jpg 1440w,
img_2560.jpg 2560w"
sizes="100vw">
tamanho aproximado na pg
lista imagens e tamanho dos arquivos
<img srcset="img_360.jpg 360w,
img_720.jpg 720w,
img_1440.jpg 1440w,
img_2560.jpg 2560w"
sizes="100vw">
Celular img_360.jpg
Celular Retina img_720.jpg
iPad Retina img_2560.jpg
Notebook comum img_1440.jpg
MacBook Retina img_2560.jpg
<img srcset="img_360.jpg 360w,
img_720.jpg 720w,
img_1440.jpg 1440w,
img_2560.jpg 2560w"
sizes="100vw">
@media (min-width: 1600px) {
.foto { width: 33%; }
}
.foto { width: 100%;}
@media (min-width: 1024px) {
.foto { width: 50%; }
}
<img srcset="img_360.jpg 360w,
img_720.jpg 720w,
img_1440.jpg 1440w,
img_2560.jpg 2560w"
sizes="(min-width: 1600px) 33vw,
(min-width: 1024px) 50vw,
100vw">
lista breakpoints com tamanho da img na pg
<img src="fallback.jpg" alt="Foto da ponte"
srcset="img_360.jpg 360w,
img_720.jpg 720w,
img_1440.jpg 1440w,
img_2560.jpg 2560w"
sizes="(min-width: 1600px) calc(33vw - 6em),
(min-width: 1024px) 50vw,
calc(100vw - 2em)">
SRCSET
Escolha imagem pra fallback no src
Só use para mesma imagem, tamanhos diferentes
Se usar w, use o sizes
É UMA DICA PARA O BROWSER
SRCSET
Blink
Firefox
<img srcset="img1.jpg 360w, img2.jpg 720w, img3.jpg 1440w">
img1.jpg
361px
img2.jpg
721px
img3.jpg
img1.jpg
510px
img2.jpg
1019px
img3.jpg
IMAGENS
DIFERENTES
Tudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcset
<picture> !!!!
<img src="recorte.jpg" alt="Meninos na jangada">
<picture>
<img src="recorte.jpg" alt="Meninos na jangada">
</picture>
<picture>
<source media="(min-width: 1024px)"
srcset="completa.jpg">
<img src="recorte.jpg" alt="Meninos na jangada">
</picture>
<picture>
<source media="(min-width: 1024px)"
srcset="intermediaria.jpg">
<source media="(min-width: 1600px)"
srcset="completa.jpg">
<img src="recorte.jpg" alt="Meninos na jangada">
</picture>
MUITAS
IMAGENS
imagem full
recorte
2 colunas1 coluna
retina
responsivo
imagem full
recorte 2 colunas
1 coluna retina
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
responsivo
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
<img src="recorte_600.jpg" alt="Meninos na jangada">
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
<img src="recorte_600.jpg" alt="Meninos na jangada"
srcset="recorte_320.jpg 320w,
recorte_600.jpg 600w,
recorte_1100.jpg 1100w”>
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
<img src="recorte_600.jpg" alt="Meninos na jangada"
srcset="recorte_320.jpg 320w,
recorte_600.jpg 600w,
recorte_1100.jpg 1100w"
sizes="100vw">
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
<picture>
<img src="recorte_600.jpg" alt="Meninos na jangada"
srcset="recorte_320.jpg 320w,
recorte_600.jpg 600w,
recorte_1100.jpg 1100w"
sizes="100vw">
</picture>
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
<picture>
<source
srcset="foto_800.jpg 800w,
foto_1200.jpg 1200w,
foto_1600.jpg 1600w”>
<img src="recorte_600.jpg" alt="Meninos na jangada"
srcset="recorte_320.jpg 320w,
recorte_600.jpg 600w,
recorte_1100.jpg 1100w"
sizes="100vw">
</picture>
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
<picture>
<source media="(min-width: 800px)"
srcset="foto_800.jpg 800w,
foto_1200.jpg 1200w,
foto_1600.jpg 1600w”>
<img src="recorte_600.jpg" alt="Meninos na jangada"
srcset="recorte_320.jpg 320w,
recorte_600.jpg 600w,
recorte_1100.jpg 1100w"
sizes="100vw">
</picture>
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
<picture>
<source media="(min-width: 800px)"
srcset="foto_800.jpg 800w,
foto_1200.jpg 1200w,
foto_1600.jpg 1600w"
sizes="100vw">
<img src="recorte_600.jpg" alt="Meninos na jangada"
srcset="recorte_320.jpg 320w,
recorte_600.jpg 600w,
recorte_1100.jpg 1100w"
sizes="100vw">
</picture>
foto.jpg
recorte.jpg
<picture>
<source>
100vw
50vw
<img sizes>
foto_800.jpg
foto_1200.jpg
foto_1600.jpg
recorte_320.jpg
recorte_600.jpg
recorte_1100.jpg
srcset
<picture>
<source media="(min-width: 800px)"
srcset="foto_800.jpg 800w,
foto_1200.jpg 1200w,
foto_1600.jpg 1600w"
sizes="(min-width: 1400px) 50vw,
100vw">
<img src="recorte_600.jpg" alt="Meninos na jangada"
srcset="recorte_320.jpg 320w,
recorte_600.jpg 600w,
recorte_1100.jpg 1100w"
sizes="100vw">
</picture>
<picture>
<source media="(min-width: 800px)"
srcset="foto_800.jpg 800w,
foto_1200.jpg 1200w,
foto_1600.jpg 1600w"
sizes="(min-width: 1400px) 50vw,
100vw">
<img src="recorte_600.jpg" alt="Meninos na jangada"
srcset="recorte_320.jpg 320w,
recorte_600.jpg 600w,
recorte_1100.jpg 1100w"
sizes="100vw">
</picture>
SRCSET
mesma imagem
<PICTURE>
imagens diferentes
MAIS
<PICTURE>
1980px
x
1320px
JPEG Q=70 384KB
WEBP Q=70 233KB
-40%
<picture>
<source srcset="foto.webp" type="image/webp">
<img src="foto.jpg" alt="Cidade">
</picture>
<picture>
<source srcset="foto.webp" type="image/webp">
<source srcset="foto.jxr" type="image/jxr">
<img src="foto.jpg" alt="Cidade">
</picture>
<picture>
<source srcset="logo.svg" type="image/svg+xml">
<img src="logo.png" alt="Caelum">
</picture>
https://itaccessibility.illinois.edu/sites/itaccessibility.illinois.edu/files/
chartcolor.jpg
<picture>
<source srcset="grafico_PB.png" media="(monochrome)">
<img src="grafico.png" alt="Egg x Cheese">
</picture>
COLADensidade de tela (retina)
<img srcset> com 1x/2x
Tamanhos & densidades diferentes
<img srcset sizes> com w
Direção de arte
<picture> + <source media="(min-width)">
Media queries (print, monochrome, color…)
<picture> + <source media="print">
Formatos (mime type)
<picture> + <source type="image/webp">
Tamanhos e densidade diferentes, com direção de arte, formatos
diferentes e imagens pra impressão
<picture> + srcset + sizes + <source media> + <source type> !!
PRÁTICA
AUTOMATIZE
Geração das resoluções diferentes
Outros formatos (webp, jxr)
Cuspir código <picture> e srcset?
FALLBACK SEMPRE
<img src>
BROWSERS
Tudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcset
BROWSERS
SRCSET: Chrome, Opera, Firefox,
Safari*, Edge*
PICTURE: Chrome, Opera, Firefox
Lembre do fallback
picturefill 2.0
Tudo que você precisa saber sobre picture e srcset
NÃO PRECISA SEMPRE
imagem única às vezes é boa o suficiente
<picture> & srcset
TUDO QUE VOCÊ PRECISA SABER SOBRE
@sergio_caelum
sergiolopes.org
OBRIGADO
PARA SABER MAIS
https://dev.opera.com/articles/native-responsive-images/
https://dev.opera.com/articles/responsive-images/
http://usecases.responsiveimages.org/
https://html.spec.whatwg.org/multipage/embedded-content.html
http://alistapart.com/article/responsive-images-in-practice
http://ericportis.com/posts/2014/srcset-sizes/
https://github.com/smaxtastic/grunt-responsive-images-extender
https://github.com/andismith/grunt-responsive-images/
CRÉDITOS FOTOS
https://www.flickr.com/photos/freedomiiphotography/6203111667
https://www.flickr.com/photos/marfis75/16239031632
https://www.flickr.com/photos/tanelteemusk/6399051863
https://www.flickr.com/photos/noemigalera/4730832990
https://www.flickr.com/photos/heydrienne/22080973
https://www.flickr.com/photos/rvc/8286874239
https://www.flickr.com/photos/janssem/7549086426
https://www.flickr.com/photos/ben124/6735320631
https://www.flickr.com/photos/kosalabandara/14844923823
https://www.flickr.com/photos/benurs/4446310239
1 of 80

More Related Content

Viewers also liked(13)

Progamacao para não programadoresProgamacao para não programadores
Progamacao para não programadores
alexandre freire1.4K views
HR sheet flexpoolmanagementHR sheet flexpoolmanagement
HR sheet flexpoolmanagement
Bas de Greef331 views
Reactive JavaScriptReactive JavaScript
Reactive JavaScript
Stoyan Stefanov5.1K views
Psychology of performancePsychology of performance
Psychology of performance
Stoyan Stefanov23.9K views
Vida de Programador Vida de Programador
Vida de Programador
Campus Party Brasil1.6K views
Taking the TOEIC® Taking the TOEIC®
Taking the TOEIC®
Compass Publishing2.5K views
Taking the TOEIC 1 & 2 Academic PresentionTaking the TOEIC 1 & 2 Academic Presention
Taking the TOEIC 1 & 2 Academic Presention
Compass Publishing3K views
Fast reading  techniques for toeic part7Fast reading  techniques for toeic part7
Fast reading techniques for toeic part7
eulamaegrecia19.3K views
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
Marcio Junior Vieira75.8K views
Annabel LeeAnnabel Lee
Annabel Lee
bmtravis7.5K views
500 toeic questions with keys500 toeic questions with keys
500 toeic questions with keys
Tommy Bảo20.3K views

Tudo que você precisa saber sobre picture e srcset