Мне нравятся ваши приемы @sandeep и @ hatake-kakashi. Пара возможных улучшений (хотя, возможно, выходящих за рамки вопроса). Попробуйте структурировать свой список и HTML как таковой:
<style>
/* let your UL and LI handle the link positioning */
ul.sprites {width:somevalue;} /* <--clearfix this someplace cause of the floats inside*/
ul.sprites li {float:left;} /* <- these should collapse to the 30x30 width of the children */
ul.sprites li a {
display:block;
/*sprite dimensions*/
width:30px;
height:30px;
background: url('..images/spritesSheet.png') 0 0 no-repeat;
/*hide link text*/
text-indent: -9999em
overflow: hidden;
text-align: left;
}
/*adjust the background of the single sprite image file*/
ul.sprites a.spriteName1 {background-position:x y;}
ul.sprites a.spriteName1:hover {background-position:x y;}
ul.sprites a.spriteName2 {background-position:x y;}
ul.sprites a.spriteName2:hover {background-position:x y;}
/* etc...*/
</style>
<html>
<ul class="sprites">
<li><a class="spriteName1" href="#">link1</a></li>
<li><a class="spriteName2" href="#">link2</a></li>
</ul>
</html>
Таким образом, каскад работает для вас, и все ссылки в этом списке могут получить стиль спрайта без избыточных имен классов. И вы позволяете своим родительским элементам управлять позиционированием. По крайней мере, я думаю, что это правильно. Извиняюсь за синтаксис и псевдокод, как я его написал, довольно быстро и грязно.