Właściwość flex-grow

Właściwość flex-grow określa to, na ile pojedynczy blok flex może być większy od sąsiednich elementów, jeśli jest to konieczne.

Na przykład, jeśli wszystkie bloki flex wewnątrz kontenera flex mają flex-grow:1, to będą one miały jednakowy rozmiar. Jeśli jeden z nich ma flex-grow:2, to będzie on 2 razy większy niż wszystkie pozostałe.

Jeśli sumaryczna szerokość elementów jest mniejsza niż szerokość rodzica, po prawej stronie pozostaje pusta przestrzeń. W razie potrzeby tę pustą przestrzeń można proporcjonalnie podzielić między naszymi elementami. Robimy to za pomocą właściwości flex-grow, ustawianej elementom flex. Wartością tej właściwości jest liczba bezwymiarowa.

Stosuje się do: konkretnego bloku flex.

Ta właściwość wchodzi w skład skrótu właściwości flex.

Składnia

cssselektor {
  flex-grow: liczba dodatnia;
}

Wartość domyślna: 0.

Przykład

Teraz mamy dwa bloki flex o szerokości 100px. Ich sumaryczna szerokość 200px, a szerokość rodzica - 300px. Okazuje się, że pozostaje wolna przestrzeń 100px.

Jeśli elementom nie jest ustawiony flex-grow, po prostu zobaczymy tę wolną przestrzeń. Jeśli jest im ustawiony, to rzeczywista szerokość elementów będzie większa niż ustawiona - proporcjonalnie podzielą między siebie wolną przestrzeń i dodadzą ją do swojej szerokości.

Niech dla przykładu u pierwszego elementu flex-grow wynosi 1, a u drugiego - 3. Obliczmy, jaką część wolnej przestrzeni otrzyma każdy element.

Najpierw trzeba uzyskać sumaryczną liczbę jednostek flex-grow wszystkich naszych elementów. U pierwszego elementu wynosi ona 1, a u drugiego - 3. Oznacza to, że suma wynosi 4.

Podzielmy teraz 100px wolnej przestrzeni przez 4 i otrzymamy, że 25px przypada na jedną jednostkę flex-grow. Okaże się, że do pierwszego elementu doda się jedna jednostka flex-grow, czyli 25px, a do drugiego - trzy jednostki, czyli 75px.

Szerokość pierwszego elementu wyniesie 125px, a drugiego - 175px:

html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
</div>
css.parent {
  display: flex;
  width: 300px;
  height: 200px;
  border: 1px solid red;
}
.child {
  height: 50px;
  border: 1px solid green;
}
.elem1 {
  width: 100px;
  flex-grow: 1;
}
.elem2 {
  width: 100px;
  flex-grow: 3;
}

Результат:

Przykład

Niech teraz szerokość rodzica wynosi 400px, szerokość pierwszego elementu 200px, a szerokość drugiego elementu - 100px. Okaże się, że wolna przestrzeń znów wynosi 100px.

Ustawmy każdemu elementowi flex-grow, równy 1. W sumie otrzymamy 2, czyli 100px wolnej przestrzeni trzeba podzielić przez 2. Okaże się, że 50px przypada na jedną jednostkę chciwości.

Ponieważ wszystkie elementy mają tę samą wartość flex-grow, to do wszystkich elementów doda się ta sama wartość 50px. Oznacza to, że pierwszy element stanie się 250px, i a drugi stanie się 150px:

html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
</div>
css.parent  {
  display: flex;
  width: 400px;
  height: 200px;
  border: 1px solid red;
}
.child {
  height: 50px;
  border: 1px solid green;
}
.elem1 {
  width: 200px;
  flex-grow: 1;
}
.elem2 {
  width: 100px;
  flex-grow: 1;
}

Результат:

Przykład

Niech znów szerokość rodzica wynosi 400px, szerokość pierwszego elementu 200px, a szerokość drugiego elementu - 100px.

Ustawmy teraz pierwszemu elementowi flex-grow na wartość 3, a drugiemu - na wartość 1. Okaże się, że chciwość w sumie wynosi 4. Wtedy jedna jednostka chciwości równa się 100px / 4 = 25px.

Do pierwszego elementu doda się 75px, i stanie się 275px, a do drugiego - 25px, stanie się 125px:

html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
</div>
css.parent  {
  display: flex;
  width: 400px;
  height: 200px;
  border: 1px solid red;
}
.child {
  height: 50px;
  border: 1px solid green;
}
.elem1 {
  width: 200px;
  flex-grow: 3;
}
.elem2 {
  width: 100px;
  flex-grow: 1;
}

Результат:

Zobacz też

  • właściwość flex-direction,
    która ustawia kierunek osi bloków flex
  • właściwość justify-content,
    która ustawia wyrównanie wzdłuż osi głównej
  • właściwość align-items,
    która ustawia wyrównanie wzdłuż osi poprzecznej
  • właściwość flex-wrap,
    która ustawia zawijanie bloków flex
  • właściwość flex-flow,
    skrót dla flex-direction i flex-wrap
  • właściwość order,
    która ustawia kolejność bloków flex
  • właściwość align-self,
    która ustawia wyrównanie pojedynczego bloku
  • właściwość flex-basis,
    która ustawia rozmiar konkretnego bloku flex
  • właściwość flex-shrink,
    która ustawia ściśliwość bloków flex
  • właściwość flex,
    skrót dla flex-grow, flex-shrink i flex-basis