Considere o eixo principal e o eixo transversal de um contêiner flexível:
Fonte: W3C
Para alinhar itens flexíveis ao longo do eixo principal, existe uma propriedade:
Para alinhar itens flexíveis ao longo do eixo transversal, existem três propriedades:
Na imagem acima, o eixo principal é horizontal e o eixo transversal é vertical. Essas são as direções padrão de um contêiner flexível.
No entanto, essas instruções podem ser facilmente trocadas com a flex-directionpropriedade.
/* 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;
(O eixo transversal é sempre perpendicular ao eixo principal.)
Meu argumento ao descrever como os eixos funcionam é que não parece haver nada de especial em nenhuma das direções. Eixo principal, eixo transversal, ambos são iguais em termos de importância e flex-directionfacilitam a alternância.
Então, por que o eixo transversal obtém duas propriedades de alinhamento adicionais?
Por que align-contente são align-itemsconsolidados em uma propriedade para o eixo principal?
Por que o eixo principal não obtém uma justify-selfpropriedade?
Cenários em que essas propriedades seriam úteis:
colocando um item flexível no canto do contêiner flexível
#box3 { align-self: flex-end; justify-self: flex-end; }alinhando um grupo de itens flexíveis à direita (
justify-content: flex-end), mas com o primeiro item alinhado à esquerda (justify-self: flex-start)Considere uma seção de cabeçalho com um grupo de itens de navegação e um logotipo. Com
justify-selfo logotipo pode ser alinhado à esquerda, enquanto os itens de navegação ficam à direita, e tudo se ajusta suavemente ("flexiona") para diferentes tamanhos de tela.em uma linha de três itens flexíveis, afixe o item do meio ao centro do contêiner (
justify-content: center) e alinhe os itens adjacentes às bordas do contêiner (justify-self: flex-startejustify-self: flex-end).Observe que os valores
space-aroundespace-betweenajustify-contentpropriedade não manterão o item do meio centralizado sobre o contêiner se os itens adjacentes tiverem larguras diferentes.
No momento da redação deste documento, não há menção justify-selfou justify-itemsna especificação do flexbox .
No entanto, no Módulo de alinhamento de caixas CSS , que é a proposta inacabada do W3C de estabelecer um conjunto comum de propriedades de alinhamento para uso em todos os modelos de caixas, existe o seguinte:
Fonte: W3C
Você notará isso justify-selfe justify-itemsestá sendo considerado ... mas não para o flexbox .
Terminarei reiterando a questão principal:
Por que não existem propriedades "justify-items" e "justify-self"?
justify-content: flex-start, para que os itens estão lotados no início como | abcd | O que você espera que ele faça, se você colocar. justify-self: [anything]Do item 'b' lá?)
justify-selftrabalhar para um item flexível? Eu diria que não tão diferente do que as automargens já funcionam em itens flex. No seu segundo exemplo, o justify-self: flex-enditem d o moveria para a extremidade. Isso por si só seria um ótimo recurso, que as automargens já podem fazer. Postei uma resposta com uma demonstração.
justify-contente justify-selfsão especificados, para que casos com conflitos (como os cenários perguntei sobre) são definidos de forma clara e sensata. Como observei na minha resposta aqui, {justify|align}-selftrata-se de alinhar itens dentro de uma caixa maior, dimensionada independentemente do {justify|align}-selfvalor - e não existe essa caixa, no eixo principal, para alinhar um item flexível.
justify-selfe justify-contentinterage, nos casos em que elas conflitam (como os cenários apresentados). As margens automáticas simplesmente não interagem justify-content- elas roubam todo o espaço da embalagem antes que você justify-contentpossa usá-lo. Portanto, as margens automáticas não são realmente um bom análogo de como isso funcionaria.



















justify-selftrabalhar para um item flexível? Suponha que você tenha os itens a, b, c, d com espaço extra para distribuir em torno deles, e o contêiner flex tenhajustify-content: space-between, portanto eles acabam como | abcd |. O que significaria adicionar, por exemplo,justify-self: centerou 'justificar-se: flex-end', apenas ao item 'b' lá? Para onde você esperaria que fosse? (Eu vejo algumas demos em uma das respostas aqui, mas eu não vejo uma forma clara que ele iria trabalhar em geral.)