In reality, CSS3 is a lot more ready that HTML5, which is also prenatal, so you are really jumping the gun with it. At the moement, 'pure' HTML5 is not possible, as it is not yet supported by any browser, so needs to be supported with some CSS and JS hacks.
Anyhow, image replacement is still a CSS2 domain. If your image is not transparent, a better image replacement method is the 'Gilder Levin' strategy, demonstrated here:
If the image is transparent, then you are best off doing what you've descried above.