Dies ist etwas, was ich schon oft tun musste, und für eine konsistente Lösung müssen Sie immer noch ein wenig nicht-semantisches Markup und einige browserspezifische Hacks hinzufügen. Wenn wir Browser-Unterstützung für CSS 3 erhalten, erhalten Sie Ihre vertikale Zentrierung ohne Sünde.
Zur besseren Erklärung der Technik können Sie den Artikel lesen, aus dem ich ihn angepasst habe. Im Grunde geht es jedoch darum, ein zusätzliches Element hinzuzufügen und verschiedene Stile in IE und Browsern anzuwenden, die position:table\table-cell
Nicht-Tabellenelemente unterstützen.
<div class="valign-outer">
<div class="valign-middle">
<div class="valign-inner">
Excuse me. What did you sleep in your clothes again last night. Really. You're gonna be in the car with her. Hey, not too early I sleep in on Saturday. Oh, McFly, your shoe's untied. Don't be so gullible, McFly. You got the place fixed up nice, McFly. I have you're car towed all the way to your house and all you've got for me is light beer. What are you looking at, butthead. Say hi to your mom for me.
</div>
</div>
</div>
<style>
/* Non-structural styling */
.valign-outer { height: 400px; border: 1px solid red; }
.valign-inner { border: 1px solid blue; }
</style>
<!--[if lte IE 7]>
<style>
/* For IE7 and earlier */
.valign-outer { position: relative; overflow: hidden; }
.valign-middle { position: absolute; top: 50%; }
.valign-inner { position: relative; top: -50% }
</style>
<![endif]-->
<!--[if gt IE 7]> -->
<style>
/* For other browsers */
.valign-outer { position: static; display: table; overflow: hidden; }
.valign-middle { position: static; display: table-cell; vertical-align: middle; width: 100%; }
</style>
Es gibt viele Möglichkeiten (Hacks), Stile in bestimmten Browsersätzen anzuwenden. Ich habe bedingte Kommentare verwendet, aber schauen Sie sich den oben verlinkten Artikel an, um zwei andere Techniken zu sehen.
Hinweis: Es gibt einfache Möglichkeiten, eine vertikale Zentrierung zu erzielen, wenn Sie einige Höhen im Voraus kennen, wenn Sie versuchen, eine einzelne Textzeile zu zentrieren, oder in mehreren anderen Fällen. Wenn Sie mehr Details haben, werfen Sie diese ein, da es möglicherweise eine Methode gibt, die keine Browser-Hacks oder nicht-semantisches Markup erfordert.
Update: Wir beginnen, eine bessere Browserunterstützung für CSS3 zu erhalten, indem wir sowohl Flex-Box als auch Transformationen als alternative Methoden für die vertikale Zentrierung (unter anderem) anbieten. Weitere Informationen zu modernen Methoden finden Sie in dieser anderen Frage. Beachten Sie jedoch, dass die Browserunterstützung für CSS3 immer noch lückenhaft ist.