Introdução ao flexbox

Contêineres e Itens Flexbox

Flexbox ou caixa flexível é um método de layout para organizar o conteúdo em uma página de maneira previsível. O Flexbox fornece uma melhoria em relação ao posicionamento do modelo de bloco tradicional usando floats ou até mesmo posicionamento de tabela para conteúdo na página.

Em sua essência, o Flexbox pode ser dividido em um elemento pai (contêiner flexível) e um elemento filho (item flexível).

Contêiner Flexível

Um contêiner flex pode ser criado definindo sua propriedade display como flex:

.container {
  display: flex;
}

Artigo flexível

Cada elemento filho de um contêiner flexível se torna um item flexível. Esses itens flexíveis podem então receber propriedades adicionais para modificar como estão posicionados na página.

.item {
  flex: 1;
}

Esta propriedade flex: 1 é uma abreviação de flex-grow: 1, permitindo que ela cresça em relação a seus irmãos dentro do contêiner.

Juntando isso, esta é a marcação HTML:

<div class="container">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

Introdução ao Flexbox

O layout Flexbox (caixa flexível), introduzido no CSS3, fornece uma maneira mais eficiente de dispor, alinhar e distribuir espaço entre elementos filhos (flex items) dentro de um elemento container (flex container). Mais importante, mesmo quando seus tamanhos são desconhecidos ou dinâmicos e, portanto, o termo “flex” ou “flexível”.

Vamos começar com o básico e ver como um container pode ser inicializado como flex.

Considere a seguinte marcação:

<div class="flex-container">
  <div class="flex-item-1"></div>
  <div class="flex-item-2"></div>
  <div class="flex-item-3"></div>
</div>

Um flexbox é inicializado simplesmente usando display: flex. Feito!

.flex-container {
  height: 100px;
  padding: 10px;
  background: grey;

  display: flex; // or display: inline-flex;
}

Agora que o contêiner flexível está pronto, vamos brincar com seus itens flexíveis, dando a eles uma largura de, digamos, 25% cada e centralizando horizontalmente os itens flexíveis dentro de seu contêiner pai.

.flex-item-1 {
  width: 25%;
  background: green;
}

.flex-item-2 {
  width: 25%;
  background: purple;
}

.flex-item-3 {
  width: 25%;
  background: pink;
}

Por favor, note que eu propositadamente dei às 3 crianças uma largura de 25% cada para mostrar como é fácil mover as crianças dentro de um flexbox.

Agora, quando executarmos o código acima, devemos ver os 3 filhos dentro do contêiner horizontalmente um ao lado do outro. Isso ocorre porque, por padrão, um flexbox tem a propriedade flex-direction: row. Ou seja, por padrão, os itens flexíveis serão alinhados horizontalmente um ao lado do outro. Também deve haver uma lacuna à direita, pois a largura total das crianças não soma 100%.

Agora tente adicionar a propriedade justify-content: center ao flex-container.

.flex-container {
  ...
  justify-content: center;
}

O resultado seria as crianças sendo alinhadas horizontalmente ao centro. A mesma propriedade tem outros valores como flex-end(alinhar à direita), space-around(espaço igual ao redor dos itens), space-between(espaço igual entre os itens).

Importante: Outras propriedades de elemento de bloco como text-align: center etc. não têm efeito em um elemento flex.

Instalação ou configuração

Flexbox é um módulo CSS3, padronizado pelo World Wide Web Consortium. É um modo de layout para organização de elementos de forma que os elementos se comportem de forma previsível quando o layout da página deve acomodar diferentes tamanhos de exibição.

Por fazer parte do CSS3, você não precisa instalar nada. Ele pode ser usado desde que o navegador o suporte, e a maioria dos navegadores modernos o faz. Para verificar se o seu navegador suporta ou não, aqui está o tabela de compatibilidade.

Para configurar e usar flexbox em seu CSS, basta adicionar display: flex a um seletor.