Discover the basics of working with images and learn how to make them responsive using the HTML picture tag.

HTML provides us with the picture tag, which serves a similar purpose as the srcset attribute of the img tag, but with subtle differences.

The picture tag is ideal when you need to completely change an image or serve a different image format. One common use case is when serving WebP images, a format that is not widely supported yet. With the picture tag, you can specify a list of images, and browsers that support WebP will use the first image, falling back to JPG if necessary:

<picture>
  <source type="image/webp" srcset="image.webp">
  <img src="image.jpg" alt="An image">
</picture>

The source tag within the picture tag defines one or more formats for the images, while the img tag acts as the fallback for older browsers that do not support the picture tag.

For more versatility in image selection, you can add a media attribute to the source tag inside the picture tag. This allows you to define media queries for different images, similar to the srcset attribute:

<picture>
  <source media="(min-width: 500w)" srcset="dog-500.png" sizes="100vw">
  <source media="(min-width: 800w)" srcset="dog-800.png" sizes="100vw">
  <source media="(min-width: 1000w)" srcset="dog-1000.png" sizes="800px">
  <source media="(min-width: 1400w)" srcset="dog-1400.png" sizes="800px">
  <img src="dog.png" alt="A dog image">
</picture>

However, keep in mind that this use case can be more verbose compared to using the srcset attribute alone.

The picture tag is a relatively recent addition to HTML, but it is now widely supported by all major browsers except Opera Mini and IE (all versions).