Elements don't have a height, in any real sense, until they've been added to the DOM, as their styles cannot be evaluated until then.
You can get around this easily enough using visibility: hidden
so that the element can be added to the DOM (and its height determined) without causing visible flickering. (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 = "";
}
(This is working on the assumption that you're using top
because the element is absolutely positioned or fixed. If it weren't, you'd need to make it so temporarily.) Hidden elements still take up space in the DOM (so their sizes must be calculated), but cannot actually be seen by the user.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…