HTML Responsive Images

HTML Responsive Images (<picture>, srcset, sizes)

HTML Responsive Images make your web pages load faster and look better on any device. In this article, we’ll explore how to use the <picture> element along with the srcset and sizes attributes to create responsive images. These techniques allow you to serve different images based on the user’s screen size and resolution.

Introduction

Modern websites need to adapt to various devices—desktops, tablets, and smartphones. Instead of serving the same image to everyone, responsive images allow you to serve the most appropriate version based on the device’s capabilities. This not only improves the user experience but also reduces load times and saves bandwidth.

The <picture> Element

The <picture> element gives you the flexibility to specify different image sources for different scenarios. You can change the image based on screen width, resolution, or even device orientation. This is especially useful for art direction, where you might want a different crop or composition for mobile users compared to desktop users.

Example:

<picture>
  <source media="(min-width: 800px)" srcset="images/landscape-large.jpg">
  <source media="(min-width: 480px)" srcset="images/landscape-medium.jpg">
  <img src="images/landscape-small.jpg" alt="Beautiful landscape">
</picture>

How it works:

  • When the viewport is at least 800 pixels wide, the browser uses landscape-large.jpg.
  • If the viewport is at least 480 pixels wide but less than 800 pixels, it uses landscape-medium.jpg.
  • For smaller devices, it falls back to landscape-small.jpg.

The srcset Attribute

The srcset attribute allows you to list multiple image files along with their widths or pixel densities. The browser picks the best match based on the device’s resolution and viewport size. This approach is great for delivering high-resolution images to devices with retina displays while keeping the file size lower for standard displays.

Example:

<img 
  src="images/flower-small.jpg" 
  srcset="
    images/flower-small.jpg 500w, 
    images/flower-medium.jpg 1000w, 
    images/flower-large.jpg 1500w" 
  alt="Colorful flower">

Explanation:

  • 500w, 1000w, and 1500w indicate the width of each image.
  • The browser automatically selects the image that best fits the current viewport and screen resolution.

The sizes Attribute

The sizes attribute works with srcset to inform the browser how much space the image will take up on the page. By providing this information, the browser can choose the most appropriate image from your srcset list before the page is fully rendered.

Example:

<img 
  src="images/city-small.jpg" 
  srcset="
    images/city-small.jpg 600w, 
    images/city-medium.jpg 1200w, 
    images/city-large.jpg 1800w" 
  sizes="(max-width: 600px) 100vw, (max-width: 1200px) 50vw, 33vw" 
  alt="City skyline at sunset">

Explanation:

  • For viewports up to 600 pixels, the image takes up the full viewport width (100vw).
  • For viewports up to 1200 pixels, it takes up half the viewport width (50vw).
  • For larger viewports, it takes about a third of the width (33vw).

Real World Examples

Example 1: Responsive Hero Image

A website might have a hero image that needs to look great on both mobile devices and large desktop screens. By using <picture>, you can serve a cropped version for mobile and a wide, detailed version for desktops.

<picture>
  <source media="(min-width: 1024px)" srcset="images/hero-desktop.jpg">
  <source media="(min-width: 480px)" srcset="images/hero-tablet.jpg">
  <img src="images/hero-mobile.jpg" alt="Stunning cityscape">
</picture>

Example 2: Product Gallery

An online store can use srcset and sizes to ensure that product images are crisp on high-resolution displays while being optimized for smaller screens.

<img 
  src="images/product-small.jpg" 
  srcset="
    images/product-small.jpg 400w, 
    images/product-medium.jpg 800w, 
    images/product-large.jpg 1200w" 
  sizes="(max-width: 600px) 80vw, (max-width: 1200px) 50vw, 33vw" 
  alt="Modern chair in living room">

Conclusion

Using responsive images with <picture>, srcset, and sizes is an essential skill for modern web development. These techniques ensure your images look great and load quickly on any device. Experiment with these attributes to optimize your site for various screen sizes and improve the overall user experience.

Further Reading