Sobes.tech
Junior

Ինչպես են աշխատում flex-grow և flex-shrink հատկությունները։

sobes.tech AI

Պատասխան AI-ից

flex-grow որոշում է, թե որքան ուժեղ կարող է տարրն աճել ազատ տարածության առկայության դեպքում կոնտեյների մեջ: Արժեքը 0 (նույնպես՝ նախնական) նշանակում է, որ տարրն չի աճի: Պозитիվ արժեքները ցույց են տալիս աճի գործակիցը մյուս flex տարրերի նկատմամբ նույն շարքում:

flex-shrink որոշում է, թե որքան ուժեղ կարող է տարրն սեղմվել, երբ բացակայում է ազատ տարածք կոնտեյների մեջ: Արժեքը 1 (նույնպես՝ նախնական) նշանակում է, որ այն կարող է սեղմվել: Արժեքը 0 արգելում է սեղմումը: Պозитիվ արժեքները ցույց են տալիս սեղմման գործակիցը մյուս flex տարրերի նկատմամբ:

Օրինակ՝

<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; /* Կոնտեյների լայնությունը */
}

.item {
  flex-basis: 100px; /* Հիմնական չափը յուրաքանչյուր տարրի */
  background-color: lightblue;
  margin: 5px;
}

.item-1 {
  flex-grow: 1; /* Կբերի 1 բաժին ազատ տարածքից */
  flex-shrink: 0; /* Չի սեղմվի */
}

.item-2 {
  flex-grow: 2; /* Կբերի 2 բաժին ազատ տարածքից */
  flex-shrink: 1; /* Կարող է սեղմվել */
}

.item-3 {
  flex-grow: 1; /* Կբերի 1 բաժին ազատ տարածքից */
  flex-shrink: 1; /* Կարող է սեղմվել */
}

Այս դեպքում ընդհանուր հիմնական չափը տարրերի կազմում 300px է (3 * 100px): Ազատ տարածքը 100px է (400px - 300px): Այս ազատ տարածքը կբաշխվի flex-grow հարաբերակցությամբ՝ 1 + 2 + 1 = 4:

  • Տարր 1-ը կստանա 1/4 * 100px = 25px լրացուցիչ տարածք,
  • Տարր 2-ը կստանա 2/4 * 100px = 50px լրացուցիչ տարածք,
  • Տարր 3-ը կստանա 1/4 * 100px = 25px լրացուցիչ տարածք:

Նրանց վերջնական չափերը կլինեն՝

  • Տարր 1: 100px + 25px = 125px
  • Տարր 2: 100px + 50px = 150px
  • Տարր 3: 100px + 25px = 125px

Եթե կոնտեյների լայնությունը լինի անբավարար (օրինակ՝ 200px), ապա անհրաժեշտ կլինի սեղմել տարրերը: Սեղմման համար հաշվի են առնվում flex-shrink և տարրերի ընթացիկ չափը: Անբավարար տարածքը բաժանվում է սեղմման համար՝ ըստ flex-shrink մեծության, հարաբերակցությամբ նրանց flex-shrink և ընթացիկ չափի (հետո flex-basis հաշվի առնելով): Սեղմման ալգորիթմը ավելի բարդ է, բայց հիմնական գաղափարը այն է, որ flex-shrink մեծ արժեք ունեցող կամ մեծ ընթացիկ չափ ունեցող տարրերը սեղմվում են ավելի ուժեղ:

Կարևոր է հիշել, որ flex-basis, flex-grow և flex-shrink հաճախ օգտագործվում են միասին որպես կարճացված flex հատկություն: Օրինակ, flex: 1 1 auto; համարժեք է flex-grow: 1; flex-shrink: 1; flex-basis: auto;:

Առաջնահերթություն տարածքի բաշխման ժամանակ՝

  1. flex-basis: սահմանում է սկզբնական չափը;
  2. flex-grow: բաշխում է դրական ազատ տարածքը;
  3. flex-shrink: բաշխում է բացասական ազատ տարածքը (պահանջն է սեղմել):