Supongo que te refieres al alto.
Yo haría algo tal que:
Código CSS:
Ver originaldiv#principal {
position: relative;
top: 50%;
transform: translateY(-50%);
}
Dado que
translate(X|Y)
toma como referencia al propio elemento siempre se centrará. Obviamente
html
y
body
necesitarán tener una altura.