Understanding the background-size Property
The background-size property represents one of the most fundamental yet powerful tools in modern CSS for controlling how background images render within elements. When you apply a background image to an element using the background-image property, the default behavior tiles the image at its full dimensions. This default behavior often leads to suboptimal visual presentations, whether the image appears too large, too small, or improperly scaled for the container.
The background-size property solves these challenges by providing precise control over the dimensions of background images, enabling developers to create visually stunning designs that scale gracefully across different screen sizes and device types. When working with a professional web development team, implementing proper background image handling becomes an essential part of creating polished, high-performance websites.
The background-size property belongs to the CSS Backgrounds and Borders Module, which has evolved through multiple specification levels. The property gained widespread browser support starting with CSS3 and has remained a cornerstone of responsive web design ever since. Understanding how to effectively use background-size is essential for creating professional-quality websites that perform well and look polished across all viewing contexts. As defined in the W3C CSS Backgrounds Module Level 4 specification, this property has become essential for modern web development.
Syntax Overview
The background-size property accepts several different value types:
| Value | Description |
|---|---|
auto | Default - uses natural image dimensions |
cover | Scale to cover entire container |
contain | Scale to fit within container |
100px | Single value sets width, height auto |
100px 200px | Explicit width and height |
50% | Percentage of container |
The syntax allows for one or two values. When one value is provided, it sets the width while the height is calculated automatically to maintain the image's aspect ratio.
The auto Value
The auto keyword represents the initial value for background-size and tells the browser to use the intrinsic dimensions of the background image. When background-size is set to auto, the image maintains its original proportions while being sized according to its natural dimensions. This behavior is useful when you want to preserve the exact appearance of an image without any scaling transformation.
However, auto alone doesn't prevent tiling--the image will still repeat to fill the background area if it's smaller than the container. To prevent tiling while maintaining natural sizing, you would combine auto with background-repeat: no-repeat. According to MDN Web Docs, the auto value is particularly useful when working with images that are already optimized for specific display sizes.
1/* Default - uses natural image dimensions */2background-size: auto;3 4/* Scale to cover entire container */5background-size: cover;6 7/* Scale to fit within container */8background-size: contain;9 10/* Single value - width, height auto */11background-size: 100px;12 13/* Two values - width and height */14background-size: 100px 200px;15 16/* Percentage of container */17background-size: 50%;18 19/* Width 100%, height auto */20background-size: 100% auto;The cover Value
What cover Does
The cover value scales the background image to be as large as possible while ensuring that the entire background area is completely covered by the image. This means the image will fill the entire element, extending beyond its boundaries if necessary, but it will never leave any portion of the background area uncovered. The aspect ratio of the image is preserved, preventing distortion, but portions of the image may be cropped from the edges depending on the difference in aspect ratios between the image and the container element.
When you apply background-size: cover to a background image, the browser calculates the minimum scale factor that will make the image large enough to completely cover the element. This calculation considers both the width and height of the container, scaling the image until one dimension matches the container exactly while the other dimension exceeds it. As explained by Cloudinary's guide on background image techniques, the excess is then cropped, centered by default through the background-position property.
Visual Behavior of cover
Consider a container that is wider than it is tall (landscape orientation) with a background image that is taller than it is wide (portrait orientation). When background-size: cover is applied, the image scales up until its height matches the container's height. At this point, the image's width exceeds the container's width, and the excess width is cropped from both sides equally, keeping the image centered. The opposite occurs when the container is taller than it is wide--the image scales until its width matches, and the excess height is cropped from top and bottom.
This behavior makes cover ideal for hero sections, full-width banners, and any design element where you want a visually striking background image that completely fills its container without leaving any empty space.
When to Use cover
The cover value is ideal for:
- Hero sections and full-width banners
- Immersive background treatments
- Any design where you want a striking background that completely fills its container
- Situations where complete coverage is more important than showing the entire image
1.hero-section {2 background-image: url('hero-image.jpg');3 background-size: cover;4 background-position: center;5 background-repeat: no-repeat;6 height: 60vh;7 width: 100%;8}9 10/* Focus on specific subject */11.hero-with-subject {12 background-size: cover;13 background-position: 70% 30%; /* Position subject */14}The contain Value
What contain Does
The contain value scales the background image to be as large as possible while ensuring that the entire image fits within the background area. Unlike cover, which may crop portions of the image, contain guarantees that the full image is always visible. This means the image will be entirely contained within the element, but it may not fill the entire background area if the aspect ratios differ between the image and the container.
When contain is applied, the browser calculates the maximum scale factor that will allow the image to fit completely within the container. If the container is wider than the image's aspect ratio allows, empty space appears on the left and right sides. If the container is taller, empty space appears at the top and bottom. This empty space reveals whatever is behind the background layer, typically the background-color set on the same element.
Visual Behavior of contain
With contain, the image always maintains its full visibility but may not fill the entire container. The image is scaled to fit entirely within the element, with any remaining space distributed based on the background-position value. By default, the image is positioned at the top-left corner, but this can be adjusted to center the image or position it in any other location within the container.
When to Use contain
The contain value is perfect for:
- Product images that must remain fully visible
- Logos and icons on cards
- Pattern backgrounds where full tiles matter
- Any situation where showing the complete image is essential
1.product-card {2 background-image: url('product.jpg');3 background-size: contain;4 background-position: center;5 background-repeat: no-repeat;6 height: 200px;7 width: 100%;8 background-color: #f5f5f5;9}10 11/* Pattern with controlled tile size */12.pattern-background {13 background-image: url('texture.png');14 background-size: 50px 50px;15 background-repeat: repeat;16}Length and Percentage Values
Using Specific Lengths
Fixed units like pixels, ems, or rems set explicit dimensions for the background image:
/* Width 200px, height auto */
.icon {
background-size: 200px;
}
/* Width 100px, height 100px - may distort */
.thumbnail {
background-size: 100px 100px;
}
/* Using relative units */
.logo {
background-size: 3rem auto;
}
When you specify a length value such as pixels or em units for background-size, you're setting an explicit dimension for the background image's width or height. A single length value sets only the width, with the height calculated automatically to maintain aspect ratio. Two length values set both width and height explicitly, potentially distorting the image if the proportions differ from the original.
Using Percentages
Percentage values for background-size are calculated relative to the dimensions of the element's background positioning area:
/* Width 100% of container, height auto */
.full-width-banner {
background-size: 100% auto;
}
/* Both dimensions as percentage */
.responsive-bg {
background-size: 50% 50%;
}
Percentage values are calculated relative to the element's background positioning area, which is determined by the background-origin property. By default, this is the padding-box, which includes the padding but not the border. Using percentages allows for responsive sizing that scales proportionally with the container element. As specified in the W3C CSS Backgrounds Module Level 4, percentage-based sizing is especially powerful in responsive design, where elements may change size across different viewport widths.
Combining with Other Background Properties
background-position
The background-position property works in conjunction with background-size to control where the background image is placed within the element. After the image is scaled according to background-size, background-position determines its location. This combination is particularly important when using cover or contain, as the cropping or empty space created by these values can be controlled through positioning.
/* Center the scaled image */
.hero {
background-size: cover;
background-position: center center;
}
/* Focus on specific subject */
.hero-with-subject {
background-size: cover;
background-position: 70% 30%;
}
For cover backgrounds, positioning determines which portion of the image remains visible after cropping. For contain backgrounds, positioning determines where the fully-visible image is placed within the container.
background-repeat
By default, background images tile to fill the container. When background-size is used, this tiling behavior continues unless background-repeat is set to no-repeat. This combination creates powerful possibilities for creating tiled patterns with controlled tile sizes.
/* Single non-repeating image */
.hero {
background-size: cover;
background-repeat: no-repeat;
}
/* Pattern with controlled tile size */
.pattern {
background-image: url('tile.png');
background-size: 50px 50px;
background-repeat: repeat;
}
background-attachment
The background-attachment property controls whether the background image scrolls with the element's content or remains fixed relative to the viewport. While it doesn't directly affect how the image is sized, it does impact how the sized image behaves during scrolling, which is an important consideration for user experience.
.parallax-effect {
background-size: cover;
background-attachment: fixed;
}
Responsive Background Images
Using Media Queries
Media queries allow you to apply different background-size values based on viewport dimensions, enabling completely different visual treatments across device sizes. This approach is essential for creating truly responsive designs that optimize the background image experience for each context. For websites built by an experienced web development agency, implementing responsive background images is a standard practice that enhances both aesthetics and performance.
/* Mobile-first approach */
.hero {
background-image: url('hero-mobile.jpg');
background-size: cover;
}
/* Tablet and up */
@media (min-width: 768px) {
.hero {
background-image: url('hero-tablet.jpg');
}
}
/* Desktop */
@media (min-width: 1200px) {
.hero {
background-image: url('hero-desktop.jpg');
}
}
This technique allows you to serve appropriately sized images for each device, improving performance by avoiding unnecessarily large downloads on mobile devices while providing high-quality imagery on larger screens.
Resolution Switching with image-set
The image-set() function provides a native CSS solution for serving different background images based on the device's pixel ratio, ensuring sharp visuals on high-density displays without requiring media queries.
.hero {
background-image: image-set(
'hero.jpg' 1x,
'[email protected]' 2x,
'[email protected]' 3x
);
background-size: cover;
}
This approach automatically selects the most appropriate image based on the display's capabilities, similar to how the srcset attribute works for img elements. As covered in NatClark's 2025 guide to responsive background images, these techniques are essential for creating modern, performant websites. Combined with proper image optimization techniques, your background images will load quickly while looking sharp on any device.
Performance Impact
98%
Browser support for background-size
60%
Page load improvement with optimized images
3x
Image size difference between mobile and desktop
Performance Considerations
Image Size Optimization
The performance of background images directly impacts page load times and user experience. Large, uncompressed background images can significantly slow down page rendering, especially on mobile networks. Optimizing background images involves several strategies: using appropriate file formats (WebP for modern browsers, JPEG with optimization for broader compatibility), compressing images to reduce file size without unacceptable quality loss, and serving correctly sized images for each context.
When using background-size: cover, the background image should be sized appropriately for the largest viewport where it will display. Serving a 4000-pixel-wide image for a container that never exceeds 1200 pixels wastes bandwidth and slows page loads. Conversely, serving too small an image and relying on cover to scale it up results in blurry, pixelated visuals. Implementing these optimization strategies is a key service offered by professional web development services that prioritize performance.
Rendering Performance
The browser's process of scaling and positioning background images occurs during the rendering phase. While modern browsers handle these operations efficiently, there are performance implications to consider, especially for animations or scroll effects involving background images. Complex calculations for cover and contain scaling, combined with scrolling, can impact frame rates on lower-powered devices.
To optimize rendering performance, consider using the will-change property to inform the browser about upcoming changes, though this should be used sparingly. Avoid animating background-size directly, as this triggers expensive recalculations. Instead, consider using transform: scale() on pseudo-elements for smoother scaling animations.
Lazy Loading Considerations
Background images don't automatically lazy load like img elements with loading="lazy". To defer loading of off-screen background images, consider using Intersection Observer API to detect when elements enter the viewport, then apply the background-image property at that point. This technique can significantly improve initial page load times for pages with many background images.
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.backgroundImage = `url(${entry.target.dataset.bg})`;
observer.unobserve(entry.target);
}
});
});
document.querySelectorAll('[data-bg-lazy]').forEach(el => {
observer.observe(el);
});
Understanding the core values and their use cases
auto
Uses the image's natural dimensions. Preserves original proportions without scaling.
cover
Scales image to completely cover container. May crop edges but never leaves empty space.
contain
Scales image to fit entirely within container. May leave empty space but never crops.
Length/Percentage
Explicit control over dimensions using units or percentages relative to container.
Frequently Asked Questions
Sources
- MDN Web Docs - Resizing background images with background-size
- MDN Web Docs - background-size property reference
- W3C CSS Backgrounds Module Level 4
- NatClark - How to Make Background Image Responsive: Complete 2025 Guide
- Cloudinary - 6 Ways to Stretch a Background Image with CSS
- Can I Use - CSS3 background-size