Betrachten Sie die Hauptachse und die Querachse eines Flexcontainers:
Quelle: W3C
Zum Ausrichten von Flex-Elementen entlang der Hauptachse gibt es eine Eigenschaft:
Zum Ausrichten von Flex-Elementen entlang der Querachse gibt es drei Eigenschaften:
Im obigen Bild ist die Hauptachse horizontal und die Querachse vertikal. Dies sind die Standardrichtungen eines Flex-Containers.
Diese Richtungen können jedoch leicht mit der flex-direction
Eigenschaft ausgetauscht werden .
/* main axis is horizontal, cross axis is vertical */
flex-direction: row;
flex-direction: row-reverse;
/* main axis is vertical, cross axis is horizontal */
flex-direction: column;
flex-direction: column-reverse;
(Die Querachse ist immer senkrecht zur Hauptachse.)
Mein Punkt bei der Beschreibung der Arbeit der Achsen ist, dass an beiden Richtungen nichts Besonderes zu sein scheint. Hauptachse, Querachse, beide sind gleich wichtig und flex-direction
erleichtern das Hin- und Herwechseln.
Warum erhält die Querachse zwei zusätzliche Ausrichtungseigenschaften?
Warum werden align-content
und werden align-items
für die Hauptachse eine Eigenschaft zusammengefasst?
Warum bekommt die Hauptachse keine justify-self
Eigenschaft?
Szenarien, in denen diese Eigenschaften nützlich wären:
Platzieren eines Flex-Elements in der Ecke des Flex-Containers
#box3 { align-self: flex-end; justify-self: flex-end; }
Ausrichten einer Gruppe von Flex-Elementen nach rechts ausrichten (
justify-content: flex-end
), aber Ausrichten des ersten Elements nach links ausrichten (justify-self: flex-start
)Stellen Sie sich einen Kopfbereich mit einer Gruppe von Navigationselementen und einem Logo vor. Mit
justify-self
dem Logo links ausgerichtet werden könnte , während die nav Artikel ganz rechts, und das Ganze paßt glatt ( „verbiegt“) an verschiedenen Bildschirmgrößen bleiben.Befestigen Sie in einer Reihe von drei flexiblen Elementen das mittlere Element in der Mitte des Behälters (
justify-content: center
) und richten Sie die benachbarten Elemente an den Behälterkanten (justify-self: flex-start
undjustify-self: flex-end
) aus.Beachten Sie, dass Werte
space-around
undspace-between
aufjustify-content
Eigenschaft nicht das mittlere Element halten zentriert um den Behälter , wenn die benachbarten Elemente unterschiedliche Breiten aufweisen.
Zum jetzigen Zeitpunkt gibt es keine Erwähnung von justify-self
oder justify-items
in der Flexbox-Spezifikation .
Im CSS-Box-Ausrichtungsmodul , dem unvollendeten Vorschlag des W3C, einen gemeinsamen Satz von Ausrichtungseigenschaften für alle Boxmodelle festzulegen, gibt es jedoch Folgendes:
Quelle: W3C
Sie werden das bemerken justify-self
und justify-items
werden in Betracht gezogen ... aber nicht für Flexbox .
Abschließend möchte ich noch die Hauptfrage wiederholen:
Warum gibt es keine Eigenschaften "Elemente rechtfertigen" und "Selbst rechtfertigen"?
justify-content: flex-start
, also sind die Elemente am Anfang wie | abcd | überfüllt. Was würden Sie erwarten, wenn Sie dort justify-self: [anything]
Element 'b'
justify-self
, für einen Flex-Artikel zu arbeiten? Ich würde sagen, nicht so anders als die auto
Ränder, die bereits bei flexiblen Elementen funktionieren. In Ihrem zweiten Beispiel justify-self: flex-end
würde Element d es an die äußerste Kante verschieben. Das an sich wäre ein großartiges Feature, das auto
Margen bereits können. Ich habe eine Antwort mit einer Demonstration gepostet.
justify-content
und Weise einbindet und justify-self
spezifiziert, so dass Fälle mit Konflikten (wie die Szenarien, nach denen ich gefragt habe) sind klar und vernünftig definiert. Wie ich in meiner Antwort hier bemerkt habe, geht {justify|align}-self
es darum, Elemente in einem größeren Feld{justify|align}-self
auszurichten, dessen Größe unabhängig vom Wert ist - und es gibt kein solches Feld auf der Hauptachse, in das ein flexibles Element ausgerichtet werden kann.
justify-self
und wie Sie justify-content
interagieren würden, wenn sie in Konflikt stehen (wie in den von mir beschriebenen Szenarien). Automatische Ränder interagieren einfach überhaupt nichtjustify-content
- sie stehlen den gesamten Packraum, bevor justify-content
sie verwendet werden können. Auto-Ränder sind also kein gutes Analogon dafür, wie dies funktionieren würde.
justify-self
, für einen Flex-Artikel zu arbeiten? Angenommen, Sie haben Elemente a, b, c, d mit zusätzlichem Platz, um sie zu verteilen, und der Flex-Container hat siejustify-content: space-between
, sodass sie wie | abcd | enden. Was würde es bedeuten, zBjustify-self: center
oder 'Rechtfertigung-Selbst: Flex-Ende' nur zu Punkt 'b' hinzuzufügen? Wo würdest du es erwarten? (Ich sehe einige Demos in einer der Antworten hier, aber ich sehe keinen klaren Weg, wie es im Allgemeinen funktionieren würde.)