Tutorials
THE WORLD'S LARGEST WEB DEVELOPER SITE

CSS Image Sprites

Image Sprites

 

An image sprite is a collection of images put into a single image.

A web page with many images can take a long time to load and generates multiple server requests.

Using image sprites will reduce the number of server requests and save bandwidth.

Image Sprites - Simple Example

 

Instead of using three separate images, we use this single image ("img_navsprites.gif"):

navigation images

With CSS, we can show just the part of the image we need.

In the following example the CSS specifies which part of the "img_navsprites.gif" image to show:

Example

#home {
   width : 46px;
   height : 44px;
   background : url(img_navsprites.gif) 0 0;
}
Try it Yourself

Example explained:

This is the easiest way to use image sprites, now we want to expand it by using links and hover effects.

Image Sprites - Create a Navigation List

 

We want to use the sprite image ("img_navsprites.gif") to create a navigation list.

We want to use the sprite image ("img_navsprites.gif") to create a navigation list.

Example

#navlist {
    position : relative;
}

#navlist li {
    margin : 0;
    padding: 0;
    list-style : none;
    position: absolute;
    top : 0;
}

#navlist li, #navlist a {
    height : 44px;
    display : block;
}

#home {
    left : 0px;
    width : 46px;
    background : url('img_navsprites.gif') 0 0;
}

#prev {
    left: 63px;
    width: 43px;
    background : url('img_navsprites.gif') -47px 0;
}

#next {
    left: 129px;
    width: 43px;
    background : url('img_navsprites.gif') -91px 0;
}
Try it Yourself

Example explained:

Now start to position and style for each specific part:

Image Sprites - Hover Effect

 

Now we want to add a hover effect to our navigation list.


Tip: The :hover selector can be used on all elements, not only on links.

Our new image ("img_navsprites_hover.gif") contains three navigation images and three images to use for hover effects:

navigation images

Because this is one single image, and not six separate files, there will be no loading delay when a user hovers over the image.

We only add three lines of code to add the hover effect:



Example

#home a:hover {
    background: url('img_navsprites_hover.gif') 0 -45px;
}

#prev a:hover {
    background: url('img_navsprites_hover.gif') -47px -45px;
}

#next a:hover {
    background: url('img_navsprites_hover.gif') -91px -45px;
}
Try it Yourself


Example explained:

  • #home a:hover {background: transparent url('img_navsprites_hover.gif') 0 -45px;} - For all three hover images we specify the same background position, only 45px further down