Tailwind CSS Academy · Aula

Expansão, redução e base do Flex

Controle como os filhos flexíveis se expandem ou se contraem usando flex-1, flex-none, grow, shrink e os utilitários basis-*.

Aula 3 de 413 etapas

Expansão, redução e base do Flex é uma aula grátis de Tailwind CSS Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Tailwind CSS Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Tailwind CSS Academy inclui 4 aulas no total.

Como os elementos filhos flex definem seu tamanho

Por padrão, os elementos filhos flex têm seu tamanho definido de acordo com o conteúdo. Porém, o Flexbox oferece três propriedades que permitem controlar com precisão como os elementos filhos preenchem o espaço disponível: flex-grow controla quanto espaço adicional um elemento filho ocupa, flex-shrink controla quanto ele é comprimido quando o espaço é limitado e flex-basis define o tamanho inicial antes do crescimento ou da redução. O Tailwind disponibiliza as três por meio de classes utilitárias concisas.

flex-1: a abreviação completa

flex-1 é a utilidade de dimensionamento flex mais usada. Ela aplica flex: 1 1 0% — cresce para preencher o espaço disponível, encolhe quando necessário e começa com uma base zero. Na prática, flex-1 faz com que cada item ocupe uma parcela igual do espaço restante do contêiner. Dois elementos irmãos com flex-1 ocupam 50% cada; três ocupam 33% cada.

<!-- Two equal-width columns -->
<div class="flex gap-4">
  <div class="flex-1 bg-blue-100 p-4 rounded">Left (50%)</div>
  <div class="flex-1 bg-green-100 p-4 rounded">Right (50%)</div>
</div>

<!-- Three equal-width columns -->
<div class="flex gap-4 mt-4">
  <div class="flex-1 bg-indigo-100 p-4 rounded">A (33%)</div>
  <div class="flex-1 bg-indigo-200 p-4 rounded">B (33%)</div>
  <div class="flex-1 bg-indigo-300 p-4 rounded">C (33%)</div>
</div>

flex-auto: crescimento baseado no conteúdo

flex-auto aplica flex: 1 1 auto — o elemento cresce e encolhe, mas começa com o tamanho natural do conteúdo. Ao contrário de flex-1, que começa em zero, flex-auto preserva a diferença de tamanho entre os itens antes de distribuir proporcionalmente o espaço adicional. Use-o quando quiser uma distribuição baseada no conteúdo em vez de divisões iguais.

<!-- flex-auto: longer text gets more space -->
<div class="flex gap-2">
  <div class="flex-auto bg-blue-100 p-4 rounded">Short</div>
  <div class="flex-auto bg-green-100 p-4 rounded">Longer text content item</div>
</div>

<!-- flex-1: equal splits regardless of content -->
<div class="flex gap-2 mt-2">
  <div class="flex-1 bg-blue-100 p-4 rounded">Short</div>
  <div class="flex-1 bg-green-100 p-4 rounded">Longer text content item</div>
</div>

flex-initial: comportamento padrão do navegador

flex-initial aplica flex: 0 1 auto — o comportamento padrão do navegador. Os itens não crescem além do tamanho do conteúdo (grow: 0), mas encolhem quando o espaço é limitado (shrink: 1). Isso é usado para declarar explicitamente o padrão em um contexto no qual os itens irmãos usam flex-1, mantendo o item inicial dimensionado de acordo com seu conteúdo enquanto os irmãos ocupam o espaço restante.

<!-- Sidebar fixed to content, main area takes remaining space -->
<div class="flex gap-4">
  <aside class="flex-initial w-48 bg-gray-100 p-4 rounded">
    Fixed sidebar
  </aside>
  <main class="flex-1 bg-white p-4 rounded shadow">
    Main content takes all remaining width
  </main>
</div>

flex-none: impede todas as alterações de tamanho

flex-none aplica flex: none — o item não cresce para preencher espaço adicional nem encolhe quando o espaço é limitado. Ele permanece sempre exatamente com o tamanho natural do conteúdo. Use flex-none para ícones, avatares, selos e elementos com largura fixa que devem manter seu tamanho independentemente do espaço disponível no contêiner flex.

<!-- Avatar should stay fixed size, text can shrink/grow -->
<div class="flex items-center gap-3">
  <img src="avatar.jpg" class="flex-none w-12 h-12 rounded-full" alt="" />
  <div class="flex-1 min-w-0">
    <p class="font-medium text-gray-900 truncate">User name that might be very long</p>
    <p class="text-sm text-gray-500 truncate">user@example.com</p>
  </div>
  <span class="flex-none bg-green-100 text-green-700 text-xs px-2 py-1 rounded">Active</span>
</div>

Utilidades grow e shrink

Para um controle mais detalhado, o Tailwind oferece as utilidades separadas grow, grow-0, shrink e shrink-0. grow permite que o item cresça (flex-grow: 1). grow-0 impede o crescimento. shrink permite a redução (flex-shrink: 1). shrink-0 impede a redução — é útil para evitar que imagens e ícones sejam comprimidos quando o contêiner é estreito demais.

<!-- Logo should not shrink on small screens -->
<nav class="flex items-center gap-4">
  <img src="logo.svg" class="shrink-0 h-8 w-auto" alt="Logo" />
  <!-- Nav links can shrink -->
  <div class="flex gap-4 min-w-0">
    <a href="#" class="truncate text-sm">Products</a>
    <a href="#" class="truncate text-sm">Pricing</a>
  </div>
</nav>

basis-*: definindo o tamanho inicial

basis-* define o tamanho inicial de um item flex antes do crescimento ou da redução. Ele corresponde a CSS flex-basis. Você pode usar valores de espaçamento do Tailwind (basis-4 = 16px), valores percentuais (basis-1/2 = 50%) ou valores de palavra-chave (basis-full = 100%). Definir basis-1/3 em três elementos irmãos com grow cria uma estrutura de três colunas que começa com terços iguais e preenche o espaço disponível.

<!-- Three columns with basis -->
<div class="flex gap-4">
  <div class="basis-1/3 grow bg-blue-100 p-4 rounded">A (starts at 33%)</div>
  <div class="basis-1/3 grow bg-green-100 p-4 rounded">B (starts at 33%)</div>
  <div class="basis-1/3 grow bg-red-100 p-4 rounded">C (starts at 33%)</div>
</div>

basis-0 versus basis-auto

basis-0 e basis-auto produzem resultados sutilmente diferentes quando combinados com grow. Com basis-0, todos os itens começam com largura zero e crescem puramente com base nas proporções de flex-grow, resultando em uma distribuição igual do espaço. Com basis-auto, os itens ocupam primeiro a largura do conteúdo e, depois, o espaço adicional é distribuído, resultando em uma distribuição proporcional ao conteúdo.

/* flex-1 = flex: 1 1 0%   → basis-0 + grow + shrink */
/* flex-auto = flex: 1 1 auto → basis-auto + grow + shrink */

<!-- These produce different column widths when content differs:
     flex-1: equal columns
     flex-auto: content-proportional columns -->

Prática: conteúdo principal + barra lateral fixa

Uma estrutura clássica de dois painéis usa flex-none w-64 na barra lateral (largura fixa de 256px) e flex-1 na área de conteúdo principal (ocupa todo o restante). Isso cria uma barra lateral que nunca cresce nem encolhe, combinada com uma área de conteúdo que preenche 100% do espaço restante. Essa é a base das estruturas de painéis e interfaces administrativas.

<div class="flex h-screen">
  <aside class="flex-none w-64 bg-gray-900 text-white p-4">
    <h2 class="font-bold text-lg mb-4">Sidebar</h2>
    <nav class="space-y-1">
      <a href="#" class="block px-3 py-2 rounded hover:bg-gray-700 text-sm">Dashboard</a>
    </nav>
  </aside>
  <main class="flex-1 overflow-auto bg-gray-50 p-8">
    <h1 class="text-2xl font-bold text-gray-900">Dashboard</h1>
  </main>
</div>

Prática: cartões em grade responsiva com flex-1

Combinar flex flex-wrap com flex-1 e uma restrição min-w-* cria uma grade responsiva que ajusta automaticamente o número de colunas de acordo com a largura disponível. Cada cartão ocupa pelo menos a largura min-w-64 e se expande para preencher a linha com flex-1. Quando um cartão não cabe, ele passa para a linha seguinte — sem necessidade de gerenciar pontos de quebra explicitamente.

<!-- Auto-responsive card grid -->
<div class="flex flex-wrap gap-4">
  <div class="flex-1 min-w-64 bg-white rounded-xl shadow p-6">
    <h3 class="font-bold">Card A</h3>
  </div>
  <div class="flex-1 min-w-64 bg-white rounded-xl shadow p-6">
    <h3 class="font-bold">Card B</h3>
  </div>
  <div class="flex-1 min-w-64 bg-white rounded-xl shadow p-6">
    <h3 class="font-bold">Card C</h3>
  </div>
</div>

Ordem: reorganizando visualmente

As utilidades order-* do Tailwind alteram a ordem visual de exibição dos itens flex sem mudar a ordem deles no DOM. order-first move um item para o início, order-last move-o para o fim e order-1 até order-12 oferecem um controle detalhado. Isso é útil para reorganização responsiva: uma barra lateral que aparece depois do conteúdo em dispositivos móveis pode ser movida visualmente para antes dele em telas grandes com md:order-first.

<!-- Mobile: image below text. Desktop: image on the right -->
<div class="flex flex-col md:flex-row gap-8">
  <div class="md:order-last flex-1">
    <img src="product.jpg" class="w-full rounded-xl" alt="" />
  </div>
  <div class="flex-1">
    <h2 class="text-2xl font-bold">Product Headline</h2>
    <p class="text-gray-500 mt-2">Description text here.</p>
  </div>
</div>

Verificação rápida

Teste sua compreensão dos conceitos de Tailwind CSS Mastery apresentados nesta lição.

Resumo da lição

Nesta lição, você aprendeu: flex-1 faz com que os elementos filhos ocupem parcelas iguais do espaço disponível, flex-none impede que um item cresça ou encolha, mantendo-o em seu tamanho natural e grow, shrink e basis-* oferecem controle detalhado sobre cada dimensão separadamente. A seguir, você aprenderá a lidar com o excesso de conteúdo usando flex-wrap e a criar espaçamentos consistentes entre os itens flex.

Grátis para começar

Aprenda HTML com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
30
Aulas
120

Perguntas Frequentes

A aula “Expansão, redução e base do Flex” é grátis?

Sim — o texto completo de “Expansão, redução e base do Flex” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Tailwind CSS Academy, atualize para CoddyKit PRO. O curso de Tailwind CSS Academy inclui 4 aulas no total.

O que vou aprender em “Expansão, redução e base do Flex”?

Controle como os filhos flexíveis se expandem ou se contraem usando flex-1, flex-none, grow, shrink e os utilitários basis-*. Você pratica Tailwind CSS Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Tailwind CSS Academy?

Nenhuma experiência prévia é necessária. Tailwind CSS Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Expansão, redução e base do Flex”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Tailwind CSS Academy?

Sim. Cada aula de Tailwind CSS Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Ativação e direção do Flex
  2. Justificação do conteúdo e alinhamento dos itens
  3. Expansão, redução e base do Flex
  4. Quebra de linha e intervalo
← Voltar para Tailwind CSS Academy