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-directionEigenschaft 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-directionerleichtern das Hin- und Herwechseln.
Warum erhält die Querachse zwei zusätzliche Ausrichtungseigenschaften?
Warum werden align-contentund werden align-itemsfür die Hauptachse eine Eigenschaft zusammengefasst?
Warum bekommt die Hauptachse keine justify-selfEigenschaft?
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-selfdem 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-startundjustify-self: flex-end) aus.Beachten Sie, dass Werte
space-aroundundspace-betweenaufjustify-contentEigenschaft 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-selfoder justify-itemsin 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-selfund justify-itemswerden 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 autoRänder, die bereits bei flexiblen Elementen funktionieren. In Ihrem zweiten Beispiel justify-self: flex-endwürde Element d es an die äußerste Kante verschieben. Das an sich wäre ein großartiges Feature, das autoMargen bereits können. Ich habe eine Antwort mit einer Demonstration gepostet.
justify-contentund Weise einbindet und justify-selfspezifiziert, 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}-selfes 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-selfund wie Sie justify-contentinteragieren 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-contentsie 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: centeroder '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.)