Wie man Elemente in Flexbox vertikal und horizontal zentriert
Unten sind zwei allgemeine Zentrierungslösungen aufgeführt.
Einmal für vertikal ausgerichtete Flex-Elemente (flex-direction: column
) und einmal für horizontal ausgerichtete Flex-Elemente (flex-direction: row
).
In beiden Fällen kann die Höhe der zentrierten Divs variabel, undefiniert, unbekannt, egal sein. Die Höhe der zentrierten Divs spielt keine Rolle.
Hier ist der HTML-Code für beides:
DIV #1
DIV #2
CSS (ohne dekorative Styles)
Wenn Flex-Elemente vertikal gestapelt sind:
#container {
display: flex; /* Flex-Container erstellen */
flex-direction: column; /* Hauptachse vertikal machen */
justify-content: center; /* Elemente vertikal zentrieren, in diesem Fall */
align-items: center; /* Elemente horizontal zentrieren, in diesem Fall */
height: 300px;
}
.box {
width: 300px;
margin: 5px;
text-align: center; /* Text in
DEMO
Wenn Flex-Elemente horizontal gestapelt sind:
Die Regel flex-direction
aus dem obigen Code anpassen.
#container {
display: flex;
flex-direction: row; /* Hauptachse horizontal machen (Standardeinstellung) */
justify-content: center; /* Elemente horizontal zentrieren, in diesem Fall */
align-items: center; /* Elemente vertikal zentrieren, in diesem Fall */
height: 300px;
}
DEMO
Zentrieren des Inhalts der Flex-Elemente
Der Bereich eines Flex-Formatierungskontextes ist auf eine Eltern-Kind-Beziehung begrenzt. Nachkommen eines Flex-Containers jenseits der Kinder nehmen nicht am Flex-Layout teil und ignorieren Flex-Eigenschaften. Grundsätzlich sind Flex-Eigenschaften über die Kinder hinaus nicht vererbbar.
Deshalb müssen Sie immer display: flex
oder display: inline-flex
auf ein Elternelement anwenden, um Flex-Eigenschaften auf das Kind anzuwenden.
Um Text oder anderen Inhalt, der sich in einem Flex-Element befindet, vertikal und/oder horizontal zu zentrieren, machen Sie das Element zu einem (verschachtelten) Flex-Container und wiederholen Sie die Zentrierungsregeln.
.box {
display: flex;
justify-content: center;
align-items: center; /* für einzeiligen Flex-Container */
align-content: center; /* für mehrzeiligen Flex-Container */
}
Weitere Details hier: Wie man Text in einem Flexbox vertikal ausrichtet?
Alternativ können Sie margin: auto
auf das Inhaltslement des Flex-Elements anwenden.
p { margin: auto; }
Erfahren Sie mehr über Flex-auto
-Margen hier: Methoden zum Ausrichten von Flex-Elementen (siehe Box#56).
Zentrieren mehrerer Zeilen von Flex-Elementen
Wenn ein Flex-Container mehrere Zeilen hat (aufgrund von Zeilenumbrüchen) wird die Eigenschaft align-content
für die Ausrichtung der Querachse erforderlich sein.
Aus der Spezifikation:
8.4. Packen von Flex-Linien: die align-content
Eigenschaft
Die Eigenschaft align-content
richtet die Linien eines Flex-Containers innerhalb des Flex-Containers aus, wenn im Querachse zusätzlicher Platz vorhanden ist, ähnlich wie bei justify-content
einzelne Elemente in der Hauptachse ausrichtet. Anmerkung: Diese Eigenschaft hat keinen Einfluss auf einen einzeiligen Flex-Container.
Weitere Details hier: Wie funktionieren flex-wrap mit align-self, align-items und align-content?
Browser-Unterstützung
Flexbox wird von allen wichtigen Browsern unterstützt, außer IE < 10. Einige aktuelle Browserversionen, wie Safari 8 und IE10, erfordern Vendor-Präfixe. Für eine schnelle Möglichkeit, Präfixe hinzuzufügen, verwenden Sie Autoprefixer. Weitere Details in dieser Antwort.
Zentrierungslösung für ältere Browser
Für eine alternative Zentrierungslösung unter Verwendung von CSS-Tabellen- und Positionierungseigenschaften siehe diese Antwort: https://stackoverflow.com/a/31977476/3597276