Twitter bootstrap is utilizing empty <i>
elements in their example markup for CSS Sprites. The choice of tag isn't crucial, but HTML5 has given significance to <i>
and <b>
elements, providing them with new meanings:
http://www.w3.org/TR/html5/the-i-element.html
The i element signifies a span of text conveyed in an altered voice or mood, or set apart from ordinary prose to convey distinct textual qualities, such as a taxonomic label, a specialized term, a foreign language idiom, a thought, or the name of a ship in Western literature.
An absence of content within elements typically indicates less-than-ideal semantic structure, yet many opt for pragmatism over perfection. It could be argued that the icons are more about presentation than actual content, making <img>
potentially unsuitable while background images prove more efficient (and reduce HTTP requests).
If you're inclined towards meticulousness as I am on occasion, consider adding some text:
<span class="icon icon-ok">OK</span>
Subsequently, utilize CSS to conceal the text using a technique like text-indent:-999px
(which Bootstrap likely already implements). Essentially, it's transformed into a block element with fixed dimensions and a background image.