Formes simples dont on mémorise les dimensions, les points, les couleurs.
Très léger, se compresse bien en zip.
Mémorisation pixel par pixel.
Poids conséquent.
Tiens, ça mériterait un sujet dédié…
Steve Wilhite
inventeur du GIF
(en gif)
logo officiel de JPEG
bah, non rien
progressif
optimisation
Mozilla a lancé son propre projet MozJpeg pour (re)concurrencer WebP
entrelacé
avec entrelacement
sans entrelacement
logo officiel Webp
👍🏻
avantages
inconvénients
👎🏻
comparatif
PNG (original) : 1.8 Mo
JPEG (MozJPG) : 71 Ko
Webp : 53 Ko
comparatif png transparent
compatibilité
logo officiel av1
👍🏻
avantages
inconvénients
👎🏻
comparatif
PNG (original) : 1.8 Mo
JPEG (MozJPG) : 71 Ko
Webp : 53 Ko
Avif : 25 Ko
compatibilité
performances
Source : https://fynn.be/blog/browser-image-performance/ (2022)
compatibilité
Important pour l'UX (et Google)
<img src="(chemin)" alt="">
<p>Lorem Elsass...</p>Lorem Elsass Ipsum mitt picon bière munster du ftomi! Ponchour bisame. Bibbeleskaas jetz rossbolla sech choucroute un schwanz geburtstàg, Chinette dû, ìch bier deppfele schiesser. Flammekueche de knèkes Seppele gal! a hopla geburtstàg, alles fraü Chulia Roberts oder knäckes dûû blottkopf. Noch bredele schissabibala, yeuh e schmutz.
largeur du parent : 200px
1
on dirait bien que l'image n'est pas encore chargée... suspense...
il semble que je souhaite afficher une image...
<img src="(chemin)" alt="">Lorem Elsass Ipsum mitt picon bière munster du ftomi! Ponchour bisame. Bibbeleskaas jetz rossbolla sech choucroute un schwanz geburtstàg, Chinette dû, ìch bier deppfele schiesser. Flammekueche de knèkes Seppele gal! a hopla geburtstàg, alles fraü Chulia Roberts oder knäckes dûû blottkopf. Noch bredele schissabibala, yeuh e schmutz.
image
200 x 100px
largeur du parent : 200px
l'image est chargée, elle crée un Layout Shift (pas bien !)
1
<img src="(chemin)" alt="" width="200" height="100">Lorem Elsass Ipsum mitt picon bière munster du ftomi! Ponchour bisame. Bibbeleskaas jetz rossbolla sech choucroute un schwanz geburtstàg, Chinette dû, ìch bier deppfele schiesser. Flammekueche de knèkes Seppele gal! a hopla geburtstàg, alles fraü Chulia Roberts oder knäckes dûû blottkopf. Noch bredele schissabibala, yeuh e schmutz.
largeur du parent : 200px
l'espace est réservé avant même que l'image ne soit chargée
2
<img src="(chemin)" alt="" width="200" height="100">Lorem Elsass Ipsum mitt picon bière munster du ftomi! Ponchour bisame. Bibbeleskaas jetz rossbolla sech choucroute un schwanz geburtstàg, Chinette dû, ìch bier deppfele schiesser. Flammekueche de knèkes Seppele gal! a hopla geburtstàg, alles fraü Chulia Roberts oder knäckes dûû blottkopf. Noch bredele schissabibala, yeuh e schmutz.
image
200 x 100px
largeur du parent : 200px
et hop, pas de Layout Shift !
2
bah c'est bien beau mais moi je fais du Responsive et ma taille d'image au départ est variable, mettons 2000x1000 tiens !
<img src="(chemin)" alt="" width="2000" height="1000">image
2000 x 1000px
largeur du parent : 200px
bah forcément ça déborde !
3
<img src="(chemin)" alt="" width="2000" height="1000">largeur du parent : 200px
tu es bien taquin !
ça rentre en largeur mais c'est tout déformé verticalement
3
img {
max-width: 100%;
}Lorem Elsass Ipsum mitt picon bière munster du ftomi! Ponchour bisame. Bibbeleskaas jetz rossbolla sech choucroute un schwanz geburtstàg, Chinette dû, ìch bier deppfele schiesser. Flammekueche de knèkes Seppele gal! a hopla geburtstàg, alles fraü Chulia Roberts oder knäckes dûû blottkopf. Noch bredele schissabibala, yeuh e schmutz.
largeur du parent : 200px
Ah oui là on est bien !
Et l'espace est bien réservé avant même que l'image ne soit chargée
4
<img src="(chemin)" alt="" width="2000" height="1000">img {
max-width: 100%;
height: auto;
}<img src="(chemin)" alt="" width="2000" height="1000">Lorem Elsass Ipsum mitt picon bière munster du ftomi! Ponchour bisame. Bibbeleskaas jetz rossbolla sech choucroute un schwanz geburtstàg, Chinette dû, ìch bier deppfele schiesser. Flammekueche de knèkes Seppele gal! a hopla geburtstàg, alles fraü Chulia Roberts oder knäckes dûû blottkopf. Noch bredele schissabibala, yeuh e schmutz.
image
2000 x 1000px
largeur du parent : 200px
et hop, pas de Layout Shift !
4
height: auto permet au navigateur d'appliquer le ratio de l'image quelle que soit sa largeur d'affichage !
img {
max-width: 100%;
height: auto;
}width et height indiquent au navigateur le ratio de l'image
<img src="(chemin)" alt="" width="2000" height="1000">Lorem Elsass Ipsum mitt picon bière munster du ftomi! Ponchour bisame. Bibbeleskaas jetz rossbolla sech choucroute un schwanz geburtstàg, Chinette dû, ìch bier deppfele schiesser. Flammekueche de knèkes Seppele gal! a hopla geburtstàg, alles fraü Chulia Roberts oder knäckes dûû blottkopf. Noch bredele schissabibala, yeuh e schmutz.
largeur du parent : 200px
4
la couleur de fond de l'image s'applique même quand l'image n'est pas chargée, couvrant la surface de l'image grâce à son ratio connu du navigateur
img {
max-width: 100%;
height: auto;
background: gray;
}chouette astuce !
<img src="(chemin)" alt="" width="1024" height="768">img {
max-width: 100%;
height: auto;
background: gray;
}HTML :
Images et Layout Shifts
CSS :
<img src="kiwi.webp" loading="lazy"
width="..." height="..." alt="..."><img src="kiwi.webp" decoding="async" loading="lazy"
width="..." height="..." alt="..."><!-- Dans le <head> après
la feuille de styles pour ne pas la bloquer -->
<link rel="preload" as="image" href="hero.webp">Prévu pour plein de ressources : surtout fonts et images, mais aussi style, script, audio, vidéo, embed, object, etc
on suppose que cette image est critique et doit s'afficher dès que possible
<!-- Cette image de fond critique
est hautement prioritaire -->
<link rel="preload" as="image" href="hero.webp" fetchpriority="high">exemple pour un carousel :
<ul class="carousel">
<img src="img/carousel-1.jpg" fetchpriority="high">
<img src="img/carousel-2.jpg" fetchpriority="low">
<img src="img/carousel-3.jpg" fetchpriority="low">
<img src="img/carousel-4.jpg" fetchpriority="low">
</ul>optimisation des images
pour le Web
<picture>
<source type="image/avif" srcset="kiwi.avif">
<img src="kiwi.webp" alt="kiwi" decoding="async" loading="lazy"
width="3000" height="2000">
</picture>type permet de servir des format d'images différents selon la compatibilité navigateur
#old
=
jpg
#new
=
avif/webp
👍🏻
magick -quality 70 kiwi.jpg kiwi.jpg
magick -quality 70 kiwi.jpg kiwi.webp
magick -quality 70 kiwi.jpg kiwi.avif