CSS aspect-ratio Guide: Say Goodbye to the Padding Hack
Maintaining proportional sizing for images and video embeds used to require messy CSS workarounds. Here is how to handle it cleanly with a single line of modern CSS.

The Era of "Padding-Top" is Over
In the field, creating a responsive card grid often means enforcing uniform image proportions—like a strict 16:9 or 1:1 ratio. Before modern CSS, achieving this fluidly meant relying on a bizarre workaround known as the "padding hack."
.image-wrapper {
position: relative;
width: 100%;
padding-top: 56.25%; /* Magic number for 16:9 (9 ÷ 16) */
}
.image-wrapper img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
This trick leveraged the fact that percentage-based vertical padding is calculated based on the element's width. We had to create a fake empty box and absolutely position the actual content inside it. It worked, but it was tedious and completely unintuitive.
Today, the aspect-ratio property solves this entirely.
The Basics: One Line to Rule Proportions
The syntax is exactly what you would expect. You just provide the ratio as width / height.
.box {
width: 100%;
aspect-ratio: 16 / 9;
background-color: #fca5a5;
}
In Practice: Pair it with object-fit
In a real project, you rarely deal with perfectly cropped images. When users upload random photos into your CMS, you need to constrain them without squishing or stretching the subject.
To do this, always pair aspect-ratio directly on the <img> tag with object-fit: cover;.
.card-thumbnail {
width: 100%;
aspect-ratio: 4 / 3;
object-fit: cover; /* Prevents distortion, acts like background-size: cover */
border-radius: 8px;
}
aspect-ratio property calculates the missing dimension. If you set the width, it figures out the height. When using this inside a flex container, it is often best to explicitly define width: 100% to ensure the browser computes the dimensions predictably.
Takeaways
- The complex "padding-top hack" with absolute positioning is officially obsolete.
- Use
aspect-ratio: 16 / 9;for an intuitive, single-line solution. - Always combine it with
object-fit: cover;when styling images to prevent stretching. - It is perfect for standardizing thumbnail grids, hero banners, and responsive video iframes.