views:

464

answers:

4

I've found a strange bug in Internet Explorer 8. Maybe someone can help me move around it.

When I try to grab the background position of an element, using background-position-x all versions of Internet Explorer work as excepted except for IE8 that crashes.

When I run el.getStyle('background-position') all browsers give me the correct values except from IE (6, 7 and 8) that return undefined.

I therefore use el.getStyle('background-position-x') for all IE versions.

IE8, however, crashes on the above code.

Anyone had similar problems?

A: 

Why not use jquery's css function that works fine crossbrowser ?

marcgg
You suggest using an entire library for a tiny css() function?
J-P
He's already using MooTools... So using JQuery would be pointless.
J-P
MooTools or PrototypeJS ;)IE does not support background-position-x
Fabien Ménager
+1  A: 

Thanks for the help everyone. This really is a bug and works only on the following scenario.

  1. css must be loaded on an external stylesheet
  2. element has no inline styling

The way to fix it, even tough dirty, is to add inline styling to the element. Makes IE8 happy and all other browsers work.

I did not test but, according to this ticket, FF2 also suffers from the same behavior.

Side notes:
@marcgg - I was going to downvote your answer as it really is not helpful (and bound to start a flame war) but, all truth said, jQuery does not manifest this problem. Even though, as you probably already knew, it is NOT an option! ;)

@Fabien - IE does support background-position-x and lacks support for background-position the W3C approved construction.

Frankie
that's useful to know, although i recently did a sprite animation that DOES read this on a block element with external stylesheet and mootools and have not had such issues. perhaps i am lucky ;)
Dimitar Christoff
@Dimitar, perhaps you set the CSS via javascript prior to grabbing it. That way IE works fine. On my construction I had to read the background position prior to setting it to new values. Was that the casa?
Frankie
yes, its an element fully constructed into the DOM via new Element and a valid initial value. HOWEVER, subsequent changes are after reading. .now that you mention it, there are some odd workarounds for IE like that - for example, converting elements to inline within a overflow: hidden layer, when you want block can be frustrating...
Dimitar Christoff
A: 

Try using:

el.getStyle('backgroundPositionX')

and

el.getStyle('backgroundPositionX')
adam
Tried it out of curiosity but they would still crash IE8. The way to go seams like dirty-inline-styling.
Frankie
A: 

yes, older thread, but figured I'd post another solution that I bumped into @ mootools lighthouse....

if (Browser.Engine.trident){
    var xy = el.getStyle('background-position-x')+" "+el.getStyle('background-position-y');
} else {
    var xy = el.getStyle("backgroundPosition");
}

works well for me so far.

kfancy