Tailwind CSS Academy · Lekcja

Rozrastanie, kurczenie i baza flex

Kontrolować rozszerzanie i kurczenie elementów flex za pomocą narzędzi flex-1, flex-none, grow, shrink i basis-*.

Lekcja 3 z 413 kroki

Rozrastanie, kurczenie i baza flex to bezpłatna lekcja Tailwind CSS Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Tailwind CSS Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Tailwind CSS Academy zawiera 4 lekcji w sumie.

Jak elementy potomne flex ustalają swój rozmiar

Domyślnie rozmiar elementów potomnych flex jest dopasowywany do ich zawartości. Flexbox udostępnia jednak trzy właściwości, które zapewniają precyzyjną kontrolę nad tym, jak elementy potomne wypełniają dostępną przestrzeń: flex-grow określa, ile dodatkowego miejsca zajmuje element, flex-shrink określa, jak bardzo element kurczy się, gdy brakuje miejsca, a flex-basis ustawia rozmiar początkowy przed powiększaniem lub pomniejszaniem. Tailwind udostępnia wszystkie trzy właściwości za pomocą zwięzłych klas narzędziowych.

flex-1: skrót obejmujący wszystko

flex-1 to najczęściej używane narzędzie do określania rozmiaru elementów flex. Stosuje ono flex: 1 1 0% — element rośnie, aby wypełnić dostępną przestrzeń, kurczy się w razie potrzeby i zaczyna od zerowej wartości bazowej. W praktyce flex-1 sprawia, że każdy element zajmuje równą część pozostałej przestrzeni kontenera. Dwa elementy rodzeństwa z flex-1 zajmują po 50%, a trzy — po 33%.

<!-- 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: wzrost uwzględniający zawartość

flex-auto stosuje flex: 1 1 auto — element rośnie i kurczy się, ale zaczyna od swojego naturalnego rozmiaru wynikającego z zawartości. W przeciwieństwie do flex-1, które zaczyna od zera, flex-auto zachowuje różnice rozmiarów między elementami przed proporcjonalnym rozdzieleniem dodatkowej przestrzeni. Należy go używać, gdy potrzebny jest podział uwzględniający zawartość zamiast równych części.

<!-- 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: domyślne zachowanie przeglądarki

flex-initial stosuje flex: 0 1 auto — ustawienie domyślne przeglądarki. Elementy nie powiększają się poza rozmiar swojej zawartości (grow: 0), ale kurczą się, gdy brakuje miejsca (shrink: 1). Używa się tego narzędzia, aby jawnie określić ustawienie domyślne w sytuacji, gdy elementy rodzeństwa korzystają z flex-1. Dzięki temu pierwszy element zachowuje rozmiar dopasowany do zawartości, a elementy rodzeństwa zajmują pozostałą przestrzeń.

<!-- 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: zapobieganie wszystkim zmianom rozmiaru

flex-none stosuje flex: none — element ani nie powiększa się, aby wypełnić dodatkową przestrzeń, ani nie kurczy się, gdy przestrzeń jest ograniczona. Zawsze zachowuje dokładnie swój naturalny rozmiar wynikający z zawartości. Należy używać flex-none w przypadku ikon, awatarów, odznak i elementów o stałej szerokości, które powinny zachować swój rozmiar niezależnie od ilości miejsca dostępnego w kontenerze 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>

Narzędzia grow i shrink

W celu uzyskania precyzyjniejszej kontroli Tailwind udostępnia osobne narzędzia grow, grow-0, shrink i shrink-0. grow pozwala elementowi rosnąć (flex-grow: 1). grow-0 uniemożliwia powiększanie. shrink pozwala elementowi się kurczyć (flex-shrink: 1). shrink-0 uniemożliwia kurczenie — jest przydatne, gdy obrazy i ikony nie powinny być ściskane, gdy kontener jest zbyt wąski.

<!-- 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-*: ustawianie rozmiaru początkowego

basis-* ustawia rozmiar początkowy elementu flex przed jego powiększaniem lub pomniejszaniem. Odpowiada właściwości CSS flex-basis. Można używać wartości odstępów Tailwind (basis-4 = 16px), wartości procentowych (basis-1/2 = 50%) lub wartości słownikowych (basis-full = 100%). Ustawienie basis-1/3 na trzech elementach rodzeństwa z grow tworzy układ trzech kolumn, który zaczyna się od równych części i wypełnia dostępną przestrzeń.

<!-- 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 a basis-auto

basis-0 i basis-auto dają nieco różne rezultaty w połączeniu z grow. Przy basis-0 wszystkie elementy zaczynają od szerokości zero i rosną wyłącznie zgodnie ze swoimi proporcjami flex-grow — co prowadzi do równego podziału przestrzeni. Przy basis-auto elementy najpierw zajmują szerokość wynikającą z zawartości, a następnie dodatkowa przestrzeń jest rozdzielana — co prowadzi do podziału proporcjonalnego do zawartości.

/* 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 -->

Praktyka: główna treść i stały pasek boczny

Klasyczny układ dwóch paneli wykorzystuje flex-none w-64 na pasku bocznym (stała szerokość 256px) oraz flex-1 na obszarze głównej treści (zajmuje całą pozostałą przestrzeń). Tworzy to pasek boczny, który nigdy nie rośnie ani się nie kurczy, oraz obszar treści wypełniający 100% pozostałej przestrzeni. Jest to podstawa układów paneli i interfejsów administracyjnych.

<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>

Praktyka: responsywna siatka kart z flex-1

Połączenie flex flex-wrap z flex-1 i ograniczeniem min-w-* tworzy responsywną siatkę, która automatycznie dostosowuje liczbę kolumn do dostępnej szerokości. Każda karta zajmuje co najmniej szerokość min-w-64, a następnie powiększa się, aby wypełnić wiersz dzięki flex-1. Gdy karta nie może się zmieścić, przechodzi do następnego wiersza — bez potrzeby jawnego zarządzania punktami przerwania.

<!-- 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>

Kolejność: zmiana kolejności wizualnej

Narzędzia Tailwind order-* zmieniają wizualną kolejność wyświetlania elementów flex bez zmiany ich kolejności w DOM. order-first przenosi element na początek, order-last przenosi go na koniec, a wartości od order-1 do order-12 zapewniają szczegółową kontrolę. Jest to przydatne przy responsywnej zmianie kolejności: pasek boczny wyświetlany po treści na urządzeniach mobilnych można wizualnie przenieść przed nią na komputerach za pomocą 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>

Szybki sprawdzian

Sprawdź swoją znajomość zagadnień Tailwind CSS Mastery z tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyli się Państwo, że: flex-1 sprawia, że elementy potomne zajmują równe części dostępnej przestrzeni, flex-none uniemożliwia powiększanie i pomniejszanie elementu, dzięki czemu zachowuje on swój naturalny rozmiar, a grow, shrink i basis-* zapewniają szczegółową kontrolę nad każdym z tych wymiarów osobno. Następnie zajmiemy się przepełnieniem za pomocą flex-wrap i tworzeniem stałych odstępów między elementami flex.

Bezpłatny start

Ucz się HTML dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Rozrastanie, kurczenie i baza flex” jest bezpłatna?

Tak — pełny tekst „Rozrastanie, kurczenie i baza flex” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Tailwind CSS Academy, przejdź na CoddyKit PRO. Kurs Tailwind CSS Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Rozrastanie, kurczenie i baza flex”?

Kontrolować rozszerzanie i kurczenie elementów flex za pomocą narzędzi flex-1, flex-none, grow, shrink i basis-*. Ćwiczysz Tailwind CSS Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Tailwind CSS Academy?

Nie wymagamy żadnego doświadczenia. Tailwind CSS Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Rozrastanie, kurczenie i baza flex”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Tailwind CSS Academy?

Tak. Każda lekcja Tailwind CSS Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Włączanie flex i określanie kierunku
  2. Justowanie zawartości i wyrównywanie elementów
  3. Rozrastanie, kurczenie i baza flex
  4. Zawijanie i odstępy
← Powrót do Tailwind CSS Academy