Considera l'asse principale e l'asse trasversale di un contenitore flessibile:
Fonte: W3C
Per allineare gli elementi flessibili lungo l'asse principale esiste una proprietà:
Per allineare gli elementi flessibili lungo l'asse trasversale ci sono tre proprietà:
Nell'immagine sopra, l'asse principale è orizzontale e l'asse trasversale è verticale. Queste sono le direzioni predefinite di un contenitore flessibile.
Tuttavia, queste direzioni possono essere facilmente scambiate con la flex-directionproprietà.
/* 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;
(L'asse trasversale è sempre perpendicolare all'asse principale.)
Il mio punto nel descrivere come il lavoro degli assi è che non sembra esserci nulla di speciale in nessuna delle due direzioni. Asse principale, asse trasversale, sono entrambi uguali in termini di importanza e flex-directionfacilita il passaggio avanti e indietro.
Quindi perché l'asse trasversale ottiene due proprietà di allineamento aggiuntive?
Perché sono align-contente align-itemsconsolidati in una proprietà per l'asse principale?
Perché l'asse principale non ottiene una justify-selfproprietà?
Scenari in cui queste proprietà sarebbero utili:
posizionando un oggetto flessibile nell'angolo del contenitore flessibile
#box3 { align-self: flex-end; justify-self: flex-end; }facendo allineare un gruppo di elementi flessibili a destra (
justify-content: flex-end) ma allineare il primo elemento a sinistra (justify-self: flex-start)Considera una sezione di intestazione con un gruppo di elementi di navigazione e un logo. Con
justify-selfil logo potrebbe essere allineato a sinistra mentre gli elementi di navigazione rimangono all'estrema destra e il tutto si regola senza problemi ("si flette") a dimensioni dello schermo diverse.in una fila di tre oggetti flessibili, applicare l'elemento centrale al centro del contenitore (
justify-content: center) e allineare gli oggetti adiacenti ai bordi del contenitore (justify-self: flex-startejustify-self: flex-end).Si noti che i valori
space-aroundespace-betweensullajustify-contentproprietà non manterranno l'elemento centrale centrato sul contenitore se gli elementi adiacenti hanno larghezze diverse.
Al momento della stesura di questo documento, non è menzionato justify-selfné justify-itemsnelle specifiche del flexbox .
Tuttavia, nel CSS Box Alignment Module , che è la proposta incompiuta del W3C di stabilire un insieme comune di proprietà di allineamento da utilizzare su tutti i modelli di box, c'è questo:
Fonte: W3C
Lo noterai justify-selfe verraijustify-items considerato ... ma non per Flexbox .
Finirò ripetendo la domanda principale:
Perché non ci sono proprietà "giustificare-elementi" e "giustificare-sé"?
justify-content: flex-start, quindi all'inizio gli oggetti sono affollati come | abcd |. Cosa ti aspetteresti che faccia, se metti justify-self: [anything]l'oggetto 'b' lì?)
justify-selfdi lavorare per un oggetto flessibile? Direi non diversamente dai automargini che funzionano già su articoli flessibili. Nel tuo secondo esempio, justify-self: flex-endsull'elemento d lo sposteresti sul bordo lontano. Questa di per sé sarebbe una grande caratteristica, che i automargini possono già fare. Ho pubblicato una risposta con una dimostrazione.
justify-content e justify-selfspecificato, in modo che i casi con conflitti (come gli scenari di cui ho chiesto) sono chiaramente e sensibilmente definiti. Come ho notato nella mia risposta qui, si {justify|align}-selftratta di allineare gli oggetti all'interno di una scatola più grande che è dimensionata indipendentemente dal {justify|align}-selfvalore - e non esiste una scatola simile, nell'asse principale, in cui un oggetto flessibile possa essere allineato.
justify-selfe come justify-contentinteragiresti, nei casi in cui sono in conflitto (come gli scenari che ho definito). I margini automatici semplicemente non interagiscono justify-contentaffatto: rubano tutto lo spazio di imballaggio prima che abbiano la justify-contentpossibilità di usarlo. Quindi, i margini automatici non sono davvero un buon analogo per come funzionerebbe.



















justify-selfdi lavorare per un articolo flessibile? Supponiamo di avere oggetti a, b, c, d con spazio extra da distribuire attorno a loro, e il contenitore flessibile abbiajustify-content: space-between, quindi finiscono come | abcd |. Cosa significherebbe aggiungere, ad esempio,justify-self: centero 'giustificare-sé: fine flessibile' solo all'elemento 'b' lì? Dove ti aspetteresti che vada? (Vedo alcune demo in una delle risposte qui, ma non vedo un modo chiaro che funzionerebbe in generale.)