Элементы не имеют высоту, в любом реальном смысле, до тех пор, пока они не будут добавлены в DOM, поскольку их стили не могут быть оценены до тех пор.
Вы можете легко обойти это, используя visibility: hidden
, так что элемент может быть добавлен в DOM (и определена его высота), не вызывая видимого мерцания. ( jsFiddle )
function test(a) {
var a=document.createElement(a);
a.style.visibility = "hidden";
document.body.appendChild(a);
a.style.top=(window.innerHeight/2-a.clientHeight/2)+'px';
a.style.visibility = "";
}
(Это работает при условии, что вы используете top
, потому что элемент абсолютно позиционирован или зафиксирован. Если бы это было не так, вам бы пришлось сделать это так временно.) Скрытые элементы по-прежнему занимают место в DOM (поэтому их размеры должны быть рассчитаны), но пользователь не может их увидеть.