Élément image

Le module précédent vous a montré comment l'attribut srcset vous permet de fournir des versions de différentes tailles de la même image. Le navigateur peut alors décider quelle version est la plus appropriée. Si vous souhaitez modifier complètement l'image, vous avez besoin de l'élément picture.

De la même manière que srcset s'appuie sur l'attribut src, l'élément picture s'appuie sur l'élément img. L'élément picture encapsule un élément img.

<picture>
 
<img src="image.jpg" alt="A description of the image.">
</picture>

Si aucun élément img n'est imbriqué dans l'élément picture, l'élément picture ne fonctionnera pas.

Comme pour l'attribut srcset, l'élément picture met à jour la valeur de l'attribut src dans cet élément img. La différence est que lorsque l'attribut srcset donne des suggestions au navigateur, l'élément picture fournit des commandes. Vous gardez ainsi le contrôle.

source

Vous pouvez spécifier plusieurs éléments source dans un élément picture, chacun avec son propre attribut srcset. Le navigateur exécute alors le premier qu'il peut.

Formats illustrés

Dans cet exemple, il y a trois images différentes dans trois formats différents:

<picture>
 
<source srcset="image.avif" type="image/avif">
 
<source srcset="image.webp" type="image/webp">
 
<img src="image.jpg" alt="A description of the image."
   
width="300" height="200" loading="lazy" decoding="async">
</picture>

Le premier élément source pointe vers une image au nouveau format AVIF. Si le navigateur est capable d'afficher des images AVIF, c'est le fichier image qu'il choisit. Sinon, il passe à l'élément source suivant.

Le deuxième élément source pointe vers une image au format WebP. Si le navigateur est capable d'afficher des images WebP, il utilisera ce fichier image.

Sinon, le navigateur reviendra au fichier image figurant dans l'attribut src de l'élément img. Cette image est au format JPEG.

Cela signifie que vous pouvez commencer à utiliser de nouveaux formats d'images sans sacrifier la rétrocompatibilité.

Dans cet exemple, l'attribut type indique au navigateur le type de format d'image spécifié.

Tailles d'image

Vous pouvez passer d'un format d'image à l'autre, mais aussi d'une taille d'image à l'autre. Utilisez l'attribut media pour indiquer au navigateur la largeur d'affichage de l'image. Placez une requête média dans l'attribut media.

<picture>
 
<source srcset="large.png" media="(min-width: 75em)">
 
<source srcset="medium.png" media="(min-width: 40em)">
 
<img src="small.png" alt="A description of the image."
   
width="300" height="200" loading="lazy" decoding="async">
</picture>

Ici, vous indiquez au navigateur que si la largeur de la fenêtre d'affichage est plus large que 75em, il doit utiliser la grande image. Entre le 40em et le 75em, le navigateur doit utiliser l'image de taille moyenne. Sous 40em, le navigateur doit utiliser la petite image.

Cette méthode diffère de l'utilisation des attributs srcset et sizes sur l'élément img. Dans ce cas, vous fournissez des suggestions au navigateur. L'élément source s'apparente davantage à une commande qu'à une suggestion.

Vous pouvez également utiliser le descripteur de densité de pixels dans l'attribut srcset d'un élément source.

<picture>
 
<source srcset="large.png 1x" media="(min-width: 75em)">
 
<source srcset="medium.png 1x, large.png 2x" media="(min-width: 40em)">
 
<img src="small.png" alt="A description of the image." width="300" height="200" loading="lazy" decoding="async"
   
srcset="small.png 1x, medium.png 2x, large.png 3x">
</picture>

Dans cet exemple, vous indiquez toujours au navigateur ce qu'il doit faire à différents points d'arrêt, mais il a désormais la possibilité de choisir l'image la plus adaptée à la densité en pixels de l'appareil.

Recadrage

Si vous avez uniquement besoin de diffuser des versions de taille différente de la même image, srcset est la meilleure option. Toutefois, si le rendu d'une image n'est pas satisfaisant dans des tailles plus petites, vous pouvez essayer d'en créer une version recadrée.

Les différentes images peuvent avoir des rapports de largeur et de hauteur différents pour mieux s'adapter à leur contexte. Par exemple, dans un navigateur mobile, vous pouvez utiliser un recadrage petit et haut, tandis que dans un navigateur d'ordinateur, vous souhaiterez peut-être utiliser un recadrage large et court.

Voici un exemple d'image héros dont le contenu et la forme sont modifiés en fonction de la largeur de la fenêtre d'affichage. Ajoutez les attributs width et height à chaque élément source.

<picture>
 
<source srcset="full.jpg" media="(min-width: 75em)" width="1200" height="500">
 
<source srcset="regular.jpg" media="(min-width: 50em)" width="800" height="400">
 
<img src="cropped.jpg" alt="A description of the image." width="400" height="400" loading="eager" decoding="sync">
</picture>

N'oubliez pas que vous ne pouvez pas modifier l'attribut alt en fonction de la source de l'image. Vous devez écrire un attribut alt qui décrit à la fois l'image en taille réelle et l'image recadrée.

Vous n'aurez probablement pas besoin d'utiliser l'élément picture pour la plupart de vos images responsives. Les attributs srcset et sizes de l'élément img couvrent de nombreux cas d'utilisation. Mais lorsque vous avez besoin d'un contrôle plus précis, l'élément picture est un outil puissant.

Il existe un type d'image pour lequel vous n'aurez peut-être pas besoin d'une solution: les icônes. Et maintenant !

Testez vos connaissances

Tester vos connaissances sur l'élément image

L'attribut srcset fournit ________ au navigateur, l'élément <picture> fournit ________.

commandes, suggestions
suggestions, commandes

Voici quelques-unes des fonctionnalités de l'élément <picture>:

Autres tailles
Autres formats
Recadrage alternatif
Densités alternatives
Autres formats