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-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: теріс бос кеңістікті бөледі (қысу қажеттілігі).