2017-06-09 2 views
2

Ich versuche, jedes Kind DIREKT hintereinander (vertikal) auszurichten. Offensichtlich macht align-items: flex-start das nicht vollständig, da zwischen jedem Kind ein automatischer Abstand besteht."align-items: flex-start" richtet Kinder nach dem verfügbaren Platz des Elternteils aus

Unten ist ein Ausschnitt des Ergebnisses, das ich bekomme. Die Kinder richten sich nach dem verfügbaren Platz ihrer Eltern aus, was ich nicht gerne erreiche. Was ich will ist, dass jedes Kind direkt nach seinem vorherigen Geschwister ausgerichtet wird (vertikal, wie im Schnipsel).

Vielen Dank im Voraus!

EDIT: flex-flow: column wrap und align-content: flex-start beide taten den Trick. Ich habe jedoch vergessen, dem letzten Kind align-self: flex-end hinzuzufügen, was nicht funktioniert, wenn eine der beiden obigen Lösungen angewendet wird.

* { 
 
    box-sizing: border-box; 
 
} 
 

 
#container { 
 
    position: fixed; 
 
    top: 0; right: 0; bottom: 0; left: 0; 
 
    display: flex; 
 
    align-items: flex-start; 
 
    flex-flow: row wrap; 
 
} 
 
#container > div { 
 
    width: 100%; 
 
    margin: 10px; 
 
    border: 2px solid #ff0000; 
 
} 
 
#container > div:nth-child(1) { height: 5%; } 
 
#container > div:nth-child(2) { height: 10%; } 
 
#container > div:nth-child(3) { height: 20%; align-self: flex-end; }
<div id="container"> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
</div>

+0

Sie setzen Ihre divs 100% auf Breite, so natürlich sie in einer Reihe aufstellen werden nicht nacheinander in einer Reihe. Außerdem möchten Sie, dass Zeilen und 'align-items' für die vertikale Ausrichtung vorgesehen sind. 'justify-content' ist das, was Sie für' flex-start' benötigen, aber das ist bereits der Standard und muss nicht definiert werden. Lesen Sie https://css-tricks.com/snippets/css/a-guide-to-flexbox/ es hat alles, was Sie brauchen – Huangism

+0

@ Huangism - Vielleicht war ich nicht klar genug, ich werde genauer in der Post sein. Ich möchte die divs vertikal ausrichten, wie es im Beispiel tut. Nur nicht mit diesem automatischen Abstand zwischen jedem div. 'justify-content' ist nicht das, wonach ich suche. –

+0

warst du definitiv nicht klar. 'flex-flow: Zeilenumbruch;' Sie haben Zeile statt Spalte – Huangism

Antwort

2

Sie müssen align-content: flex-start für das übergeordnete Element festlegen, da der Anfangswert stretch ist.

stretch

Wenn die kombinierte Größe der Elemente entlang der Querachse kleiner als die Größe des Ausrichtungsbehälters ist, jede Auto-sized Produkte haben ihre Größe gleich zu (nicht proportional), während Beachten Sie weiterhin die Einschränkungen, die von der maximalen Höhe/maximalen Breite (oder einer äquivalenten Funktionalität) auferlegt werden, sodass die kombinierte Größe den Ausrichtungscontainer genau entlang der Querachse ausfüllt.

* { 
 
    box-sizing: border-box; 
 
} 
 
#container { 
 
    position: fixed; 
 
    top: 0; right: 0; bottom: 0; left: 0; 
 
    display: flex; 
 
    align-items: flex-start; 
 
    flex-flow: row wrap; 
 
    align-content: flex-start; 
 
} 
 
#container > div { 
 
    width: 100%; 
 
    margin: 10px; 
 
    border: 2px solid #ff0000; 
 
} 
 
#container > div:nth-child(1) { height: 5%; } 
 
#container > div:nth-child(2) { height: 10%; } 
 
#container > div:nth-child(3) { height: 20%; }
<div id="container"> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
</div>

Update: Eine andere Lösung ist flex-direction: column zu setzen, dann können Sie margin verwenden spezifische flex Element zu positionieren.

* { 
 
    box-sizing: border-box; 
 
} 
 
#container { 
 
    position: fixed; 
 
    top: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 
#container > div { 
 
    width: calc(100% - 20px); 
 
    margin: 10px; 
 
    border: 2px solid #ff0000; 
 
} 
 
#container > div:nth-child(1) { 
 
    height: 5%; 
 
} 
 
#container > div:nth-child(2) { 
 
    height: 10%; 
 
} 
 
#container > div:nth-child(3) { 
 
    height: 20%; 
 
    margin-top: auto; 
 
}
<div id="container"> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
</div>

+0

Wie @Huangism - Dies funktioniert auch. Allerdings kann ich nicht "align-self: flex-end" auf die letzte einstellen div, das war ein Schritt, den ich nicht in die Frage aufgenommen habe :( –

+0

Sie haben keine Höhe auf Container definiert. –

+0

Ich habe eine definierte Höhe über 'top' und' bottom' Eigenschaften. Hinzufügen 'Höhe: 100% 'macht den Trick sowieso nicht. –

1

Sie müssen Spalte setzen für den Fluss

#container { 
    position: fixed; 
    top: 0; right: 0; bottom: 0; left: 0; 
    display: flex; 
    align-items: flex-start; 
    flex-flow: column wrap; 
} 
#container > div:nth-child(3) { height: 20%; margin-top: auto; } 

Aktualisiert:

hinzufügen Marge Top-Auto auf das letzte Kind

https://jsfiddle.net/qghsgze5/2/

+0

Das funktioniert.Aber jetzt kann ich nicht "align-self: flex-end" auf die letzte div :( –

Verwandte Themen