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-directionproprié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-directionfacilitent les allers-retours.
Alors pourquoi l'axe transversal obtient-il deux propriétés d'alignement supplémentaires?
Pourquoi align-contentet align-itemsconsolidé en une seule propriété pour l'axe principal?
Pourquoi l'axe principal n'obtient-il pas de justify-selfproprié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-selfle 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-startetjustify-self: flex-end).Notez que les valeurs
space-aroundetspace-betweensur lajustify-contentproprié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-selfou justify-itemsdans 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-selfet 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 automarges 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 automarges peuvent déjà faire. J'ai posté une réponse avec une démonstration.
justify-contentet justify-selfsont 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}-selfs'agit d'aligner les éléments dans une boîte plus grande qui est dimensionnée indépendamment de la {justify|align}-selfvaleur - et il n'y a pas une telle boîte, dans l'axe principal, pour un élément flexible à aligner.
justify-selfet justify-contentinteragiriez, en cas de conflit (comme les scénarios que j'ai exposés). Marges automatiques ne suffit pas d' interagir avec justify-contentdu tout - ils volent tout l'espace d'emballage avant justify-contentobtient 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: centerou «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.)