You could perhaps use a technique similar to intention, although not execution, to Brin's answer above.
.button {background-image: url(img/for/hover-state.png) background-position: top left; background-repeat: repeat-x; background-color: #fff; height: 1.5em; width: 5em; } .button span {background-image: url(img/for/non-hover-state.png); background-position: top left; background-repeat: repeat-x; background-color: #000; height: 1.5em; width: 5em; } .button:hover span {background-color: transparent; background-image: none; }
The similarity that I mentioned is that both images are present in the document to avoid hover flags. When you hover the button, the background image of the span will disappear and show the state of hovering, instead of loading it on demand.
The bonus is that although I have specified height / width above, this method will work for dynamic recalibration without relying on the size of images with a fixed width (or it is as smooth as your design allows).
source share