Я пытаюсь сделать позиционирование в JavaScript. Я использую накопительную функцию положения, основанную на классической функции quirksmode , которая суммирует offsetTop
и offsetLeft
для каждого offsetParent
до верхнего узла.
Однако я сталкиваюсь с проблемой, когда интересующий меня элемент не имеет offsetParent
в Firefox. В IE offsetParent
существует, но offsetTop
и offsetLeft
все суммируют до 0, поэтому в действительности имеет ту же проблему, что и в Firefox.
Что может привести к тому, что элемент, который хорошо виден и пригоден для использования на экране, не имеет offsetParent
? Или, на практике, как я могу найти положение этого элемента, чтобы разместить под ним раскрывающийся список?
Редактировать : Вот как воспроизвести один конкретный случай этого (не решенный в настоящее время принятым ответом):
- Открыть домашнюю страницу переполнения стека .
Запустите следующий код в консоли веб-браузера (например, 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
Почему offsetParent
этого элемента null
?