The approach I would take is giving all elements (unique) classes, and with Javascript get the Outerheight() of each item, then subtract that from the total available (window) height.
var Navigation = $('.navigation').outerHeight();
For the delay, I would use the following:
function timeout() {
try {
// add code here
}
catch(err) {
console.log(err.message);
}
}
setTimeout(timeout, 300);
In the case that the user would experience this as a glitch, you could use a css animation to make the contents slide in, rather than appear at once. Let the height start with 0px and animate to the calculated height.