How to Maintain Image Aspect Ratios in Responsive Web Design

Share this article

Responsive images

Consider a typical set of image gallery thumbnails:

<ul>
  <li><a href="#"><img src="https://lorempixel.com/320/180/sports" /></a></li>
  <li><a href="#"><img src="https://lorempixel.com/320/180/city" /></a></li>
  <li><a href="#"><img src="https://lorempixel.com/352/198/technics" /></a></li>
</ul>
We can show this gallery at any size in a responsive page template using CSS (essential properties shown):
ul
{
  width: 100%;
  padding: 0;
  margin: 0 0 2em 0;
  list-style-type: none;
}

li
{
  float: left;
  width: 33.3%;
  padding: 0;
  margin: 0;
  background-color: #000;
  border: 10px solid #fff;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  overflow: hidden;
}

li a
{
  display: block;
  width: 100%;
}

img
{
  display: block;
  max-width: 100%;
}
This works well because all our images have the same 16:9 aspect ratio. The height of the image is exactly 56.25% of the width (9 divided by 16 expressed as a percentage). Aspect ratio example images in a row However, we web designers are paranoid: people conspire against us and supply photographs in an infinite range of sizes and aspect ratios, e.g.
<ul>
  <li><a href="#"><img src="https://lorempixel.com/320/180/sports" /></a></li>
  <li><a href="#"><img src="https://lorempixel.com/320/320/city" /></a></li>
  <li><a href="#"><img src="https://lorempixel.com/200/150/technics" /></a></li>
</ul>
Responsive aspect ratio examples - part 2 There are various solutions to this problem:
  1. We could resize every image by hand. That’s time-consuming and tedious.
  2. We could implement a clever automated server-based image resizing solution. That could take a while and resulting images may not be as polished or optimized as we like.
  3. We could throw a diva-like tantrum and refuse to work under such conditions. Of course, that’s unprofessional and none of us would resort to such tactics (too often).
Or can we use CSS to solve the issue? We can, but it’s not as straight-forward as you may expect. In the old fixed-width design days we would have known the width of our image placeholder. If it was 160px, we could make the height 90px and leave early for a beer. In this example, our width is 33.3% of the container minus 20px for the border on the left and right-hand edges. It could be any size so setting a fixed height will impede our required aspect ratio.

The Percentage Padding Ploy

A little-known quirk of padding is that setting a top or bottom percentage bases it on the width of the containing block. If your block is 100px in width, padding-top: 30%; will equate to 30 pixels. I suspect this was done to make rendering calculations easier since element heights are normally determined by their content. Besides, if you had a fixed-height parent of 300px and set padding-top: 200%; on a child, the parent would become at least 600px — thus leading to a recursive cascade which breaks the web. Whatever the reason, it’s very useful since it permits you to set an intrinsic ratio, e.g.
#element
{
	position: relative;
	height: 0;
	padding: 56.25% 0 0 0;
}
This element will retain a 16:9 ratio based on the width of the container. The height has been set at 0px but, since we have set position: relative;, we can absolutely position any child element. As far as I’m aware, the padding trick was first highlighted by Thierry Koblentz to create responsive videos, but the same concept can be applied to images or any other content. Let’s update our thumbnail CSS:
li a
{
  display: block;
  width: 100%;
  position: relative;
  height: 0;
  padding: 56.25% 0 0 0;
  overflow: hidden;
}

img
{
  position: absolute;
  display: block;
  max-width: 100%;
  max-height: 100%;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
}
The result will show the image with black borders if it does not have a matching 16:9 dimension: Responsive aspect ratio examples - example 3
View the demonstration code… Play around with the CSS. Removing the image max-width or max-height can apply cropping effects rather than resizing. I hope you find it useful. If you’re interesting in learning more about Responsive Web Design, check out our new book, Jump Start Responsive Web Design. It’s tech edited by Craig Buckler, the author of this article.

Frequently Asked Questions on Maintaining Image Aspect Ratios in Responsive Web Design

What is the importance of maintaining image aspect ratios in responsive web design?

Maintaining image aspect ratios in responsive web design is crucial for several reasons. Firstly, it ensures that images do not appear distorted or stretched on different screen sizes. This is particularly important in today’s digital age where users access websites from a variety of devices, including desktops, laptops, tablets, and smartphones. Secondly, maintaining image aspect ratios can enhance the overall aesthetic appeal of a website, leading to a better user experience. Lastly, it can also contribute to faster page load times, which can improve SEO rankings and user engagement.

How can I maintain the aspect ratio of images in CSS?

CSS offers several techniques to maintain the aspect ratio of images. One common method is to use the ‘max-width’ property and set it to ‘100%’. This ensures that the image scales down if it has to, but never scales up to be larger than its original size. Another technique is to use the ‘object-fit’ property, which provides more control over how an image should be resized to fit its container while preserving its aspect ratio.

What are the common mistakes to avoid when maintaining image aspect ratios?

Some common mistakes to avoid include stretching or squishing images to fit a particular space, not testing images on different screen sizes, and not optimizing images for web use. These mistakes can lead to distorted images, slow page load times, and a poor user experience.

How does maintaining image aspect ratios contribute to SEO?

Maintaining image aspect ratios can contribute to SEO in several ways. Firstly, it can improve page load times, which is a key ranking factor for search engines like Google. Secondly, it can enhance the user experience, leading to lower bounce rates and higher user engagement, which can also positively impact SEO rankings.

What tools can I use to maintain image aspect ratios?

There are several tools available that can help maintain image aspect ratios. These include image editing software like Adobe Photoshop or GIMP, which allow you to manually adjust the aspect ratio of images. There are also online tools and plugins that can automatically resize images while maintaining their aspect ratio.

How does maintaining image aspect ratios affect mobile responsiveness?

Maintaining image aspect ratios is crucial for mobile responsiveness. If images are not properly scaled, they can appear distorted or pixelated on smaller screens. This can negatively impact the user experience and lead to higher bounce rates.

Can I use CSS Grid to maintain image aspect ratios?

Yes, CSS Grid is a powerful tool that can be used to maintain image aspect ratios. It allows for more control over the layout and sizing of elements, including images, making it easier to create a responsive design that looks good on all screen sizes.

What is the role of the ‘object-fit’ property in maintaining image aspect ratios?

The ‘object-fit’ property in CSS controls how an image should be resized to fit its container while preserving its aspect ratio. It offers several values, including ‘fill’, ‘contain’, and ‘cover’, each providing a different way to resize the image.

How can I optimize images for faster page load times?

There are several ways to optimize images for faster page load times. These include compressing images, using the correct image format, and implementing lazy loading. It’s also important to maintain the aspect ratio of images to ensure they load correctly and quickly.

What is the difference between ‘contain’ and ‘cover’ in the ‘object-fit’ property?

The ‘contain’ value scales the image to fit its container while maintaining its aspect ratio, ensuring the entire image is visible. On the other hand, the ‘cover’ value scales the image to cover the entire container, potentially cropping the image in the process. Both values can be useful depending on the desired effect.

Craig BucklerCraig Buckler
View Author

Craig is a freelance UK web consultant who built his first page for IE2.0 in 1995. Since that time he's been advocating standards, accessibility, and best-practice HTML5 techniques. He's created enterprise specifications, websites and online applications for companies and organisations including the UK Parliament, the European Parliament, the Department of Energy & Climate Change, Microsoft, and more. He's written more than 1,000 articles for SitePoint and you can find him @craigbuckler.

CSS3HTML5 Tutorials & Articlesresponsive web design
Share this article
Read Next
Get the freshest news and resources for developers, designers and digital creators in your inbox each week