Sobes.tech
Junior

Ako fungujú vlastnosti flex-grow a flex-shrink?

sobes.tech AI

Odpoveď od AI

flex-grow určuje, ako veľmi sa môže prvok zväčšiť pri dostupnom voľnom priestore v kontajneri. Hodnota 0 (predvolená) znamená, že sa prvok nezväčší. Pozitívne hodnoty udávajú koeficient rastu voči ostatným flex prvkom v tom istom riadku.

flex-shrink určuje, ako veľmi sa môže prvok zmenšiť pri nedostatku voľného priestoru v kontajneri. Hodnota 1 (predvolená) znamená, že sa môže zmenšiť. Hodnota 0 zakazuje zmenšenie. Pozitívne hodnoty udávajú koeficient zmenšenia voči ostatným flex prvkom.

Prí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; /* Šírka kontajnera */
}

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

.item-1 {
  flex-grow: 1; /* Zaberie 1 diel z voľného priestoru */
  flex-shrink: 0; /* Nebude sa zmenšovať */
}

.item-2 {
  flex-grow: 2; /* Zaberie 2 diely z voľného priestoru */
  flex-shrink: 1; /* Môže sa zmenšiť */
}

.item-3 {
  flex-grow: 1; /* Zaberie 1 diel z voľného priestoru */
  flex-shrink: 1; /* Môže sa zmenšiť */
}

V tomto prípade je celková základná veľkosť prvkov 300px (3 * 100px). Voľný priestor je 100px (400px - 300px). Tento voľný priestor bude rozdelený medzi prvky 1, 2 a 3 v pomere ich flex-grow: 1 + 2 + 1 = 4. Prvok 1 získa 1/4 * 100px = 25px dodatočného priestoru. Prvok 2 získa 2/4 * 100px = 50px dodatočného priestoru. Prvok 3 získa 1/4 * 100px = 25px dodatočného priestoru.

Ich konečné veľkosti budú: Prvok 1: 100px + 25px = 125px Prvok 2: 100px + 50px = 150px Prvok 3: 100px + 25px = 125px

Ak by šírka kontajnera bola nedostatočná (napríklad 200px), bolo by potrebné prvky zmenšiť. Pri nedostatku priestoru na zmenšenie sa zohľadňujú flex-shrink a aktuálna veľkosť prvkov. Chýbajúci priestor sa rozdelí na zmenšenie medzi prvky s flex-shrink väčším ako 0, pomerovo podľa ich flex-shrink a aktuálnej veľkosti (po zohľadnení flex-basis). Algoritmus zmenšenia je zložitejší, ale základná myšlienka je, že prvky s väčším flex-shrink alebo väčšou aktuálnou veľkosťou sa zmenšujú viac.

Je dôležité si uvedomiť, že flex-basis, flex-grow a flex-shrink sa často používajú spolu ako skrátené vlastnosti flex. Napríklad, flex: 1 1 auto; je ekvivalentné s flex-grow: 1; flex-shrink: 1; flex-basis: auto;.

Priorita pri rozdeľovaní priestoru:

  1. flex-basis: nastavuje počiatočnú veľkosť prvku.
  2. flex-grow: rozdeľuje kladný voľný priestor.
  3. flex-shrink: rozdeľuje záporný voľný priestor (potreba zmenšenia).