Sobes.tech
Junior

Kā darbojas flex-grow un flex-shrink īpašības?

sobes.tech AI

Atbilde no AI

flex-grow nosaka, cik lielā mērā elements var palielināties brīvās vietas klātbūtnē konteinerā. Vērtība 0 (noklusējuma) nozīmē, ka elements nepalielināsies. Pozitīvas vērtības norāda uz izaugsmes koeficientu attiecībā uz citiem flex elementiem tajā pašā rindā.

flex-shrink nosaka, cik ļoti elements var sarukt, ja trūkst brīvās vietas konteinerā. Vērtība 1 (noklusējuma) nozīmē, ka tas var sarukt. Vērtība 0 aizliedz sarukšanu. Pozitīvas vērtības norāda uz sarukšanas koeficientu attiecībā uz citiem flex elementiem.

Piemērs:

<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; /* Konteineru platums */
}

.item {
  flex-basis: 100px; /* Katra elementa sākuma izmērs */
  background-color: lightblue;
  margin: 5px;
}

.item-1 {
  flex-grow: 1; /* Aizņems 1 daļu no brīvās vietas */
  flex-shrink: 0; /* Nebūs sarukts */
}

.item-2 {
  flex-grow: 2; /* Aizņems 2 daļas no brīvās vietas */
  flex-shrink: 1; /* Var sarukt */
}

.item-3 {
  flex-grow: 1; /* Aizņems 1 daļu no brīvās vietas */
  flex-shrink: 1; /* Var sarukt */
}

Šajā gadījumā kopējais sākotnējais elementu izmērs ir 300px (3 * 100px). Brīvā vieta ir 100px (400px - 300px). Šī brīvā vieta tiks sadalīta starp elementiem pēc to flex-grow proporcijas: 1 + 2 + 1 = 4. Elementam 1 tiks piešķirts 1/4 * 100px = 25px papildu vietas. Elementam 2 tiks piešķirts 2/4 * 100px = 50px papildu vietas. Elementam 3 tiks piešķirts 1/4 * 100px = 25px papildu vietas.

To galīgais izmērs būs:

  • Elements 1: 100px + 25px = 125px
  • Elements 2: 100px + 50px = 150px
  • Elements 3: 100px + 25px = 125px

Ja konteineris būtu nepietiekams (piemēram, 200px platums), būtu nepieciešams samazināt elementus. Samazināšanas laikā ņem vērā flex-shrink un to pašreizējo izmēru. Trūkstošā vieta tiek sadalīta starp elementiem ar flex-shrink lielāku par 0, proporcionāli to flex-shrink un pašreizējam izmēram (pēc flex-basis ņemšanas vērā). Samazināšanas algoritms ir sarežģītāks, bet galvenā ideja ir tāda, ka elementi ar lielāku flex-shrink vai lielāku pašreizējo izmēru tiks samazināti vairāk.

Svarīgi atcerēties, ka flex-basis, flex-grow un flex-shrink bieži tiek lietoti kopā kā īsāks flex īpašums. Piemēram, flex: 1 1 auto; ir ekvivalents ar flex-grow: 1; flex-shrink: 1; flex-basis: auto;.

Lielāka prioritāte ir šāda:

  1. flex-basis: nosaka sākotnējo elementa izmēru.
  2. flex-grow: sadala pozitīvo brīvo vietu.
  3. flex-shrink: sadala negatīvo brīvo vietu (samazināšanu).