just a random image from lorem picsum
This is just a random LoremPicsum image

Preventing Content Layout Shifts with Images using Tailwind CSS

Content layout shift happens when elements move around as images load, creating a jarring user experience. This is especially problematic on mobile devices where slow connections can cause significant delays in image loading.

The Problem

When an image loads without predefined dimensions, the browser initially renders a collapsed element (0 height), then suddenly expands it when the image loads, pushing content down and disrupting the user’s reading flow.

The Solution: Reserve Space with Aspect Ratios

The key is to reserve the correct amount of space before the image loads using Tailwind’s aspect ratio utilities.

Basic Image with Layout Shift Prevention

<!-- Bad: No space reserved, causes layout shift -->
<img 
  src="https://picsum.photos/600/300" 
  alt="Example image"
  class="w-full"
/>

<!-- Good: Space reserved with aspect ratio -->
<img 
  src="https://picsum.photos/600/300" 
  alt="Example image"
  class="w-full h-auto aspect-[600/300] object-cover"
  loading="lazy"
/>

Complete Example with Figure Element

<figure class="mx-auto max-w-2xl">
  <img 
    src="https://picsum.photos/800/400" 
    alt="Landscape photo"
    class="w-full h-auto aspect-[2/1] object-cover rounded-lg"
    loading="lazy"
  />
  <figcaption class="mt-2 text-center text-sm text-gray-600">
    A beautiful landscape that loads without shifting content
  </figcaption>
</figure>

Responsive Images with Different Aspect Ratios

<img 
  src="https://picsum.photos/600/400" 
  alt="Responsive image"
  class="w-full h-auto aspect-[3/2] md:aspect-[16/9] object-cover"
  loading="lazy"
/>
<div class="grid grid-cols-2 md:grid-cols-3 gap-4">
  <img 
    src="https://picsum.photos/300/300?random=1" 
    alt="Gallery image 1"
    class="w-full h-auto aspect-square object-cover rounded"
    loading="lazy"
  />
  <img 
    src="https://picsum.photos/300/300?random=2" 
    alt="Gallery image 2"
    class="w-full h-auto aspect-square object-cover rounded"
    loading="lazy"
  />
  <img 
    src="https://picsum.photos/300/300?random=3" 
    alt="Gallery image 3"
    class="w-full h-auto aspect-square object-cover rounded"
    loading="lazy"
  />
</div>

Key Tailwind Classes Explained

Common Aspect Ratios

<!-- Square -->
<img class="aspect-square" />

<!-- Standard photo -->
<img class="aspect-[4/3]" />

<!-- Widescreen -->
<img class="aspect-[16/9]" />

<!-- Custom ratio -->
<img class="aspect-[600/300]" />

Pro Tips

  1. Always specify aspect ratios for images to prevent layout shift
  2. Use loading="lazy" for images below the fold
  3. Use object-cover when you want to fill the space
  4. Use object-contain when you want to show the full image
  5. Test on slow connections to verify no layout shifts occur

This approach ensures smooth loading experiences and better Core Web Vitals scores, particularly for Cumulative Layout Shift (CLS).