CSS Flexbox: seu Guia Completo

Referências, Elementos e Exemplos

Sobre o Flexbox

O módulo Flexbox (ou Flexible Box), que é uma recomendação candidata do W3C desde outubro de 2017, veio para facilitar a vida na hora de organizar, alinhar e distribuir o espaço entre os itens de um container, mesmo quando o tamanho deles é incerto ou dinâmico (daí o nome "flexível").

A ideia por trás do layout flexível é permitir que o container modifique a largura, altura e ordem dos itens para otimizar o espaço disponível (principalmente para adaptar a qualquer tipo de dispositivo e tamanho de tela). Um container flexível pode expandir os itens para preencher o espaço livre ou encolhê-los para evitar que saiam do limite.

O mais legal é que o layout flexível não é amarrado a nenhuma direção, diferente dos layouts tradicionais (o block, que é vertical, e o inline, que é horizontal). Embora esses funcionem bem para páginas, eles não são tão "flexíveis" (esse trocadilho não poderia faltar!) para acomodar aplicações maiores ou mais complexas (especialmente quando falamos de mudanças de orientação, redimensionamento, estiramento, encolhimento etc.).

Importante: O layout flexível é mais adequado para componentes de aplicativos e layouts menores, enquanto o Grid é mais indicado para layouts em maior escala.

Base e Terminologia

Como o flexbox é um módulo inteiro e não apenas uma propriedade, ele inclui um monte de coisas, como um conjunto completo de propriedades. Algumas dessas propriedades são para o container (o elemento pai, chamado de "flex-container"), enquanto outras são para os filhos (conhecidos como "flex-items").

Se o layout "tradicional" se baseia em direções de fluxo em bloco e inline, o layout flexível se baseia em "direções de fluxo flexíveis". A imagem abaixo mostra e explica a ideia central do layout flexível.

Os itens vão ser organizados seguindo ou o eixo principal (de main-start a main-end) ou o eixo cruzado (de cross-start a cross-end).

Propriedades do Flexbox

Propriedades dos Elementos Pai (flex-containers)

display

Isso define um container flex; pode ser inline ou block dependendo do valor dado. Ele ativa um contexto flex para todos os filhos diretos.

.flex-container{
    display: flex;
    /* ou inline-flex */
}

flex-direction

Isso define o eixo principal, estabelecendo a direção em que os itens flexíveis são posicionados no container flex. O Flexbox é, (além do encapsulamento opcional), um conceito de layout em uma única direção. Pense nos itens flex como sendo organizados principalmente em linhas horizontais ou colunas verticais.