Sobes.tech
Junior

Jak fungují vlastnosti flex-grow a flex-shrink?

sobes.tech AI

Odpověď od AI

flex-grow určuje, jak mocně se prvek může zvětšovat při dostupném volném prostoru v kontejneru. Hodnota 0 (výchozí) znamená, že se prvek nezvětší. Kladné hodnoty udávají koeficient růstu vzhledem k ostatním flex prvkům ve stejném řádku.

flex-shrink určuje, jak moc se prvek může zmenšit při nedostatku volného prostoru v kontejneru. Hodnota 1 (výchozí) znamená, že se může zmenšit. Hodnota 0 zakazuje zmenšení. Kladné hodnoty udávají koeficient zmenšení vzhledem k ostatním flex prvkům.

Příklad:

<div class="container">
  <div class="item item-1">Item 1</div>
  <div class="item item-2">Item 2</div>
  <div class="item item-3">Item 3</div>
</div>
.container {
  display: flex;
  width: 400px; /* Šířka kontejneru */
}

.item {
  flex-basis: 100px; /* Základní velikost každého prvku */
  background-color: lightblue;
  margin: 5px;
}

.item-1 {
  flex-grow: 1; /* Zabere 1 díl z volného prostoru */
  flex-shrink: 0; /* Nebude se zmenšovat */
}

.item-2 {
  flex-grow: 2; /* Zabere 2 díly z volného prostoru */
  flex-shrink: 1; /* Může se zmenšit */
}

.item-3 {
  flex-grow: 1; /* Zabere 1 díl z volného prostoru */
  flex-shrink: 1; /* Může se zmenšit */
}

V tomto případě je celková základní velikost prvků 300px (3 * 100px). Volný prostor je 100px (400px - 300px). Tento volný prostor bude rozdělen mezi prvky 1, 2 a 3 v poměru jejich flex-grow: 1 + 2 + 1 = 4. Prvek 1 obdrží 1/4 * 100px = 25px dodatečného prostoru. Prvek 2 obdrží 2/4 * 100px = 50px dodatečného prostoru. Prvek 3 obdrží 1/4 * 100px = 25px dodatečného prostoru.

Jejich konečné velikosti budou: Prvek 1: 100px + 25px = 125px Prvek 2: 100px + 50px = 150px Prvek 3: 100px + 25px = 125px

Pokud by šířka kontejneru byla nedostatečná (například 200px), bylo by nutné prvky zmenšit. Při nedostatku prostoru pro zmenšení se zohledňují flex-shrink a aktuální velikost prvků. Chybějící prostor se rozdělí na zmenšení mezi prvky s flex-shrink větším než 0, poměrově podle jejich flex-shrink a aktuální velikosti (po zohlednění flex-basis). Algoritmus zmenšení je složitější, ale základní myšlenka je, že prvky s větším flex-shrink nebo větší aktuální velikostí se zmenšují více.

Je důležité si uvědomit, že flex-basis, flex-grow a flex-shrink jsou často používány společně jako zkrácené vlastnosti flex. Například flex: 1 1 auto; je ekvivalentní s flex-grow: 1; flex-shrink: 1; flex-basis: auto;.

Priorita při rozdělování prostoru:

  1. flex-basis: nastavuje počáteční velikost prvku.
  2. flex-grow: rozděluje kladný volný prostor.
  3. flex-shrink: rozděluje záporný volný prostor (potřeba zmenšení).