You have to define your height and width in order for the picture to show up. Otherwise it is limited to the height and width of whatever the browser defaults to for that element.
For instance, an empty span has no height or width, so any background image will be covering the background of an area of 0x0. You'll notice that if you put in "I hate static dimensions" in that span you tested, you'll get a small corner of your image.
Now, you could set the height and width in the CSS and therefore not hard-code it into the HTML, however you can only do this for elements with a display type of "block". you can't set an inline element (like a span) to have height, as they are inline. You could give it padding, but this is pretty hit-or-miss.
If you want the area to have height and width, but still flow inline, you can use display: inline-block;
but IE will freak out if you do this on certain types of elements.