Les media queries des 4 couvrent tous les viewports.
Ce n’est pas une erreur, mais c’est inutile, le dernier srcset peut aller dans le
Juste avant 30rem (~480px), l’image chargée fait 440px, alors qu’il faudrait 480px pour les écrans de densité 1.
Sur les petits viewports, les densités sont le plus souvent >= 2, donc il faudrait fournir au moins une image x2.
On traitera ces sujets plus tard.
Les deux premières sources chargent une image de même ratio 2/1 et de même contenu visuel.
Ce sont des max-width, la seconde suffit.
On peut lui donner les deux tailles d’image, par contre, pour que les petits viewports ne chargent pas la grande.
Attention, on perd une caractéristique du code précédent, on y reviendra.
Soucis : il manque les descripteurs sur les images dans les srcset : x ou w ?
Une seule image dans le srcset -> interprété comme un 1x
La première source (de 0rem à ~48rem) a pour objectif de montrer une image de largeur variable, c’est un
descripteur w qu’il faut utiliser.
En fusionnant les deux premières , on a perdu la limitation de largeur d’image à 440px pour les
viewports < 30rem. En l’absence d’attribut sizes, sa valeur par défaut est 100vw.
(L’attribut sizes est obligatoire selon la spec HTML du WHATWG, mais toujours pas dans la version 5.2 du W3C…)
Avec un viewport de 30rem (~480px) :
● L’image 440x220 sera chargée sur un écran de densité < ~1.5, comme initialement
● L’image 750x375 sera chargée sur un écran de densité > ~1.5 (750/480), au lieu de 440x220
Dans le principe général des images responsives, on n’a en fait rien perdu, mais plutôt gagné en qualité visuelle sur
les petits viewports avec écrans haute densité. Mais ne pas servir une image plus grande pour les hautes densités
peut être un choix légitime. À arbitrer.
Dans le besoin exprimé, l’image est de même ratio pour tous les viewports < 1024px (~64rem).
On peut fusionner les deux premières et changer la hauteur de la troisième image.
Sur petits écrans, la valeur par défaut sizes="100vw" convient.
Mais ce n’est pas le cas sur plus grands écrans (>= 64rem =~ 1024px) où l’image doit occuper la demi largeur
uniquement, avec une limite à 740px. Le fallback dans src pourrait d’ailleurs être limité aussi à 740px.
Il n’y a qu’une image dans srcset, donc pas de risque de télécharger la « mauvaise » image trop grande dans
l’absolu, mais le navigateur « pense » avoir besoin d’une image pleine largeur.
On devrait pouvoir :
● Fournir une image moins large sur écrans de densité 1 et viewport < 1480px
● Fournir une image plus large sur écrans de densité supérieure
L’image se fige à 740px (92.5rem), taille
nécessaire aussi sur la tranche inférieure,
fixée à 85rem.
Donc pas besoin de avec
media query à 92.5rem.
La largeur d’image nécessaire est fixée par
rapport au palier supérieur :
75rem * 16px / 2 = 600px
Viewport >= 64rem
Viewport < 64rem