Besides maintainability, a few other downsides include:
1. Larger file size for many png sets, due to missed optimization.
I'm on a Mac and I use Image Alpha, which allows you to compress a png by limiting it's color palette, I'm sure there is a similar tool for Windows. Many pngs can be limited to 256, 128, or even 64 colors without loosing quality, because their color palettes are not extensive.
This often cuts file size by 50% or more, and you usually can't do it with image sprites because more images are combined.
2. You loose the ability to use some handy css sizing/placement techniques.
You can't use things like: background: contain
and background: cover
to size background images.
It's harder to center a background image in a box, because you can't use background-position: left center
etc.
Calculating background-size: 80%
, etc, also becomes tricker. You still can, it just changes if the size of the sprite sheet changes, and you may end up with other bits of the sprite showing depending on placement.
3. Loading may appear slower.
Although there are fewer requests, the browser has to download more data before it can display any images using the sprite. This means the logo in the upper right may appear faster as an individual file, because it will be downloaded and displayed while the browser is still making requests for other files.
I've seen this happen, but the effect is rarely noticeable.
The combination of these and the maintainability overhead usually keeps me from using extensive sprite images, though I still commonly combine a default and hover state into one sprite, or a set of related images in a similar color palette.