I am trying to do positioning in JavaScript. I am using a cumulative position function based on the classic quirksmode function that sums offsetTop
and offsetLeft
for each offsetParent
until the top node.
However, I am running into an issue where the element I'm interested in has no offsetParent
in Firefox. In IE offsetParent
exists, but offsetTop
and offsetLeft
all sum up to 0, so it has the same problem in effect as in Firefox.
What would cause an element that is clearly visible and usable on the screen to not have an offsetParent
? Or, more practically, how can I find the position of this element in order to place a drop-down beneath it?
Edit: Here's how to reproduce one particular instance of this (not solved by the currently-accepted answer):
- Open the home page of Stack Overflow.
Run the following code in the Console of the web browser (e.g. Chromev21):
var e = document.querySelector('div');
console.log(e);
// <div id="notify-container"></div>
do{
var s = getComputedStyle(e);
console.log(e.tagName,s.display,s.visibility,s.position,e.offsetParent);
} while(e=e.parentElement)
// DIV block visible fixed null
// BODY block visible static null
// HTML block visible static null
Why is the offsetParent
of that element null
?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…