align-items VS align-content

Lucas Batista
4 min readApr 20, 2021

--

O alinhamento no eixo-cruzado, eixo oposto ao definido em flex-direction, é realizado tanto pelo align-items quanto o align-content, isso pode facilmente gerar confusão. Para isso irei demonstrar na prática a diferença entre eles.

Nosso exemplo estará com flex-direction: row; e flex-wrap: wrap; logo o eixo cruzado será o vertical, também é importante salientar que sem o flex-wrap o align-content não faz sentido, porque não existirão linhas flex para serem alinhadas, só itens flex para serem alinhados em uma única linha flex e para isso se usa somente o align-items.

Conceitos básicos

  • Flex Container
    É o local onde as propriedades flex, align-items e align-content são passadas, sendo o conjunto de itens e linhas flex
Exemplo de Flex Container
  • Itens Flex / Flex Item
    São os itens individuais que compõem o flex container
Exemplo de Item Flex
  • Linhas Flex / Flex Lines
    São o conjunto de itens flex no mesmo eixo principal (horizontal nesse exemplo)
Exemplo de Linha Flex

Comportamento padrão (quando não definido):

  • align-items: stretch; — Itens flex crescem na linha flex para preenche-la
  • align-content: normal;Linhas flex se alinham em sua posição padrão, como se nenhum valor tivesse sido definido, quando junto a um align-items passa a ter um comportamento semelhante (ex: com um align-items: flex-end; as linhas flex se alinham também ao fim)
Comportamento padrão do align-items e align-content

align-items

É responsável pelo alinhamento de acordo ao eixo cruzado (verticalmente nesse exemplo) dos itens flex dentro de uma linha flex.

Na prática, o align-items insere em todos os elementos flex da linha a propriedade align-self respectiva
(ex.: usar align-items: flex-start; aplica align-self: flex-start; a todos os elementos da linha)

  • align-items: flex-start;
    Itens flex se alinham na linha flex ao começo (topo no ex.)
align-items: flex-start; + align-content: normal;
  • align-items: flex-end;
    Itens flex se alinham na linha flex ao fim (rodapé no ex.)
align-items: flex-end; + align-content: normal;
  • align-items: center;
    Itens flex se alinham na linha flex ao centro
align-items: center; + align-content:normal;
  • align-items: baseline;
    Itens flex se alinham na linha flex conforme a base do texto
align-items: baseline; + align-content: normal;
  • align-items: stretch; (padrão)
    Itens flex se esticam para preencher toda a linha flex, é o comportamento padrão que é adotado quando nenhuma configuração é passada
align-items: stretch; + align-content: flex-start;

align-content

É responsável pelo alinhamento de acordo ao eixo cruzado (verticalmente nesse exemplo) das linhas flex de acordo ao flex container

  • align-content: normal; (padrão)
    Atua como se nenhum comportamento tivesse sido definido, assim a posição das linhas flex refletem a configuração do align-items
    Ex.: Junto a um align-items: flex-end, acaba alinhando as linhas flex junto ao fim do flex container
align-content: normal + ;align-items: flex-end;
  • align-content: flex-start;
    Linhas flex se alinham ao começo do flex-container (topo no ex.)
align-content: flex-start; + align-itens: flex-start;
  • align-content: flex-end;
    Linhas flex se alinham ao fim do flex container (rodapé no ex.)
align-content: flex-end; + align-items: flex-start;
  • align-content: center;
    Linhas flex se alinham ao centro do flex container
align-content: center + align-items: flex-start
  • align-content: space-between;
    Linhas flex se separam ao máximo possível
align-content: space-between + align-items: flex-start
  • align-content: space-around;
    Linhas flex são separadas com espaços iguais entre cada linha (2x) o dobro da distância com a borda do flex container (x)
align-content: space-around; + align-items: flex-start;
  • align-content: space-evenly;
    Linhas flex são separadas com espaços iguais de cada lado (x)
align-content: space-evenly; + align-items: flex-start;

Agora só praticar!

Caso deseje, você pode experimentar todas essas propriedades no CodePen usado para escrever esse texto:
https://codepen.io/Skiiidrow/pen/oNBagKd

--

--

Lucas Batista

I am a Software Developer, passionate about technology from an early age. Dedicated to creating impactful and innovative products that improve people's lives.