Problem beim vertikalen Zentrieren mit der Flexbox, wenn die Höhen unbekannt sind


68

Mein Layout hat einen Container flex-containerund ein Kind.

HTML:

<div class="flex-container">
  <div>text</div>
</div>

Der Behälter und das Kind haben eine unbekannte Höhe . Und das Ziel ist:

  • Wenn das Kind eine geringere Höhe als der Behälter hat, erscheint es horizontal und vertikal zentriert.
  • Wenn das Kind eine größere Höhe als der Container hat, passt es sich oben und unten an und wir können scrollen.

Planen: Geben Sie hier die Bildbeschreibung ein

Der schnellste Weg zum Zentrieren eines Elements mit Flexbox ist der folgende:

Codepen: http://www.codepen.io/ces/pen/slicw

Wenn das Kind des Containers jedoch eine größere Höhe hat, wird das Kind nicht richtig angezeigt. Das Kind erscheint geschnitten (nur der obere Teil).

Codepen: http://www.codepen.io/ces/pen/sGtfK

Planen:

Geben Sie hier die Bildbeschreibung ein

Gibt es eine Möglichkeit, dieses Problem zu beheben?

Antworten:


138

Ich habe die Lösung gefunden:

.flex-container {
    display: flex; /* only */
    overflow-y: scroll;
}

.flex-container > div {
    margin: auto; /* horizontal and vertical align */
}

Codepen: http://codepen.io/ces/pen/Idklh


11
Ich wünschte, ich könnte dies mehr als einmal positiv bewerten - es ist nicht nur nützlich, es ist auch sehr gut kommuniziert, danke.

Hier .flex-containerhat der Anfangswert align-items: flex-start(dh oben).
Sam

1
Ich habe schon lange versucht, eine Antwort darauf zu finden! Dankeschön.
CT5845

Gute Lösung, aber gibt es ein Warum?
Jiyinyiyong

3
@jiyinyiyong - hier sind einige Details zum "Warum?" ... stackoverflow.com/a/33455342/3597276
Michael Benjamin

-1

Add align-self:flex-start;to .flex-container > divkann auch dieses Problem beheben.

Siehe: http://www.w3.org/TR/css-flexbox-1/#auto-margins


1
Dies beantwortet die Frage, anstatt eine Problemumgehung bereitzustellen, wie dies bei der akzeptierten Antwort der Fall ist. +1
RienNeVaPlu͢s

8
Ihre Lösung besteht einfach darin, die Zentrierungsanforderung zu ignorieren. Wenn eine Zentrierung nicht notwendig wäre, gäbe es natürlich kein Problem.
Michael Benjamin

3
Dies ist nicht die richtige Antwort, da die vertikale Zentrierung ignoriert wird. Es ist also keine Lösung.
Ranzwertig
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.