Alles, was Sie über die Ausrichtung in Flexbox wissen müssen

Über den Autor : Rachel Andrew ist nicht nur Chefredakteurin des Smashing Magazine, sondern auch Webentwicklerin, Autorin und Rednerin. Sie ist Autorin mehrerer Bücher, darunter The New CSS Layout , einer der Entwickler des Perch Content Management Systems. Er schreibt über Wirtschaft und Technologie auf seiner Website rachelandrew.co.uk .

Zusammenfassung: In diesem Artikel werden die Ausrichtungseigenschaften in Flexbox und einige Grundregeln für die Ausrichtung der Ausrichtung auf der Haupt- und Querachse erläutert.

Im ersten Artikel dieser Reihe habe ich darüber gesprochen, was passiert, wenn eine display: flex Eigenschaft für ein Element deklariert wird. Schauen wir uns nun die Ausrichtungseigenschaften und ihre Funktionsweise mit Flexbox an. Wenn Sie jemals verwirrt waren, wenden Sie align oder justify , hoffen Sie, dass dieser Artikel viel klarstellt!

Verlauf der Flexbox-Ausrichtung


In der CSS-Geschichte schien die korrekte Ausrichtung auf beiden Achsen die größte Herausforderung zu sein. Das Erscheinen dieser Funktion in Flexbox ist für viele zum Hauptvorteil dieser Technologie geworden. Die Ausrichtung wurde auf zwei CSS-Zeilen reduziert .

Die Ausrichtungseigenschaften sind jetzt in der Box-Ausrichtungsspezifikation vollständig definiert. Es beschreibt, wie die Ausrichtung in verschiedenen Layouts funktioniert. Dies bedeutet, dass Sie in CSS Grid dieselben Eigenschaften wie in Flexbox verwenden können - und in Zukunft auch in anderen Layouts. Daher wird jede neue Flexbox-Ausrichtungsfunktion in der Box-Ausrichtungsspezifikation und nicht in der nächsten Version von Flexbox ausführlich beschrieben.

Die Eigenschaften


Für viele ist es schwierig, sich daran zu erinnern, ob Eigenschaften verwendet werden sollen, die mit align- oder justify- . Es ist wichtig, sich an Folgendes zu erinnern:

  • justify- führt die Ausrichtung auf der Hauptachse in der gleichen Richtung wie die justify- durch;
  • align- führt die align- über die align- .

Es hilft wirklich, in Bezug auf die Haupt- und Querachse zu denken und nicht in horizontaler und vertikaler Richtung. Es spielt keine Rolle, wie die Achse physikalisch gerichtet ist.

Hauptachsenausrichtung mit justify-content


Beginnen wir mit der Ausrichtung auf der Hauptachse. Es wird mithilfe der Eigenschaft " justify-content implementiert. Diese Eigenschaft behandelt alle Elemente als Gruppe und steuert die Verteilung des Raums zwischen ihnen.

Der anfängliche Wert für den justify-content ist flex-start . Aus diesem Grund werden bei der Deklaration von display: flex alle Flex-Elemente am Zeilenanfang ausgerichtet. Schriftlich werden Elemente von links nach rechts von links gruppiert.


Bitte beachten Sie, dass die Eigenschaft " justify-content nur dann einen sichtbaren Effekt erzeugt, wenn freier Speicherplatz vorhanden ist . Wenn Ihre Gruppe von Elementen den gesamten Raum auf der Hauptachse einnimmt, führt justify-content daher nichts aus.


Wenn " justify-content auf " flex-end , werden alle Elemente an das Zeilenende verschoben. Freier Speicherplatz steht jetzt am Anfang.


Es gibt andere Dinge, die Sie mit diesem Raum tun können. Verteilen Sie es beispielsweise mithilfe von " justify-content: space-between zwischen unseren Elementen. In diesem Fall werden das erste und das letzte Element an den Enden des Containers platziert und der gesamte Raum wird gleichmäßig zwischen den Elementen aufgeteilt.


Wir können Speicherplatz mithilfe von justify-content: space-around zuweisen justify-content: space-around . In diesem Fall wird der verfügbare Platz in gleiche Teile geteilt und auf jeder Seite des Elements platziert.


Der neue Wert für den justify-content finden Sie in der Box-Ausrichtungsspezifikation. Es ist nicht in der Flexbox-Spezifikation angegeben. Dieser Wert ist space-evenly . In diesem Fall sind die Elemente gleichmäßig im Container verteilt, und der zusätzliche Raum ist gleichmäßig zwischen den Elementen und auf beiden Seiten verteilt.



Sie können mit allen Werten in der Demo herumspielen .

Die Werte funktionieren vertikal genauso, flex-direction wenn die flex-direction auf die column angewendet column . Möglicherweise haben Sie in der Spalte keinen freien Speicherplatz für die Verteilung, wenn Sie nicht die Höhe oder Blockgröße des Containers wie in dieser Demo hinzufügen.

Axiale Ausrichtung mit align-content


Wenn der Container mehrere Achsen hat und flex-wrap: wrap angegeben ist, können Sie align-content , um die Linien auf der Querachse auszurichten. Es wird jedoch zusätzlicher Platz benötigt. In dieser Demonstration arbeitet die Querachse in Richtung der Säule, und ich habe angegeben, dass die Höhe des Behälters 60vh beträgt. Da dies mehr als notwendig ist, um alle Elemente anzuzeigen, wird vertikaler freier Speicherplatz angezeigt.

Dann kann ich align-content mit jedem der Werte anwenden.

Wenn die column als flex-direction angegeben column , funktioniert der align-content wie im folgenden Beispiel .

Wie bei justify-content arbeiten wir mit einer Gruppe von Zeichenfolgen und weisen freien Speicherplatz zu.

Eigentum nach place-content


In der Box Alignment-Spezifikation finden Sie die Eigenschaft place-content . Die Verwendung dieser Eigenschaft bedeutet, dass Sie gleichzeitig den align-content und den align-content . Der erste Wert align-content , der zweite auf justify-content . Wenn nur ein Wert angegeben wird, gilt dies für beide Eigenschaften:

 .container { place-content: space-between stretch; } 

Entspricht dem:

 .container { align-content: space-between; justify-content: stretch; } 

Und so ein Code:

 .container { place-content: space-between; } 

Entspricht dem Folgenden:

 .container { align-content: space-between; justify-content: space-between; } 

Axiale Ausrichtung mit align-items


Jetzt wissen wir, dass Sie eine Reihe von Elementen oder Zeilen als Gruppe ausrichten können. Es gibt jedoch eine andere Möglichkeit, die Elemente auf der Querachse miteinander auszurichten. Der Behälter hat eine Höhe, die durch die Höhe des höchsten Elements bestimmt wird.


Alternativ kann es durch die height Eigenschaft im Container definiert werden:


Warum Elemente auf die Größe des höchsten Elements gedehnt werden - Dies liegt daran, dass der Anfangswert für den Parameter " align-items ist. Elemente werden entlang der Querachse auf die Größe des Behälters in dieser Richtung gedehnt.

Beachten Sie, dass in einem mehrzeiligen Container jede Zeile wie ein neuer Container wirkt. Das höchste Element in dieser Zeile bestimmt die Größe aller Elemente in dieser Zeile.

Zusätzlich zum anfänglichen stretch können Sie align-items auf flex-start . In diesem Fall werden sie am Anfang des Containers ausgerichtet und nicht mehr in der Höhe gedehnt.


Der flex-end Wert verschiebt sie entlang der Querachse zum Ende des Containers.


Wenn Sie den Mittelwert verwenden, werden die Elemente relativ zueinander zentriert:


Wir können sie auch an der Grundlinie ausrichten. Dies stellt sicher, dass der Text im Gegensatz zur Ausrichtung der Felder um den Text auf einer Basis ausgerichtet ist.


Alle diese Optionen können in der Demo ausprobiert werden.

Individuelle Ausrichtung mit align-self


Mit align-items Eigenschaft align-items die Ausrichtung aller Elemente gleichzeitig festgelegt. Tatsächlich werden align-self Werte für alle Elemente der Gruppe festgelegt. Sie können die Eigenschaft align-self für jedes einzelne Element verwenden, um es innerhalb der Zeichenfolge und in Bezug auf andere Elemente auszurichten.

Im folgenden Beispiel werden align-items im Container verwendet, um die gesamte Gruppe zu align-self , aber auch align-self für das erste und das letzte Element.



Warum nicht sich selbst justify-self ?


Oft stellt sich die Frage, warum es unmöglich ist, ein Element oder eine Gruppe von Elementen entlang der Hauptachse auszurichten. Warum gibt es in -self keine Eigenschaft für die Ausrichtung auf der Hauptachse? Wenn Sie " justify-content align-content einführen, justify-content Speicherplatz zuzuweisen, wird die Antwort offensichtlicher. Wir behandeln Elemente als Gruppe und platzieren den freien Raum auf eine bestimmte Weise: entweder am Anfang oder am Ende der Gruppe oder zwischen Elementen.

Es kann auch nützlich sein, darüber nachzudenken, wie das align-content justify-content und das align-content im CSS-Rasterlayout funktionieren. In Grid werden diese Eigenschaften verwendet, um freien Speicherplatz in einem Grid-Container zwischen Grid-Tracks zu verteilen. Hier nehmen wir auch eine Gruppe von Spuren - und mit Hilfe dieser Eigenschaften verteilen wir freien Speicherplatz zwischen ihnen. Da wir sowohl im Grid als auch in der Flexbox in einer Gruppe arbeiten, können wir kein separates Element nehmen und etwas anderes damit machen. Es gibt jedoch eine Möglichkeit, das Layoutdesign zu erhalten, das Codierer wünschen, wenn sie über die self auf der Hauptachse sprechen. Dies ist die Verwendung von automatischen Feldern.

Automatische Felder auf der Hauptachse verwenden


Wenn Sie jemals einen Block in CSS zentriert haben (z. B. den Inhalt der Hauptseite umbrechen, die Felder links und rechts in auto ), haben Sie bereits Erfahrung mit automatischen Feldern. Der auto Wert für die Felder füllt den maximalen Platz in der eingestellten Richtung aus. Um den Block zu zentrieren, setzen wir das linke und das rechte Feld auf auto : Jedes von ihnen versucht, so viel Platz wie möglich einzunehmen, und platziert unseren Block daher in der Mitte.

Automatische Felder funktionieren in Flexbox sehr gut, um einzelne Elemente oder Elementgruppen auf der Hauptachse auszurichten. Das folgende Beispiel zeigt einen typischen Fall. Es gibt eine Navigationsleiste, die Elemente werden als Zeichenfolge angezeigt und verwenden den Anfangswert justify-content: start . Ich möchte, dass das letzte Element am Ende der Zeile getrennt von den anderen angezeigt wird - vorausgesetzt, die Zeile bietet ausreichend Platz dafür.

Wir nehmen dieses Element und setzen die Eigenschaft margin-left auf auto . Dies bedeutet, dass das Feld versucht, so viel Platz wie möglich links vom Element zu erhalten, dh das Element wird an den rechten Rand verschoben.



Wenn Sie automatische Felder auf der Hauptachse verwenden, funktioniert der Ausrichtungsinhalt nicht mehr, da automatische Felder den gesamten Speicherplatz einnehmen, der andernfalls mithilfe des justify-content zugewiesen würde.

Ersatzausrichtung


Für jede Ausrichtungsmethode wird ein Fallback beschrieben - was passiert, wenn die angegebene Ausrichtung nicht möglich ist. Wenn Sie beispielsweise nur ein Element im Container haben und den justify-content: space-between angeben justify-content: space-between , was soll passieren? In diesem Fall wird eine Ersatz- flex-start Ausrichtung angewendet - ein Element wird am Anfang des Containers ausgerichtet. Im Fall von justify-content: space-around wird eine Ersatz- center Ausrichtung verwendet.

In der aktuellen Spezifikation können Sie die Ersatzausrichtung nicht ändern. Zu den Spezifikationen gibt es einen Hinweis , der die Möglichkeit bietet, in zukünftigen Versionen einen beliebigen Fallback anzugeben.

Sichere und unsichere Ausrichtung


Neu in der Box Alignment-Spezifikation ist das Konzept der sicheren und unsicheren Ausrichtung unter Verwendung der sicheren und unsicheren Schlüsselwörter.

Im folgenden Code ist das letzte Element zu breit für den Container. Bei unsicherer Ausrichtung und einem flexiblen Container auf der linken Seite wird das Element abgeschnitten, da der Überlauf über die Seitenränder hinausgeht.

 .container { display: flex; flex-direction: column; width: 100px; align-items: unsafe center; } .item:last-child { width: 200px; } 


Eine sichere Ausrichtung verhindert Datenverlust, indem der Überlauf auf die andere Seite verschoben wird.

 .container { display: flex; flex-direction: column; width: 100px; align-items: safe center; } .item:last-child { width: 200px; } 


Diese Schlüsselwörter werden noch nicht von allen Browsern unterstützt, zeigen jedoch, wie die Box-Ausrichtungsspezifikationen der Flexbox die Kontrolle verleihen.

Fazit


Die Ausrichtungseigenschaften begannen mit einer Liste in Flexbox, haben jedoch jetzt ihre eigenen Spezifikationen und gelten für andere Layoutkontexte. Hier sind einige wichtige Fakten, die Ihnen helfen sollen, sich an ihre Verwendung in Flexbox zu erinnern:

  • justify- für die Hauptachsen und align- für die Querachse;
  • align-content und justify-content erfordern freien Speicherplatz.
  • Die Eigenschaften " justify-content align-content werden auf Elemente in der Gruppe angewendet und verteilen den Abstand zwischen ihnen. Sie können die Ausrichtung eines einzelnen Elements nicht angeben, da die Eigenschaft -self fehlt.
  • Wenn Sie ein Element ausrichten oder eine Gruppe entlang der Hauptachse teilen möchten, verwenden Sie automatische Felder.
  • align-items legt die gleichen align-self Eigenschaften für die gesamte Gruppe fest. Verwenden Sie align-self für das untergeordnete align-self der Gruppe, um den Wert individuell festzulegen.

Source: https://habr.com/ru/post/de420935/


All Articles