Como o Flexbox funciona— explicado com gifs grandes e coloridos

Lucas J S
6 min readMar 26, 2017

--

NOTA: Esse artigo foi traduzido originalmente de: How Flexbox works — explained with big, colorful, animated gifs, com a autorização de Scott Domes. Todos devidos os créditos à ele.

O Flexbox promete nos salvar dos males do CSS puro (como o alinhamento vertical).

Bem, o Flexbox chega nesse objetivo. Mas dominar seu novo modelo mental pode ser desafiador.

Então vamos dar uma olhada em como o Flexbox funciona, sendo assim podemos usá-lo para construir layouts melhores.

O princípio base do Flexbox é tornar os layouts flexíveis e intuitivos.

Para conseguir isso, ele permite que os containers decidam por si mesmos como distribuir seus filhos de forma uniforme — incluindo seu tamanho e espaço entre eles.

À princípio, tudo isso soa bem. Mas vamos ver o que parece ser na prática.

Neste artigo, vamos mergulhar nas 5 propriedades mais comuns do Flexbox. Vamos explorar o que essas propriedades fazem, como você pode usá-las e como seus resultados vão parecer.

1ª propriedade: Display: Flex

Aqui está nossa página de exemplo:

Você tem quatro divs coloridas de vários tamanhos, coloca dentro de uma div container cinza. A partir de agora, cada div foi setada como padrão para display: block. Assim cada quadrado ocupa toda a largura de sua linha.

Para começar com o Flexbox, você precisa colocar seu container em um flex container. Isto é tão fácil quanto:

#container {
display: flex;
}

Não mudou muito — suas divs são exibidas inline agora, não precisamos dizer mais nada. Mas nos bastidores, você fez algo poderoso. Você deu à seus quadrados algo chamado de flex context.

Agora você pode começar à posicioná-los nesse contexto, com muito menos dificuldade do que com CSS tradicional.

2ª propriedade: Flex Direction

Um Flexbox container tem dois eixos: um eixo principal e um eixo transversal, que por padrão se parece assim:

Por padrão, os itens são dispostos ao longo do eixo principal, da esquerda para a direita. Essa é a razão pela qual seus quadrados são por padrão colocados em uma linha horizontal quando você aplicadisplay: flex.

Flex-direction, no entanto, te faz rotacionar o eixo principal.

#container {
display: flex;
flex-direction: column;
}

Há uma importante distinção a fazer aqui: flex-direction: column não alinha os quadrados no eixo transversal em vez do eixo eixo principal. Faz o próprio eixo principal ir de horizontal para vertical.

Há um par de outras opções para flex-direction, bem como: row-reverse e column-reverse.

3ª propriedade: Justify Content

Justify-content controla como você alinha itens no eixo principal.

Aqui você vai mergulhar um pouco mais na distinção do eixo principal/transversal. Primeiro, vamos voltar para flex-direction: row.

#container {
display: flex;
flex-direction: row;
justify-content: flex-start;
}

Você tem cinco comandos à sua disposição para usar justify-content:

  1. Flex-start
  2. Flex-end
  3. Center
  4. Space-between
  5. Space-around

Space-around e space-between são os menos intuitivos. Space-between dá espaço igual entre cada quadrado, mas não entre os quadrados e o container.

Space-around coloca um espaço igual em cada lado do quadrado — o que significa que o espaço entre os quadrados extremos e o container é metade do espaço entre dois quadrados (cada quadrado contribuindo com uma quantidade igual de margem não-sobreposta, desta forma, dobrando o espaço).

Uma nota final: lembre-se que justify-content funciona ao longo do eixo principal, e flex-direction muda o eixo principal. Isso será importante quando você passar para a…

4ª propriedade: Align Items

Se você ‘sacou’ o justify-content, align-items será moleza.

Como o justify-content funciona ao longo do eixo principal, align-items se aplica ao eixo transversal.

Vamos resetar nosso flex-direction para row, assim nossos eixos vão se parecer exatamente como a imagem acima.

Então, vamos mergulhar nos comandos do align-items.

  1. flex-start
  2. flex-end
  3. center
  4. stretch
  5. baseline

Os três primeiros são exatamente o mesmo que justify-content, então nada de firulas aqui.

No entanto, os dois próximos são um pouco diferentes.

Você tem o stretch, em que os itens ocupam todo o eixo cruzado, e o baseline, no qual as partes inferiores das tags de parágrafo estão alinhadas.

(Note que para o align-items: stretch, Eu tive que definir a altura dos quadrados para auto. Do contrário, a propriedade height iria substituir o stretch.)

Para o baseline, esteja ciente de que se você tirar as tags de parágrafo, em vez disso ele alinha a parte inferior dos quadrados, dessa forma:

Para demonstrar melhor os eixos principal e transversal, vamos combinar o justify-content e o align-items e ver como a centralização funciona diferente para os dos comandos do flex-direction:

Com o row, os quadrados são colocados ao longo de um eixo principal horizontal. Com o column, eles caem ao longo de um eixo principal vertical.

Mesmo se os quadrados estiverem centralizados ambos verticalmente e horizontalmente em ambos os casos, os dois não são permutáveis!

5ª propriedade: Align Self

Align-self permite manipular manualmente o alinhamento de um elemento em particular.

É basicamente substituir o align-items para um quadrado. Todas as propriedades são as mesmas, embora é colocado auto como padrão, em que segue o align-items do container.

#container {
align-items: flex-start;
}
.square#one {
align-self: center;
}
// Apenas esse quadrado será centralizado.

Vamos ver como isso funciona. Você irá aplicar o align-self a dois quadrados, e para o restante, aplique align-items: center e flex-direction: row.

Conclusão

Mesmo sendo só uma passada por cima do Flexbox, esses comandos devem ser o suficiente para você lidar com a maioria dos alinhamentos básicos — e para alinhar verticalmente o conteúdo do seu coração.

Obrigado por ler!

Suporte: caniuse.com/#feat=flexbox

--

--

Lucas J S

Front-end | Digital Design @anhembimorumbi | Speaker