Skip to main content
📄 HTML & the platform·Module A7 · Lesson 7
TaskBuild a hero block: <div class='hero'> containing an <img src='/hero.jpg' alt='Hero' width='1200' height='630'>. CSS: .hero { aspect-ratio: 1200 / 630; width: 100%; }, .hero img { width: 100%; height: auto; }.

Layout shift: width/height + aspect-ratio

100 XP7 min
Theory

CLS (Cumulative Layout Shift)

Things you've felt: you start reading an article, an ad image loads above your paragraph, the page jumps and you lose your place. The Web Vitals metric for this is CLS — and Google ranks pages with high CLS lower.

The fix: tell the browser the size of EVERY image BEFORE it loads, so the browser reserves space.

<img src="/hero.jpg" alt="…" width="1200" height="630" />

Modern browsers compute aspect ratio from width/height attributes and reserve space even when CSS makes the image fluid (max-width: 100%; height: auto). NO JUMP.

aspect-ratio for non-image elements

.video-wrapper {
  aspect-ratio: 16 / 9;
  width: 100%;
}

For elements that need to maintain a ratio (video containers, hero blocks): aspect-ratio is the modern, declarative answer. Replaces the old "padding-bottom: 56.25%" hack.

CSS containment

article {
  contain: layout style;
}

Hint to the browser: layout changes inside this element don't affect anything outside. Reduces re-layout work when a child loads in.

Test in DevTools

Chrome DevTools → Performance tab → "Web Vitals" overlay. Visualizes layout shifts as they happen with red boxes.

🔒

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial — card required, cancel anytime.

Sign up — free trial →

First 15 lessons in each track are free. No card needed for those.

PreviousNext lesson →

Get one Python or web tip a day — by email

Short, hand-written, no spam. Unsubscribe in one click.