The real advantage of using spites lies in saving HTTP requests ( and having one image ready loaded) and no so much in saving you characters in CSS.
But first thing first.. the code you posted would be far more efficiently written as:
Code:
a.pushup {display: inline-block;padding: 5px 10px 5px 30px;font-family: Century Gothic, sans-serif;text-transform:uppercase;background:#131313;color:#fff;}
a.pushup:hover {color:#fff;background:#cc1a1a;cursor:pointer;}
#psubmit,#pinfo,#pphone {background: url("http://beta.com/images/email16.png") no-repeat scroll 8px 8px #131313;}
#psubmit:hover,#pphone:hover,#pinfo:hover{background-color:#cc1a1a;}
the example you posed doesn't seem to pose the need for a sprite ( or show clearly what your intent is)
So here is the GENERAL idea:
Where sprite .png is a 50px x 150px PNG file "containing" 3 different 50px x50px images (obviously , vertically stacked)
Code:
.button1,.button2,.button3 { height:50; width:50px; background:url(sprite.png) no-repeat 0 0 pink;}
.button2{ background-position:0 50px; background-color: orange;}
.button2{ background-position:0 100px; background-color: blue;}
as you can see we have set the size of the .buttonX elements, so that they act as a "keyhole" ( you really cant use sprites unless you set at least one dimension as the other images contained in the file might show). then we use: background-position to align the full image so that the part we want shows through. optionally you can use background-color to set the background color as well.
This doesnt preclude you from using the background: 'shortcut', but if you do you would have to type the same attributes over and over as you noticed.
Bookmarks