A align-itemspropriedade flex-box alinha os itens dentro de um contêiner flex ao longo do eixo transversal, assim como justify-contentfaz ao longo do eixo principal. (Para o padrão, flex-direction: rowo eixo transversal corresponde à vertical e o eixo principal corresponde à horizontal. Com flex-direction: columnesses dois são trocados respectivamente).
Aqui está um exemplo de como align-items:centerfica:
Mas align-contenté para caixas flexíveis de várias linhas. Não tem efeito quando os itens estão em uma única linha. Alinha toda a estrutura de acordo com seu valor. Aqui está um exemplo para align-content: space-around;:
E aqui está como align-content: space-around;com a align-items:centeraparência:
Observe que a terceira caixa e todas as outras caixas na primeira linha mudam para centralizadas verticalmente nessa linha.
Observe que as align-*propriedades também podem mudar os itens flexíveis horizontalmente. Depende do flex-direction. stackoverflow.com/q/32551291/3597276 #
Michael Benjamin
11
Esta é facilmente a melhor explicação. Todo mundo falha miseravelmente.
ortonomy 12/03
> "Mas o alinhamento de conteúdo é para caixas flexíveis de várias linhas. Não tem efeito quando os itens estão em uma única linha" - isso parece não ser verdade ou não ser honrado no Firefox mais recente (maio de 2020). Em vez disso, se houver uma única linha flexível (todo o conteúdo caiba abaixo do comprimento do eixo principal) que seja menor que a altura total (o tamanho do eixo transversal seja menor que o total disponível), então o conteúdo do alinhamento, se definido , obliterará o alinhamento. Itens. Isso faz sentido: se aplica a QUALQUER linha que encontrar?
Você levará de 10 a 20 minutos e, no nível 21, você encontrará a resposta para sua pergunta. Mencionou:
align-content determina o espaçamento entre linhas, enquanto align-items
determina como os itens como um todo são alinhados no contêiner. Quando há apenas uma linha, o alinhamento de conteúdo não tem efeito
Na verdade, achei o exemplo de sapo realmente útil. Aprendi muito com isso.
Spikatrix 18/02/19
63
Primeiro, align-itemsé para itens em uma única linha. Portanto, para uma única linha de elementos no eixo principal , align-itemsalinhará esses itens um ao outro e começará com uma nova perspectiva a partir da próxima linha.
Agora, align-contentnão interfere nos itens seguidos, mas nas próprias linhas . Portanto, align-contenttentará alinhar as linhas entre si e flexionar o contêiner.
Eu tive a mesma confusão. Depois de alguns ajustes baseados em muitas das respostas acima, finalmente posso ver as diferenças. Na minha humilde opinião, a distinção é melhor demonstrada com um contêiner flexível que satisfaz as duas condições a seguir:
O próprio contêiner flexível possui uma restrição de altura (por exemplo, min-height: 60rem) e, portanto, pode se tornar muito alto para seu conteúdo
Os itens filhos incluídos no contêiner têm alturas desiguais
A condição 1 me ajuda a entender o que contentsignifica em relação ao contêiner pai. Quando o conteúdo estiver nivelado com o contêiner, não poderemos ver nenhum efeito de posicionamento vindo align-content. Somente quando temos espaço extra ao longo do eixo transversal, começamos a ver seu efeito: alinha o conteúdo em relação aos limites do contêiner pai.
A condição 2 me ajuda a visualizar os efeitos de align-items: alinha itens entre si.
Aqui está um exemplo de código. As matérias-primas vêm do tutorial CSS Grid de Wes Bos (21. Flexbox vs. CSS Grid)
Exemplo de HTML:
<divclass="flex-container"><divclass="item">Short</div><divclass="item">Longerrrrrrrrrrrrrr</div><divclass="item">💩</div><divclass="item"id="tall">This is Many Words</div><divclass="item">Lorem, ipsum.</div><divclass="item">10</div><divclass="item">Snickers</div><divclass="item">Wes Is Cool</div><divclass="item">Short</div></div>
Exemplo de CSS:
.flex-container {display: flex;/*dictates a min-height*/min-height:60rem;flex-flow: row wrap;border:5px solid white;justify-content: center;align-items: center;align-content: flex-start;}#tall {/*intentionally made tall*/min-height:30rem;}.item {margin:10px;max-height:10rem;}
Exemplo 1 : Vamos restringir a janela de exibição para que o conteúdo fique nivelado com o contêiner. É nesse momento align-content: flex-start;que não há efeitos, pois todo o bloco de conteúdo está bem dentro do contêiner (não há espaço extra para reposicionar!)
Observe também a 2ª linha - veja como os itens estão alinhados ao centro entre si.
Exemplo 2 : à medida que ampliamos a janela de exibição, não temos mais conteúdo suficiente para encher o contêiner inteiro. Agora começamos a ver os efeitos de align-content: flex-start;--it alinha o conteúdo em relação à borda superior do contêiner.
Esses exemplos são baseados no flexbox, mas os mesmos princípios são aplicáveis à grade CSS. Espero que isto ajude :)
align-contentpode mudar a altura de uma linha para a direcção da linha ou da largura para a coluna quando o seu valor é de estiramento, ou adicionar espaço vazio entre ou em torno das linhas de space-between, space-around, flex-start,flex-end values .
align-itemspode alterar a altura ou posição dos itens dentro da área da linha. Quando os itens não são agrupados, eles têm apenas uma linha, cuja área é sempre esticada até a área da caixa flexível (mesmo que os itens estourem) e align-contentnão tem efeito em uma única linha. Portanto, não tem efeito em itens que não são embalados e apenasalign-items pode alterar a posição dos itens ou esticá-los quando todos estiverem em uma única linha.
No entanto, se eles estiverem agrupados, você terá várias linhas e itens dentro de cada linha. E se todos os itens de cada linha tiverem a mesma altura (para direção da linha), a altura dessa linha será igual à altura desses itens e você não verá nenhum efeito alterando o align-itemsvalor.
Portanto, se você deseja afetar os itens align-itemsquando os itens são quebrados e têm a mesma altura (para direção da linha), primeiro você deve usar o align-contentvalor de estiramento para expandir a área das linhas.
align-contentcontrola o posicionamento no eixo cruzado (isto flex-directioné row, na direção vertical, se for , e horizontal, se flex-directionfor column), de várias linhas em relação uma à outra.
(Pense nas linhas de um parágrafo sendo espalhadas verticalmente, empilhadas em direção ao topo, empilhadas em direção ao fundo. Isso está sob um flex-directionparadigma de linha).
alinhar itens
align-items controla o eixo transversal de uma linha individual de elementos flexíveis.
(Pense em como uma linha individual de um parágrafo está alinhada, se contiver algum texto normal e um texto mais alto, como equações matemáticas. Nesse caso, será a parte inferior, superior ou central de cada tipo de texto em uma linha que estar alinhado?)
quando você usa item de alinhamento ou item justificado, está ajustando "o conteúdo dentro de um item de grade ao longo do eixo da coluna ou do eixo da linha, respectivamente.
Mas: se você usar conteúdo de alinhamento ou justificar conteúdo, estará definindo a posição de uma grade ao longo do eixo da coluna ou do eixo da linha. isso ocorre quando você tem uma grade em um contêiner maior e a largura ou a altura são inflexíveis (usando px).
Respostas:
A
align-items
propriedade flex-box alinha os itens dentro de um contêiner flex ao longo do eixo transversal, assim comojustify-content
faz ao longo do eixo principal. (Para o padrão,flex-direction: row
o eixo transversal corresponde à vertical e o eixo principal corresponde à horizontal. Comflex-direction: column
esses dois são trocados respectivamente).Aqui está um exemplo de como
align-items:center
fica:Mas
align-content
é para caixas flexíveis de várias linhas. Não tem efeito quando os itens estão em uma única linha. Alinha toda a estrutura de acordo com seu valor. Aqui está um exemplo paraalign-content: space-around;
:E aqui está como
align-content: space-around;
com aalign-items:center
aparência:Observe que a terceira caixa e todas as outras caixas na primeira linha mudam para centralizadas verticalmente nessa linha.
Aqui estão alguns links de codepen para brincar:
http://codepen.io/asim-coder/pen/MKQWbb
http://codepen.io/asim-coder/pen/WrMNWR
Aqui está uma caneta super legal que mostra e permite que você jogue com quase tudo no flexbox.
fonte
align-*
propriedades também podem mudar os itens flexíveis horizontalmente. Depende doflex-direction
. stackoverflow.com/q/32551291/3597276 #Acho o exemplo http://flexboxfroggy.com/ muito útil.
Você levará de 10 a 20 minutos e, no nível 21, você encontrará a resposta para sua pergunta. Mencionou:
fonte
Primeiro,
align-items
é para itens em uma única linha. Portanto, para uma única linha de elementos no eixo principal ,align-items
alinhará esses itens um ao outro e começará com uma nova perspectiva a partir da próxima linha.Agora,
align-content
não interfere nos itens seguidos, mas nas próprias linhas . Portanto,align-content
tentará alinhar as linhas entre si e flexionar o contêiner.Verifique este violino: https://jsfiddle.net/htym5zkn/8/
fonte
Eu tive a mesma confusão. Depois de alguns ajustes baseados em muitas das respostas acima, finalmente posso ver as diferenças. Na minha humilde opinião, a distinção é melhor demonstrada com um contêiner flexível que satisfaz as duas condições a seguir:
min-height: 60rem
) e, portanto, pode se tornar muito alto para seu conteúdoA condição 1 me ajuda a entender o que
content
significa em relação ao contêiner pai. Quando o conteúdo estiver nivelado com o contêiner, não poderemos ver nenhum efeito de posicionamento vindoalign-content
. Somente quando temos espaço extra ao longo do eixo transversal, começamos a ver seu efeito: alinha o conteúdo em relação aos limites do contêiner pai.A condição 2 me ajuda a visualizar os efeitos de
align-items
: alinha itens entre si.Aqui está um exemplo de código. As matérias-primas vêm do tutorial CSS Grid de Wes Bos (21. Flexbox vs. CSS Grid)
Exemplo 1 : Vamos restringir a janela de exibição para que o conteúdo fique nivelado com o contêiner. É nesse momento
align-content: flex-start;
que não há efeitos, pois todo o bloco de conteúdo está bem dentro do contêiner (não há espaço extra para reposicionar!)Observe também a 2ª linha - veja como os itens estão alinhados ao centro entre si.
Exemplo 2 : à medida que ampliamos a janela de exibição, não temos mais conteúdo suficiente para encher o contêiner inteiro. Agora começamos a ver os efeitos de
align-content: flex-start;
--it alinha o conteúdo em relação à borda superior do contêiner.Esses exemplos são baseados no flexbox, mas os mesmos princípios são aplicáveis à grade CSS. Espero que isto ajude :)
fonte
Bem, eu os examinei no meu navegador.
align-content
pode mudar a altura de uma linha para a direcção da linha ou da largura para a coluna quando o seu valor é de estiramento, ou adicionar espaço vazio entre ou em torno das linhas despace-between
,space-around
,flex-start
,flex-end values
.align-items
pode alterar a altura ou posição dos itens dentro da área da linha. Quando os itens não são agrupados, eles têm apenas uma linha, cuja área é sempre esticada até a área da caixa flexível (mesmo que os itens estourem) ealign-content
não tem efeito em uma única linha. Portanto, não tem efeito em itens que não são embalados e apenasalign-items
pode alterar a posição dos itens ou esticá-los quando todos estiverem em uma única linha.No entanto, se eles estiverem agrupados, você terá várias linhas e itens dentro de cada linha. E se todos os itens de cada linha tiverem a mesma altura (para direção da linha), a altura dessa linha será igual à altura desses itens e você não verá nenhum efeito alterando o
align-items
valor.Portanto, se você deseja afetar os itens
align-items
quando os itens são quebrados e têm a mesma altura (para direção da linha), primeiro você deve usar oalign-content
valor de estiramento para expandir a área das linhas.fonte
align-content
align-content
controla o posicionamento no eixo cruzado (istoflex-direction
érow
, na direção vertical, se for , e horizontal, seflex-direction
forcolumn
), de várias linhas em relação uma à outra.(Pense nas linhas de um parágrafo sendo espalhadas verticalmente, empilhadas em direção ao topo, empilhadas em direção ao fundo. Isso está sob um
flex-direction
paradigma de linha).alinhar itens
align-items
controla o eixo transversal de uma linha individual de elementos flexíveis.(Pense em como uma linha individual de um parágrafo está alinhada, se contiver algum texto normal e um texto mais alto, como equações matemáticas. Nesse caso, será a parte inferior, superior ou central de cada tipo de texto em uma linha que estar alinhado?)
fonte
O que aprendi com cada resposta e visitando o blog é
flex-direction: row
flex-direction: column
align-content é para a linha, funciona se o contêiner tiver (mais de uma linha) Propriedades do align-content
align-items é para os itens da linha Properties of align-items
Para mais informações, visite flex
fonte
A principal diferença é quando a altura dos elementos não é a mesma! Então você pode ver como, na linha, eles são todos center \ end \ start
fonte
de acordo com o que eu entendi daqui :
quando você usa item de alinhamento ou item justificado, está ajustando "o conteúdo dentro de um item de grade ao longo do eixo da coluna ou do eixo da linha, respectivamente.
Mas: se você usar conteúdo de alinhamento ou justificar conteúdo, estará definindo a posição de uma grade ao longo do eixo da coluna ou do eixo da linha. isso ocorre quando você tem uma grade em um contêiner maior e a largura ou a altura são inflexíveis (usando px).
fonte