In an attempt to upgrade the jQuery plugin 'iCheckbox' (http://stackoverflow.com/questions/6032538/) to work above jQuery 1.4.4 I found out that the use of
animate({backgroundPosition:'10px 0px'})
needed to be changed to
animate({backgroundPositionX: '10px', backgroundPositionY: '0px'})
as only properties with one parameter should be used. So far, this makes sense, but wait.. while it's working fine in Safari and Chrome, it's not working in FF4 (all on Mac)..
So i tried this and that and finally found out that if I change it to
animate({backgroundPosition: '10px'})
It works everywhere! But what's going on here? Now that I just give one parameter, it works, but I'm not specifying if it's for X or Y axis (so it defaults to X axis it seems.. but what if I want it to work on Y axis?)
This seems wierd, and my solutions here can't be the correct way of doing it.. so I need some advice:
What's going on?
How should background position be animated using jQuery 1.4 - 1.6 so that it works across browsers?
Firstly, JQuery is unable to animate two values at the same time, thus you saw that inputting two values for
backgroundPosition
did not work at all. Also note that forpx
values, the JQuery documentation encourages you to not write thepx
.Secondly,
backgroundPositionX
andbackgroundPositionY
are non-standard CSS properties only supported in a few browsers, most notably IE and recently Webkit, which is why you will find it does not work in FF or Opera. (See here.)I have found that mixing JQuery's
animate
and CSS transitions works to animate a background image on one axis in most browsers. I will quote from my answer to another question ( jQuery.animate background-position):According to: http://www.w3schools.com/css/pr_background-position.asp
"If you only specify one value, the other value will be 50%. You can mix % and positions"