Funktionsweise von display: inline-flex

Zur Aktivierung der Flexbox-Darstellung nimmt man display: flex oder display: inline-flex. Was von beiden man wählt, hat keine Auswirkung auf die Darstellung des Flexitems, sondern darauf, wie sich der Flexcontainer zu den umgebenden Elementen verhält. Mit display: flex verhält sich der Flexcontainer im Wesentlichen wie ein Blockelement, hingegen mit display:inline-flex eher wie ein Inline-Element.

Gut sieht man den Unterschied, wenn man Text neben dem Flexcontainer platziert:

Hier einmal display: flex:

Text unterhalb des Flexcontainers

Und hier display: inline-flex:

Text neben Flexcontainer

Zwei Fragen stellen sich dabei – danke an die Teilnehmer meines Flexbox-Workshops auf den HTML5Days Oktober 2016 in Berlin!

Warum ist der Text bei der inline-flex-Darstellung im Beispiel so schön zentriert?

Der Text befindet sich auf derselben Baseline wie der Text innerhalb der Flexcontainers. Im Beispiel sind die Flexitems über padding etwas höher, wenn man dieses padding entfernt, sieht man schön, wie die eben auf „einer Linie“ sind – was auch zu Inline-Elementen passt.

Flexitems ohne padding

Wie wird Leerraum zwischen Inline-Flex-Containern behandelt?

Von display: inline-block kennt man das Problem, das Leerzeichen zwischen per display: inline-block dargestellten Elementen auch im Browser auftauchen. Gibt es das Problem auch, wenn mehrere Elemente mit display: inline-flex nebeneinander angeordnet werden?

Ein Text zeigt es deutlich: Ja, dasselbe Phänomen beobachtet man auch.

Zwischenraum zwischen Inline-Flex-Elementen

Jetzt aber zur Erklärung. Erst einmal ist die Behandlung von Weißraum bei display: inline-block eigentlich kein Bug, sondern ein Feature. Wenn wir Inline-Elemente haben wie beispielsweise zwei Links hintereinander …

<a href="...">Eins</a> <a href="...">Zwei</a>

… dann erwarten wir ja, dass der Leerraum auch angezeigt wird – das ist das normale Verhalten von Inline-Elementen.

Inline-block-Elemente zeigen dieses Verhalten von Inline-Elementen – und bei Inline-flex-Elementen ist es genauso.

Die Beispiele gibt es auch zum Live-Austesten (mit den per Autoprefixer erzeugten CrossBrowser-Code):

Kommentare? Gerne :-)

HTML: Folgender HTML-Code kann verwendet werden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>