2018 solution:
Lets say we have sprite of grid of 5X4.
First step is fixed the size of the background image relative to the continener
.sprite{ background-size: 500% 400%; }
now we have responsive sprite.
next is to use precente to position the background so just our figure will show up. the calculation are like that :
background-position: calc( var(--colum) * 100% / 5 - 1) calc(var(--row) * 100% / 4 - 1);
Now in every figure we need to define on wich colum and row is position
.figure1{ --row:1, --column:0 }
.figure2{ --row:1, --column:1 }
// etc...
so togther we have :
.sprite{
background-size: 500% 400%;
background-position: calc( var(--colum) * 100% / 4) calc(var(--row) * 100% / 3);
}
.figure1{ --row:0, --column:0 }
.figure2{ --row:0, --column:1 }
.figure3{ --row:0, --column:2 }
.figure4{ --row:0, --column:3 }
.figure5{ --row:1, --column:0 }
// etc...
Nice demo with cards:https://repl.it/@perymimon/responsive-sprite
Full tab: https://responsive-sprite--perymimon.repl.co/