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 .jumbotron
zu ändern , um die vertikale Ausrichtung zu erreichen. Ich würde vertical-center
zum 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 height
oder min-height
Eigenschaften bezieht sich auf den Wert des height
übergeordneten Elements. Daher sollten Sie den Wert des übergeordneten Elements height
explizit 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-center
in diesem Fall - nicht den verfügbaren Speicherplatz im übergeordneten Element ein. Daher müssen wir die width
Eigenschaft wie folgt angeben : width: 100%
.
Auch in einigen der oben genannten Webbrowser wird das Flex-Element - .container
in diesem Fall - möglicherweise nicht horizontal in der Mitte angezeigt. Es scheint, dass das angewendete Links / Rechts margin
von auto
keinen 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: middle
Deklaration 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-center
Element - in diesem Fall ein explizites height
Element 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-center
by- ::before
oder ::after
pseudo-Elemente erstellen und auch den Standardtyp display
davon und das andere untergeordnete Element , das .container
to, ä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 auto
oder zurücksetzen 0
oder den display
Typ none
bei Bedarf auf Folgendes ändern :
@media (max-width: 768px) {
.vertical-center:before {
height: auto;
/* Or */
display: none;
}
}
AKTUALISIERTE DEMO
Und noch etwas:
Wenn es footer
/ header
Abschnitte 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-index
Wert (für Sicherheit) , um sie immer auf der Oberseite des anderen zu halten.