La balise <picture> permet de définir plusieurs sources à une balise <img>. Cet fonctionnalité permet de spécifier certaines sources d'images mieux adaptées à l'écran de l'utilisateur.

Par exemple, une balise <img> de base est utilisée à gauche. Remarquez comment le sujet perd de son importance lorsqu'il est affiché dans un format étroit. Tandis qu'à droite, une balise <picture> permet de changer la source de ladite image afin d'afficher une version au cadrage plus serré sur le sujet lorsque l'écran est étroit.

Jean Leloup
Photo: Valérian Mazataud Le Devoir

Pour définir une <picture> de base, il suffit de spécifier une balise <img> à l'intérieur de celle-ci.

Par exemple:

<picture>
  <img src="img.jpg">
</picture>

Cet exemple minimaliste affichera toujours la balise <img> avec son contenu original inclus dans l'attribut src. Bref, l'incorporation de la balise <picture> n'aura aucun effet.

Sources & conditions

Il est possible de spécifier une ou plusieurs sources alternatives grâce à la balise <source>.

Par exemple:

<picture>
  <source srcset="img-large.jpg" media="(min-width: 1000px)">
  <img src="img.jpg">
</picture>

Lorsque des <source> sont présentes, le navigateur les parcours une à la suite de l'autre et dès qu'une d'entre elles voit sa condition être respectée, la valeur de son srcset est attribuée au src de la balise <img> voisine.

Bref, si l'écran à une largeur équivalente ou supérieure à 1000px, img-large.jpg sera affichée, sinon img.jpg sera utilisée.

Il est possible d'utiliser l'ensemble des conditions offertes dans les média queries CSS.

Utilité

  • Recadrer une image selon l'espace disponible.

  • Afficher une image dans une résolution correspondant à celle de l'écran de l'utilisateur.

  • Afficher des images mieux agencées au thème de l'utilisateur foncé ou clair.

  • Éviter d'afficher des GIFs animés aux individus ayant spécifiés préférer éviter autant que possible les animations.

  • Fournir une image optimisée pour l'impression.