I've a sprite of 62 images of 91 * 91px, which makes the whole thing 91 * 5642 px. They're displayed in sort of a dynamic grid that grows and shrinks depending on user/pointer movement. Sometimes an element (std 91 * 91 px) zooms in to make it 120 * 120 px. Obviously I want the background to grow with so that the entire 91 * 91 px image is shown in the entire 120 * 120 element.
Enter background-size: 100% auto
to make the width always perfect. Problem now is that background-position
expects its values to be updated as well! All 62 elements have inline style=background-position etc
. I can't update the background position from inline. I want the background to first position and then resize (zoom), not resize and then position (zoom to wrong position).
I'm not sure I'm making any sense. To clarify somewhat:
width: 91px; height: 91px; background-size: 100% auto;
.background-position: 0 -91px
.width: 120px; height: 120px;
and then it shows most part of the 2nd image and some part of the 1st, because positioning happens after resizing =(0 -120px
, it aligns correctly. (But then obviously it's wrong when not zooming/hovering.)A very easy solution would be to use actual zoom: 1.3
or transform: scale(1.3)
, but that's VERY VERY slow with transitions.
I must be missing something. CSS has to be smarter than this. A sprite with background-size... That's not impossible is it!?
How the sprite looks is up to me, so I could make it have a 120 * 120 grid instead of 91 * 91, if that would be simpler...
EDIT: With example fiddle: http://jsfiddle.net/rudiedirkx/g4RQx/
Smart answer 1: background-position: 0 calc(100% / 61 * 2)
(61 because 62 images, 2 because 3rd image)
it's actually pretty simple, just use percentage position.
background-position: 0 3.28%;