O Modelo de Layout Flexbox do CSS
O CSS Flexible Box Layout, vulgarmente conhecido como Flexbox, é um modelo de design unidimensional concebido para distribuir o espaço entre itens num contentor e alinhar esses mesmos elementos de forma previsível. Ao contrário dos métodos tradicionais de posicionamento, o Flexbox destaca-se pela sua capacidade de alterar a largura, a altura e a ordem dos seus itens para preencher melhor o espaço disponível, adaptando-se a diferentes tamanhos de ecrã.
Este modelo é estruturado em torno de dois eixos: o eixo principal (main axis) e o eixo transversal (cross axis). O comportamento destes eixos depende diretamente da direção definida para o contentor. Compreender esta relação é fundamental para dominar o alinhamento e a distribuição de elementos em interfaces web modernas.
Propriedades do Contentor Flex
O contentor flex (flex container) é o elemento pai que ativa o contexto de layout para os seus filhos diretos. O Gerador de Flexbox permite configurar visualmente as seguintes propriedades estruturais do contentor:
- Direção: Define o eixo principal do layout. As opções incluem
Linha(os itens alinham-se horizontalmente),Linha inversa(horizontalmente, mas em sentido inverso),Coluna(os itens alinham-se verticalmente) eColuna inversa(verticalmente, de baixo para cima). - Quebra de linha (Wrap): Controla se os itens são forçados a manter-se numa única linha ou se podem passar para linhas seguintes. Disponibiliza as opções
Sem quebra(todos os itens na mesma linha),Quebrar linha(os itens que não cabem passam para a linha seguinte) eQuebra inversa(os itens que não cabem passam para a linha anterior). - Alinhamento principal (Justify content): Define como o espaço livre é distribuído ao longo do eixo principal. Pode ser configurado para
Início,Fim,Centralizar,Espaço entre (Space between),Espaço ao redor (Space around)ouEspaço igual (Space evenly). - Alinhar itens (Align items): Determina o alinhamento dos itens ao longo do eixo transversal na linha atual. As opções são
Início,Fim,Centralizar,Esticar (Stretch)(os itens esticam para preencher o contentor) eLinha de base (Baseline)(os itens alinham-se pelas suas linhas de base de texto). - Alinhar conteúdo (Align content): Atua apenas quando existe mais do que uma linha no contentor (com a quebra de linha ativa). Alinha as próprias linhas ao longo do eixo transversal, suportando
Início,Fim,Centralizar,Esticar (Stretch),Espaço entre (Space between),Espaço ao redor (Space around)eEspaço igual (Space evenly). - Espaçamento (Gap): Define um valor numérico que estabelece a distância direta entre os itens e entre as linhas geradas, sem a necessidade de recorrer a margens externas nos elementos individuais.
Propriedades dos Itens Flex
Cada elemento filho direto de um contentor flex torna-se um item flex. O comportamento individual de cada item pode ser ajustado de forma independente através das seguintes propriedades:
- Ordem (Order): Um valor numérico que altera a sequência visual em que os itens aparecem, sem modificar a estrutura do código HTML.
- Crescimento (Grow): Um valor numérico que dita a capacidade de um item crescer para ocupar o espaço disponível no contentor.
- Encolhimento (Shrink): Um valor numérico que define a capacidade de um item encolher quando o espaço do contentor é insuficiente.
- Base (Basis): Define o tamanho inicial de um item antes da distribuição do espaço restante. Pode ser um valor numérico específico ou
Automático. - Alinhar-se (Align self): Permite que um item individual ignore o alinhamento geral definido em
Alinhar itens (Align items)e adote o seu próprio alinhamento no eixo transversal, utilizando as opçõesAutomático,Início,Fim,Centralizar,Esticar (Stretch)ouLinha de base (Baseline).
Funcionamento do Gerador de Flexbox
O Gerador de Flexbox funciona como um ambiente visual de testes em tempo real. À medida que manipula os controlos do painel lateral, as alterações são aplicadas instantaneamente na área de pré-visualização.
Ao clicar no botão Adicionar item, um novo elemento (por exemplo, "Item 5") é inserido no contentor. Se desejar remover o último elemento, pode utilizar a opção Remover item.
O código CSS correspondente ao contentor e aos itens é gerado de forma dinâmica na secção CSS. Uma regra importante do gerador é que apenas os itens que sofreram alterações nas suas propriedades individuais terão regras CSS próprias geradas no código final. Quando o layout estiver concluído, basta clicar em Copiar CSS para transferir o código para a área de transferência, alterando temporariamente o estado do botão para indicar que foi copiado.
Toda a criação do layout ocorre localmente. O processamento é feito diretamente no seu navegador web e nenhuma das definições ou dados introduzidos na ferramenta é carregado para servidores externos.
Padrões Comuns de Layout
O Flexbox simplifica a criação de várias estruturas de design recorrentes na web:
- Centralizado: Alinha perfeitamente um elemento no centro vertical e horizontal do contentor, combinando
CentralizaremAlinhamento principal (Justify content)eAlinhar itens (Align items). - Barra de navegação: Distribui os links de navegação horizontalmente com espaçamento uniforme, utilizando frequentemente a direção
Linhae o alinhamentoEspaço entre (Space between). - Pilha: Organiza elementos verticalmente numa coluna uniforme através da direção
Coluna. - Cartões: Cria uma grelha flexível de cartões que se ajustam ao ecrã, combinando a quebra de linha ativa com valores de crescimento nos itens para que preencham as linhas de forma proporcional.
- Barra lateral: Posiciona uma barra de conteúdo lateral fixa ao lado de uma área de conteúdo principal que se expande para ocupar o espaço restante.
Perguntas Frequentes
Qual é a diferença entre justify-content and align-items?
Justify-content distribui os itens ao longo do eixo principal — a direção em que a linha ou coluna flui —, enquanto align-items os posiciona ao longo do eixo transversal. Mude a direção de linha (row) para coluna (column) e os dois eixos invertem-se, fazendo com que o justify-content passe a funcionar de cima para baixo e o align-items da esquerda para a direita.
Como funcionam os controlos individuais por item?
Selecione um item pelo seu número e defina o quanto ele cresce para preencher o espaço restante (grow), o quanto encolhe quando o espaço está apertado (shrink), o seu tamanho inicial (basis) e o seu próprio alinhamento no eixo transversal. A propriedade order move um item para antes ou depois no ecrã sem alterar o HTML. Apenas os itens que realmente modificar receberão uma regra própria no CSS.
Quando as propriedades wrap e align-content fazem diferença?
Com a quebra (wrap) desativada, todos os itens são forçados a ficar numa única linha e podem ser espremidos. Ao ativá-la, os itens que já não couberem passam para a linha seguinte — é aí que o align-content entra em ação, distribuindo as linhas como um grupo. A propriedade gap define o espaço entre os itens e entre as linhas, sem a necessidade de margens.