Io un po' di tempo fa trovai questa soluzione, non so da dove la presi ma funge
Le regole che vengono precedute da # sono per IE, il quale non supporta i vari display:table, ma legge le regole con la # davanti
codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>Universal vertical center with CSS</title>
<style>
.greenBorder {border: 1px solid green;} /* just borders to see it */
#contenitore {
display: table;
height: 400px;
#position: relative;
overflow: hidden;
}
#insider {
#position: absolute;
#top: 50%;
display: table-cell;
vertical-align: middle;
}
#contenuto {
#position: relative;
#top: -50%
}
</style>
</head>
<body>
<div class="greenBorder" id="contenitore">
<div id="insider">
<div class="greenBorder" id="contenuto">
any text
any height
any content, for example generated from DB
everything is vertically centered
</div>
</div>
</div>
</body>
</html>