Раньше я это делал с помощью дополнительной разметки — например, тега <i>, который позиционировал абсолютно и фоном задавал картинку-спрайт с иконками.
Это способ позволяет избежать дополнительной разметки, но для IE младше 8го нужно написать expression, который будет осуществлять вставку псевдо-элемента.
Итак, есть заголовок:
<h1 id="anchor-header">Заголовок</h1>
И перед ним мы хотим поставить иконку из спрайта:
#anchor-header {
position: relative;
padding-left: 21px;
background-image: expression(this.runtimeStyle.backgroundImage="none",
this.innerHTML = '<img alt="" src="http://f.cl.ly/items/1l1g2a3A161P1f121r1m/blog-icons.png">'+this.innerHTML);
}
#anchor-header:before,
#anchor-header img {
content: url(f.cl.ly/items/1l1g2a3A161P1f121r1m/blog-icons.png);
position: absolute;
top: 3px;
clip: rect(4px 15px 18px 0);
left: -14px;
}
Получаем заголовок с иконкой:

По сравнению со способом, где иконка делается background'ом, преимущества следующие:
- При печати иконка будет выводиться, потому что задана с помощью <img>, а не фоном;
- Не нужна дополнительная html-разметка.
Пример на jsfiddle