Der flexible Box-Weg
Die vertikale Ausrichtung ist jetzt durch die Verwendung des flexiblen Box-Layouts sehr einfach . Heutzutage wird diese Methode in einer Vielzahl von Webbrowsern mit Ausnahme von Internet Explorer 8 und 9 unterstützt. Daher müssten wir einige Hacks / Polyfills oder andere Ansätze für IE8 / 9 verwenden.
Im Folgenden zeige ich Ihnen, wie das in nur 3 Textzeilen geht (unabhängig von der alten Flexbox-Syntax) .
Hinweis: Es ist besser, eine zusätzliche Klasse zu verwenden, als sie .jumbotronzu ändern , um die vertikale Ausrichtung zu erreichen. Ich würde vertical-centerzum Beispiel den Klassennamen verwenden.
Beispiel hier (Ein Spiegel auf jsbin) .
<div class="jumbotron vertical-center"> <!--
^--- Added class -->
<div class="container">
...
</div>
</div>
.vertical-center {
min-height: 100%; /* Fallback for browsers do NOT support vh unit */
min-height: 100vh; /* These two lines are counted as one :-) */
display: flex;
align-items: center;
}
Wichtige Hinweise (in der Demo berücksichtigt) :
Ein Prozentwert von heightoder min-heightEigenschaften bezieht sich auf den Wert des heightübergeordneten Elements. Daher sollten Sie den Wert des übergeordneten Elements heightexplizit angeben .
Herstellerpräfix / alte Flexbox-Syntax wurde aus Gründen der Kürze im veröffentlichten Snippet weggelassen, ist jedoch im Online-Beispiel vorhanden.
In einigen alten Webbrowsern wie Firefox 9 (in dem ich getestet habe) nimmt der Flex-Container - .vertical-centerin diesem Fall - nicht den verfügbaren Speicherplatz im übergeordneten Element ein. Daher müssen wir die widthEigenschaft wie folgt angeben : width: 100%.
Auch in einigen der oben genannten Webbrowser wird das Flex-Element - .containerin diesem Fall - möglicherweise nicht horizontal in der Mitte angezeigt. Es scheint, dass das angewendete Links / Rechts marginvon autokeinen Einfluss auf das Flex-Element hat.
Deshalb müssen wir es durch ausrichten box-pack / justify-content.
Weitere Details und / oder die vertikale Ausrichtung von Spalten finden Sie im folgenden Thema:
Der traditionelle Weg für ältere Webbrowser
Dies ist die alte Antwort, die ich geschrieben habe, als ich diese Frage beantwortet habe. Diese Methode wurde diskutiert hier und es an der Arbeit in Internet Explorer 8 und 9 als auch angenommen. Ich werde es kurz erklären:
Im Inline-Flow kann ein Inline-Level-Element durch vertical-align: middleDeklaration vertikal zur Mitte ausgerichtet werden . Spezifikation von W3C :
Mitte
Richten Sie den vertikalen Mittelpunkt des Felds an der Grundlinie des übergeordneten Felds plus der halben x-Höhe des übergeordneten Felds aus.
In Fällen, in denen das übergeordnete .vertical-centerElement - in diesem Fall ein explizites heightElement hat height, können wir die Grundlinie des übergeordneten Elements auf den Mittelpunkt des vollständigen Elements verschieben, wenn wir möglicherweise ein untergeordnetes Element haben, das genau dasselbe wie das übergeordnete Element hat -Höhe Kind und überraschenderweise machen unser gewünschtes In-Flow-Kind - das .container- vertikal zur Mitte ausgerichtet.
Alles zusammen bekommen
Davon abgesehen könnten wir ein Element voller Höhe innerhalb der .vertical-centerby- ::beforeoder ::afterpseudo-Elemente erstellen und auch den Standardtyp displaydavon und das andere untergeordnete Element , das .containerto, ändern inline-block.
Verwenden Sie dann vertical-align: middle;, um die Inline-Elemente vertikal auszurichten.
Bitte schön:
<div class="jumbotron vertical-center">
<div class="container">
...
</div>
</div>
.vertical-center {
height:100%;
width:100%;
text-align: center; /* align the inline(-block) elements horizontally */
font: 0/0 a; /* remove the gap between inline(-block) elements */
}
.vertical-center:before { /* create a full-height inline block pseudo=element */
content: " ";
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
height: 100%;
}
.vertical-center > .container {
max-width: 100%;
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
/* reset the font property */
font: 16px/1 "Helvetica Neue", Helvetica, Arial, sans-serif;
}
ARBEITSDEMO .
Um unerwartete Probleme in besonders kleinen Bildschirmen zu vermeiden, können Sie die Höhe des Pseudoelements auf autooder zurücksetzen 0oder den displayTyp nonebei Bedarf auf Folgendes ändern :
@media (max-width: 768px) {
.vertical-center:before {
height: auto;
/* Or */
display: none;
}
}
AKTUALISIERTE DEMO
Und noch etwas:
Wenn es footer/ headerAbschnitte um den Behälter, es ist besser zu positionieren , dass die Elemente richtig ( relative,absolute ? Bis zu Ihnen.) Und einen höheren hinzufügen z-indexWert (für Sicherheit) , um sie immer auf der Oberseite des anderen zu halten.