Considérez l'axe principal et l'axe transversal d'un conteneur flexible:
Source: W3C
Pour aligner les éléments flexibles le long de l'axe principal, il existe une propriété:
Pour aligner les éléments flexibles le long de l'axe transversal, il existe trois propriétés:
Dans l'image ci-dessus, l'axe principal est horizontal et l'axe transversal est vertical. Ce sont les directions par défaut d'un conteneur flexible.
Cependant, ces directions peuvent être facilement échangées avec la flex-direction
propriété.
/* 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'axe transversal est toujours perpendiculaire à l'axe principal.)
Mon point en décrivant comment le travail des axes est qu'il ne semble y avoir rien de spécial dans l'une ou l'autre direction. Axe principal, axe transversal, ils sont tous deux égaux en importance et flex-direction
facilitent les allers-retours.
Alors pourquoi l'axe transversal obtient-il deux propriétés d'alignement supplémentaires?
Pourquoi align-content
et align-items
consolidé en une seule propriété pour l'axe principal?
Pourquoi l'axe principal n'obtient-il pas de justify-self
propriété?
Scénarios où ces propriétés seraient utiles:
placer un élément flexible dans le coin du conteneur flexible
#box3 { align-self: flex-end; justify-self: flex-end; }
création d'un groupe d'éléments flexibles align-right (
justify-content: flex-end
) mais le premier élément s'aligne left (justify-self: flex-start
)Considérez une section d'en-tête avec un groupe d'éléments de navigation et un logo. Avec
justify-self
le logo pourrait être aligné à gauche tandis que les éléments de navigation restent à l'extrême droite, et le tout s'ajuste en douceur ("fléchit") à différentes tailles d'écran.dans une rangée de trois éléments flexibles, fixez l'élément du milieu au centre du conteneur (
justify-content: center
) et alignez les éléments adjacents sur les bords du conteneur (justify-self: flex-start
etjustify-self: flex-end
).Notez que les valeurs
space-around
etspace-between
sur lajustify-content
propriété ne gardera pas l'élément Centré au milieu autour du récipient si les éléments adjacents ont des largeurs différentes.
Au moment d'écrire ces lignes , il n'y a aucune mention de justify-self
ou justify-items
dans la spécification flexbox .
Cependant, dans le module d'alignement de boîtes CSS , qui est la proposition inachevée du W3C d'établir un ensemble commun de propriétés d'alignement à utiliser sur tous les modèles de boîtes, il y a ceci:
Source: W3C
Vous le remarquerez justify-self
et justify-items
êtes envisagé ... mais pas pour la flexbox .
Je terminerai en réitérant la question principale:
Pourquoi n'y a-t-il pas de propriétés "justifier-articles" et "justifier-soi"?
justify-content: flex-start
, donc les éléments sont encombrés au début comme | abcd |. Que vous attendriez-vous à ce que cela se justify-self: [anything]
justify-self
à travailler pour un élément flexible? Je dirais pas si différemment que les auto
marges fonctionnent déjà sur les éléments flexibles. Dans votre deuxième exemple, l' justify-self: flex-end
élément d le déplacerait vers le bord éloigné. Ce serait en soi une grande fonctionnalité, ce que les auto
marges peuvent déjà faire. J'ai posté une réponse avec une démonstration.
justify-content
et justify-self
sont spécifiés, de sorte que les cas avec les conflits (comme les scénarios je leur ai demandé) sont clairement et sensiblement définis. Comme je l'ai noté dans ma réponse ici, il {justify|align}-self
s'agit d'aligner les éléments dans une boîte plus grande qui est dimensionnée indépendamment de la {justify|align}-self
valeur - et il n'y a pas une telle boîte, dans l'axe principal, pour un élément flexible à aligner.
justify-self
et justify-content
interagiriez, en cas de conflit (comme les scénarios que j'ai exposés). Marges automatiques ne suffit pas d' interagir avec justify-content
du tout - ils volent tout l'espace d'emballage avant justify-content
obtient une chance de l' utiliser. Ainsi, les marges automatiques ne sont pas vraiment un bon analogue pour savoir comment cela fonctionnerait.
justify-self
à travailler pour un article flexible? Supposons que vous ayez des éléments a, b, c, d avec un espace supplémentaire à distribuer autour d'eux, et que le conteneur flexible en disposejustify-content: space-between
, de sorte qu'ils finissent comme | abcd |. Qu'est-ce que cela signifierait d'ajouter par exemplejustify-self: center
ou «justifier-soi: flex-end» juste pour l'élément «b»? Où vous attendriez-vous à ce qu'il aille? (Je vois quelques démos dans l'une des réponses ici, mais je ne vois pas de manière claire que cela fonctionnerait en général.)