Wenn es sich um eine Zeile Text und/oder ein Bild handelt, ist es leicht zu machen. Verwenden Sie einfach:
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
Das war's. Wenn es mehrere Zeilen sein können, dann ist es etwas komplizierter. Aber es gibt Lösungen auf http://pmob.co.uk/ . Suchen Sie nach "vertikal ausrichten".
Da es sich in der Regel um Hacks oder das Hinzufügen komplizierter Divs handelt... Ich verwende in der Regel eine Tabelle mit einer einzigen Zelle zu tun... um es so einfach wie möglich zu machen.
Aktualisierung für 2020:
Sofern Sie nicht auf älteren Browsern wie dem Internet Explorer 10 arbeiten müssen, können Sie Flexbox verwenden. Es ist wird von allen gängigen Browsern weitgehend unterstützt . Grundsätzlich muss der Container als Flexcontainer angegeben werden, zusammen mit der Zentrierung entlang seiner Haupt- und Querachse:
#container {
display: flex;
justify-content: center;
align-items: center;
}
Zur Angabe einer festen Breite für das untergeordnete Element, das als "Flexelement" bezeichnet wird:
#content {
flex: 0 0 120px;
}
Ejemplo: http://jsfiddle.net/2woqsef1/1/
Um den Inhalt einzuschrumpfen, ist es noch einfacher: j flex: ...
Zeile aus dem Flexelement, und es wird automatisch eingeschweißt.
Ejemplo: http://jsfiddle.net/2woqsef1/2/
Die obigen Beispiele wurden mit den wichtigsten Browsern getestet, darunter MS Edge und Internet Explorer 11.
Eine technische Anmerkung, falls Sie es anpassen müssen: Innerhalb des Flexelements funktioniert die alte Nicht-Flexbox-Methode von CSS wie erwartet, da dieses Flexelement selbst kein Flexcontainer ist. Wenn Sie jedoch ein zusätzliches Flexelement zum aktuellen Flexcontainer hinzufügen, werden die beiden Flexelemente horizontal platziert. Um sie vertikal zu platzieren, fügen Sie die flex-direction: column;
in den Flex-Container. So funktioniert es zwischen einem Flex-Container und seinem sofort untergeordnete Elemente.
Es gibt eine alternative Methode, die Zentrierung vorzunehmen: indem man nicht angibt center
für die Verteilung auf der Haupt- und Querachse für den Flexcontainer, sondern geben Sie stattdessen margin: auto
auf das Flexelement, um den gesamten zusätzlichen Platz in allen vier Richtungen zu belegen, und die gleichmäßig verteilten Ränder sorgen dafür, dass das Flexelement in allen Richtungen zentriert ist. Dies funktioniert nur, wenn es mehrere flexible Elemente gibt. Außerdem funktioniert diese Technik mit MS Edge, aber nicht mit Internet Explorer 11.
Update für 2016 / 2017:
Dies kann in der Regel geschehen mit transform
und es funktioniert auch in älteren Browsern wie Internet Explorer 10 und Internet Explorer 11 gut. Es kann mehrere Textzeilen unterstützen:
position: relative;
top: 50%;
transform: translateY(-50%);
Ejemplo: https://jsfiddle.net/wb8u02kL/1/
Zum Einschweißen der Breite:
Bei der obigen Lösung wurde eine feste Breite für den Inhaltsbereich verwendet. Um eine geschrumpfte Breite zu verwenden, verwenden Sie
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Ejemplo: https://jsfiddle.net/wb8u02kL/2/
Wenn die Unterstützung für Internet Explorer 10 benötigt wird, dann funktioniert Flexbox nicht und die obige Methode und die line-height
Methode funktionieren würde. Andernfalls würde Flexbox die Arbeit erledigen.