No es buena idea trabajar con posiciones absolutas. Y la combinación posición absoluta + márgenes negativos suele ser mala también. Cuando la altura y la anchura sea pequeña, section va a salir de la ventana y quedará oculto.
Intenta con algo así:
Código CSS:
Ver originalhtml, body {
height: 100%;
}
header {
height: 100px;
}
footer {
height: 50px;
}
section {
display: table;
width: 100%;
height: calc(100% - 150px);
}
section > div {
display: table-cell;
vertical-align: middle;
}
Funcionar funciona:
http://jsfiddle.net/EAMR4