Skip to main content
🎨 CSS as a design system·Module B6 · Lesson 4
TaskBuild three boxes with locked ratios. .box-square (aspect-ratio: 1, width: 200px, bg #fee). .box-video (aspect-ratio: 16/9, width: 100%, max-width: 320px, bg #eef). .box-portrait (aspect-ratio: 3/4, width: 150px, bg #efe).

aspect-ratio: stop the height calculations

75 XP6 min
Theory

Lock the proportions

.video { aspect-ratio: 16 / 9; width: 100%; }
.square { aspect-ratio: 1; }
.portrait { aspect-ratio: 3 / 4; }

Set EITHER width OR height; the browser computes the other. No more "padding-bottom: 56.25%" hacks.

When this saves you

  • Video / iframe embeds. YouTube needs 16:9. Twitch needs 16:9. Vimeo needs 16:9. aspect-ratio sets it once.
  • Image cards where you want consistent height regardless of source-image dimensions:
.card-image {
  aspect-ratio: 4 / 3;
  width: 100%;
  object-fit: cover;     /* crop to fit, don't squish */
}
  • Hero blocks with text overlay — the text always has the same proportional vertical space.

With img tags (use the attributes too)

Even when you set CSS aspect-ratio, the <img> tag should have its OWN width + height attributes for CLS prevention (A7 lesson 7). Browser uses the attributes BEFORE the image loads. CSS aspect-ratio is the canonical answer for non-image elements.

Sub-properties

aspect-ratio: auto 16 / 9 — "intrinsic if the element has natural dimensions, else 16:9." Useful for <img> fallback behavior.

🔒

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.