CSS Image Sprites
In this page:
.sprite {
width: length;
height: length;
background: url("sprite.png") no-repeat;
background-position: -x -y;
}
The Sprite Concept
An image sprite is a single image file that contains multiple separate graphics. This technique optimizes web performance by reducing the number of server requests needed to load multiple assets on your page.
Example: The Sprite Concept
<style>
.sprite-sheet {
width: 96px;
height: 32px;
background-image: linear-gradient(90deg, #e53935 0 32px, #1e88e5 32px 64px, #43a047 64px 96px);
margin-bottom: 8px;
}
.icon {
width: 32px;
height: 32px;
background-image: linear-gradient(90deg, #e53935 0 32px, #1e88e5 32px 64px, #43a047 64px 96px);
background-color: lightgray;
}
</style>
<p>One sprite sheet, 96×32px, holding 3 icons:</p>
<div class="sprite-sheet"></div>
<p>One window into it, showing only the first icon:</p>
<div class="icon"></div>
Sizing and Position coordinates
To display a specific icon, you define a fixed width and height on your display box, and use the background-position property to shift the sprite sheet coordinates so only your target icon aligns inside the box.
Example: Sizing and Position coordinates
<style>
.icon {
width: 32px;
height: 32px;
background-image: linear-gradient(90deg, #e53935 0 32px, #1e88e5 32px 64px, #43a047 64px 96px);
background-color: lightgray;
background-position: -32px 0;
}
</style>
<div class="icon"></div>
<p>Shifted left by 32px, so the blue icon now shows through the same window.</p>
Hover Effects with Sprites
One of the best features of image sprites is that you can create instant, pre-loaded hover animations. By arranging your normal and hover icons next to each other on the same sheet, you can change the background-position on hover to display the highlighted state instantly.
Example: Hover Effects with Sprites
<style>
.icon {
width: 32px;
height: 32px;
background-image: linear-gradient(180deg, #e53935 0 32px, #43a047 32px 64px);
background-color: lightgray;
background-position: 0 0;
}
.icon:hover {
background-position: 0 -32px;
}
</style>
<div class="icon"></div>
<p>Hover to instantly swap to the pre-loaded green icon stacked below it — no flicker, no second request.</p>
Designing a Clean Sprite Sheet
To keep your coordinates easy to calculate, you should arrange your icons on the sprite sheet in a clean, mathematical grid structure (like using consistent 32x32px or 50x50px bounding boxes).
Example: Designing a Clean Sprite Sheet
<style>
.icon {
width: 32px;
height: 32px;
display: inline-block;
background-image: linear-gradient(90deg, #e53935 0 32px, #1e88e5 32px 64px, #43a047 64px 96px, #fdd835 96px 128px);
background-color: lightgray;
}
.p0 { background-position: 0 0; }
.p1 { background-position: -32px 0; }
.p2 { background-position: -64px 0; }
.p3 { background-position: -96px 0; }
</style>
<div class="icon p0"></div> <code>0 0</code>
<div class="icon p1"></div> <code>-32px 0</code>
<div class="icon p2"></div> <code>-64px 0</code>
<div class="icon p3"></div> <code>-96px 0</code>
<p>Every icon sits at a clean multiple of 32px, so the offsets are trivial to calculate.</p>
Sprites vs. Modern Vector Fonts
While image sprites were historically essential for optimizing site performance, modern websites often use vector icon fonts (like Font Awesome) or inline SVGs. Vector icons scale cleanly to any size, are highly editable with CSS, and do not pixelate like sprite sheets do.
Example: Sprites vs. Modern Vector Fonts
<style>
.icon-sprite {
width: 32px;
height: 32px;
display: inline-block;
vertical-align: middle;
background-color: #fbc02d;
}
.icon-svg {
width: 32px;
height: 32px;
vertical-align: middle;
fill: #fbc02d;
}
</style>
<p>Sprite-based icon (fixed pixel size, needs a matching sheet):
<span class="icon-sprite"></span>
</p>
<p>Modern alternative — an inline SVG icon (scales to any size, recolors with CSS, no sprite sheet needed):
<svg class="icon-svg" viewBox="0 0 24 24"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14l-5-4.87 6.91-1.01z"/></svg>
</p>
- Forgetting to write negative pixel coordinate values when shifting your background positions.
- Uneven or chaotic spacing on your sprite sheet, leading to complex CSS coordinate math.
- Attempting to scale sprite icons dynamically using standard font-size properties.
- An image sprite combines multiple separate graphics into one single image file to reduce server requests.
- Define explicit dimensions on your display box, and use background-position to shift the sprite sheet coordinates cleanly.
- Sprites are raster graphics that can pixelate on retina screens; use vector icon fonts or inline SVGs for modern, scalable designs.
Standard image sprites and background position properties have native support across all modern and legacy web browsers.
Chapter Quiz — Complete all 22 topics to unlock
0/22 topics done
Complete these topics first:
- CSS Combinators
- CSS Pseudo-classes
- CSS Pseudo-elements
- CSS Opacity
- CSS Navigation Bar
- CSS Vertical Navbar
- CSS Horizontal Navbar
- CSS Dropdowns
- CSS Advanced Dropdowns
- CSS Image Gallery
- CSS Image Sprites
- CSS Attribute Selectors
- CSS Forms
- CSS Counters
- CSS Specificity
- CSS Specificity Hierarchy
- CSS Variables
- CSS !important
- CSS Box Sizing
- CSS Media Queries
- CSS Pointer Events
- CSS Outline