Flex
Domine o Flexbox no Tailwind CSS! Crie layouts responsivos com facilidade. Aprenda a usar classes para direção, alinhamento, crescimento e quebra de linha.
O Flexbox é um dos pilares fundamentais do design de interfaces modernas na web. No Tailwind CSS, o suporte a esse modelo de layout é implementado por meio de classes utilitárias atômicas que mapeiam diretamente as propriedades nativas do CSS. Isso permite que você controle o alinhamento, o direcionamento, a distribuição e o fluxo dos elementos diretamente na estrutura do HTML.
Na arquitetura atual do framework, baseada no modelo CSS-first, o motor de compilação em Rust processa esses utilitários de forma instantânea. Combinando o Flexbox aos modificadores responsivos e às propriedades de espaçamento dinâmico (gap), você constrói componentes complexos e adaptáveis de maneira limpa, mantendo a performance de renderização no nível máximo.
Ativando o Contexto Flex
Para iniciar um contexto de layout Flexbox, adicione a classe flex ao elemento contêiner (o elemento pai). Automaticamente, todos os elementos filhos diretos passam a se comportar como flex items, posicionando-se inicialmente lado a lado (em linha) e com comportamento flexível.
HTML
<div class="flex">
<div class="bg-indigo-100 p-4 rounded-xl">Item 1</div>
<div class="bg-indigo-200 p-4 rounded-xl">Item 2</div>
</div>
Gerenciamento de Direção (Eixo Principal)
A direção determina o alinhamento do eixo principal do contêiner. O Tailwind permite alternar a orientação de forma intuitiva, o que é essencial para construir layouts adaptáveis entre dispositivos móveis e telas desktop.
-
flex-row(Padrão): Organiza os elementos horizontalmente (da esquerda para a direita). -
flex-col: Empilha os elementos verticalmente (de cima para baixo). -
flex-row-reverse/flex-col-reverse: Inverte a ordem de exibição dos elementos na tela sem alterar a estrutura do HTML.
HTML
<div class="flex flex-row gap-4">
<div class="bg-slate-100 p-4 rounded-xl font-medium">Elemento A</div>
<div class="bg-slate-200 p-4 rounded-xl font-medium">Elemento B</div>
</div>
<div class="flex flex-col gap-3">
<div class="bg-slate-100 p-4 rounded-xl font-medium">Elemento A</div>
<div class="bg-slate-200 p-4 rounded-xl font-medium">Elemento B</div>
</div>
Alinhamento e Distribuição Bidimensional
O alinhamento no Flexbox é dividido entre o eixo principal (definido pela direção) e o eixo cruzado (perpendicular ao eixo principal).
Alinhamento no Eixo Principal (justify-*)
Mapeia a propriedade justify-content. Controla como o espaço extra do contêiner é distribuído entre ou ao redor dos itens:
-
justify-start: Agrupa os itens no início do contêiner. -
justify-center: Centraliza os itens horizontalmente (se forflex-row). -
justify-end: Agrupa os itens no final do contêiner. -
justify-between: Distribui os itens uniformemente; o primeiro fica no início e o último no final. -
justify-around: Distribui os itens uniformemente com espaços iguais ao redor deles. -
justify-evenly: Distribui os itens de forma que o espaço entre dois itens quaisquer (e o espaço até as bordas) seja idêntico.
HTML
<div class="flex justify-between items-center border border-slate-100 p-4 rounded-2xl bg-white shadow-sm">
<span class="text-sm font-semibold text-slate-700">Painel Esquerdo</span>
<span class="text-sm font-semibold text-indigo-600">Ação Central</span>
<span class="text-sm font-semibold text-slate-700">Painel Direito</span>
</div>
Alinhamento no Eixo Cruzado (items-*)
Mapeia a propriedade align-items. Controla o alinhamento vertical dos elementos quando estão dispostos em linha (flex-row):
-
items-stretch(Padrão): Estica os itens para preencherem toda a altura do contêiner. -
items-start: Alinha os itens pelo topo do contêiner. -
items-center: Centraliza verticalmente os itens, uma das soluções mais comuns para alinhar textos e ícones. -
items-end: Alinha os itens pela base do contêiner. -
items-baseline: Alinha os itens com base na linha de leitura dos seus textos internos.
HTML
<div class="flex items-center h-24 bg-slate-50 border border-slate-100 rounded-2xl p-4">
<div class="bg-emerald-500 text-white p-3 rounded-xl text-xs font-bold">
Item perfeitamente centralizado na vertical
</div>
</div>
Controle de Dimensionamento e Flexibilidade (flex-*)
Para definir como um item individual deve se comportar em relação ao espaço disponível no contêiner, o Tailwind oferece utilitários específicos aplicados diretamente no elemento filho:
-
flex-1: Mapeiaflex: 1 1 0%. Permite que o item cresça e encolha conforme necessário, ignorando o tamanho inicial do conteúdo para garantir que todos os elementos dividam o espaço disponível igualmente. -
flex-auto: Mapeiaflex: 1 1 auto. O item cresce e encolha, mas leva em consideração o tamanho original do seu conteúdo interno. -
flex-none: Mapeiaflex: none. Impede que o item cresça ou encolha, mantendo dimensões fixas independentemente do tamanho do contêiner (ideal para barras laterais ou ícones fixos).
HTML
<div class="flex gap-4 items-center w-full">
<div class="flex-1 bg-slate-900 text-white p-4 rounded-xl">
Área de Conteúdo Principal Expandida
</div>
<div class="flex-none w-32 bg-indigo-50 border border-indigo-100 text-indigo-700 p-4 text-center rounded-xl font-bold">
Painel Fixo
</div>
</div>
Fluxo e Quebra de Linha (flex-wrap)
Por padrão, os itens flexíveis tentam se ajustar em uma única linha, o que pode esmagar o conteúdo ou gerar barras de rolagem indesejadas em telas menores. Para permitir que os elementos fluam naturalmente para as próximas linhas, utiliza-se a propriedade de quebra:
-
flex-nowrap(Padrão): Mantém todos os itens em uma única linha. -
flex-wrap: Permite a quebra dos elementos para novas linhas sempre que o espaço horizontal se esgotar.
HTML
<div class="flex flex-wrap gap-2 max-w-xs p-4 bg-white border border-slate-100 rounded-2xl shadow-sm">
<span class="bg-slate-100 text-slate-700 text-xs font-semibold px-3 py-1.5 rounded-lg">Cloud</span>
<span class="bg-slate-100 text-slate-700 text-xs font-semibold px-3 py-1.5 rounded-lg">Architecture</span>
<span class="bg-slate-100 text-slate-700 text-xs font-semibold px-3 py-1.5 rounded-lg">Tailwind</span>
<span class="bg-slate-100 text-slate-700 text-xs font-semibold px-3 py-1.5 rounded-lg">Engineering</span>
</div>
Aplicação Avançada com Responsividade
Uma das maiores vantagens da abordagem utility-first é a capacidade de alterar completamente o comportamento do layout combinando prefixos de pontos de quebra (breakpoints). Veja um exemplo comum de uma seção de recursos adaptável:
HTML
<div class="flex flex-col md:flex-row gap-6 w-full max-w-4xl mx-auto p-4">
<div class="flex-1 bg-white border border-slate-100 p-6 rounded-2xl shadow-xl shadow-slate-100/50 space-y-2">
<h3 class="font-bold text-lg text-slate-900">Módulo de Monitoramento</h3>
<p class="text-sm text-slate-500 leading-relaxed">Análise de tráfego de dados estruturada em tempo real.</p>
</div>
<div class="flex-1 bg-white border border-slate-100 p-6 rounded-2xl shadow-xl shadow-slate-100/50 space-y-2">
<h3 class="font-bold text-lg text-slate-900">Segurança de Borda</h3>
<p class="text-sm text-slate-500 leading-relaxed">Isolamento de credenciais e proteção contra injeções de scripts.</p>
</div>
</div>
Análise de comportamento estrutural:
-
Em dispositivos móveis (Mobile-First): O contêiner aplica
flex-col, empilhando os dois cartões verticalmente com um espaçamento controlado porgap-6. -
A partir de telas médias (
md:- 768px): O modificadormd:flex-rowassume o controle, organizando os cartões lado a lado na horizontal. A propriedadeflex-1garante que ambos os blocos ocupem exatamente a mesma largura na tela expandida.
A utilização do Flexbox de forma nativa e integrada elimina folhas de estilo extensas e confere previsibilidade absoluta ao fluxo de desenvolvimento, fornecendo as ferramentas ideais para construir desde pequenos agrupamentos de botões até sistemas completos de dashboards corporativos.