Tudo que você precisa saber sobre picture e srcset

Post on 03-Aug-2015

808 views 0 download

Transcript of Tudo que você precisa saber sobre picture e srcset

<picture> & srcsetTUDO 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

IMAGENS

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

.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 teladimensõ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

densidade da tela

dimensões do arquivo

BROWSER DEV✓ × ✓

×

×

img_360.jpg img_720.jpg img_1440.jpgimg_2560.jpg

360px720px1440px2560px

100% 100vw

img_360.jpg img_720.jpg img_1440.jpgimg_2560.jpg

36072014402560

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

<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 fullrecorte 2 colunas

1 coluna retina

foto.jpgrecorte.jpg

<picture> <source>

100vw50vw

<img sizes>

responsivo

foto_800.jpg foto_1200.jpg foto_1600.jpg

recorte_320.jpg recorte_600.jpg recorte_1100.jpg

srcset

foto.jpgrecorte.jpg<picture> <source>

100vw50vw

<img sizes>

foto_800.jpg foto_1200.jpg foto_1600.jpgrecorte_320.jpg recorte_600.jpg recorte_1100.jpgsrcset

foto.jpgrecorte.jpg<picture> <source>

100vw50vw

<img sizes>

foto_800.jpg foto_1200.jpg foto_1600.jpgrecorte_320.jpg recorte_600.jpg recorte_1100.jpgsrcset

<img src="recorte_600.jpg" alt="Meninos na jangada">

foto.jpgrecorte.jpg<picture> <source>

100vw50vw

<img sizes>

foto_800.jpg foto_1200.jpg foto_1600.jpgrecorte_320.jpg recorte_600.jpg recorte_1100.jpgsrcset

<img src="recorte_600.jpg" alt="Meninos na jangada" srcset="recorte_320.jpg 320w, recorte_600.jpg 600w, recorte_1100.jpg 1100w”>

foto.jpgrecorte.jpg<picture> <source>

100vw50vw

<img sizes>

foto_800.jpg foto_1200.jpg foto_1600.jpgrecorte_320.jpg recorte_600.jpg recorte_1100.jpgsrcset

<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.jpgrecorte.jpg<picture> <source>

100vw50vw

<img sizes>

foto_800.jpg foto_1200.jpg foto_1600.jpgrecorte_320.jpg recorte_600.jpg recorte_1100.jpgsrcset

<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.jpgrecorte.jpg<picture> <source>

100vw50vw

<img sizes>

foto_800.jpg foto_1200.jpg foto_1600.jpgrecorte_320.jpg recorte_600.jpg recorte_1100.jpgsrcset

<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.jpgrecorte.jpg<picture> <source>

100vw50vw

<img sizes>

foto_800.jpg foto_1200.jpg foto_1600.jpgrecorte_320.jpg recorte_600.jpg recorte_1100.jpgsrcset

<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.jpgrecorte.jpg<picture> <source>

100vw50vw

<img sizes>

foto_800.jpg foto_1200.jpg foto_1600.jpgrecorte_320.jpg recorte_600.jpg recorte_1100.jpgsrcset

<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.jpgrecorte.jpg<picture> <source>

100vw50vw

<img sizes>

foto_800.jpg foto_1200.jpg foto_1600.jpgrecorte_320.jpg recorte_600.jpg recorte_1100.jpgsrcset

<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

AUTOMATIZEGeração das resoluções diferentes

Outros formatos (webp, jxr)

Cuspir código <picture> e srcset?

FALLBACK SEMPRE<img src>

BROWSERS

BROWSERSSRCSET: Chrome, Opera, Firefox,

Safari*, Edge*

PICTURE: Chrome, Opera, Firefox

Lembre do fallback

picturefill 2.0

NÃO PRECISA SEMPREimagem única às vezes é boa o suficiente

<picture> & srcsetTUDO QUE VOCÊ PRECISA SABER SOBRE

@sergio_caelum sergiolopes.org

OBRIGADO

PARA SABER MAIShttps://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 FOTOShttps://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