Свойство flex-shrink

Свойството flex-shrink определя до каква степен flex-блокът ще се свива спрямо съседните елементи във flex-контейнера в случай на липса на свободно пространство.

Например, ако всички flex-блокове във flex-контейнера имат flex-shrink:1, то те ще бъдат с еднакъв размер. Ако един от тях има flex-shrink:2, то той ще бъде 2 пъти по-малък от всички останали.

Прилага се към: конкретен flex блок.

Това свойство влиза като съставна част в свойството-съкращение flex.

Синтаксис

cssселектор {
  flex-shrink: положително число;
}

Стойност по подразбиране: 1.

Пример

Нека имаме 3 елемента. Ширината на всеки от тях е 200px и сумарно е равна на 600px, което е по-голямо от ширината на родителския контейнер, която е равна на 350px:

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

Результат:

Нека изчислим отрицателното свободно пространство по формулата:

600px - 350px = 250px

Сумарната претеглена ширина на елементите със стойностите на свойството flex-shrink за всеки елемент ще бъде равна на:

200px * 1 + 200px * 2 + 200px * 3 = 1200px

Сега нека определим с колко ще се свие първият елемент:

250px * 1 (flex-shrink) * 200 (width) / 1200 = 41,6px

Вторият елемент:

250px * 2 (flex-shrink) * 200 (width) / 1200 = 83,3px

Третият елемент:

250px * 3 (flex-shrink) * 200 (width) / 1200 = 125px

Излиза, че третият елемент, чиято стойност flex-shrink е равна на 3, ще се свие повече от другите елементи.

Вижте също

  • свойство flex-direction,
    което задава посока на осите на flex блоковете
  • свойство justify-content,
    което задава подравняване по главната ос
  • свойство align-items,
    което задава подравняване по напречната ос
  • свойство flex-wrap,
    което задава многолинейност на flex блоковете
  • свойство flex-flow,
    съкращение за flex-direction и flex-wrap
  • свойство order,
    което задава реда на flex блоковете
  • свойство align-self,
    което задава подравняване на един блок
  • свойство flex-basis,
    което задава размера на конкретен flex блок
  • свойство flex-grow,
    което задава "алчност" на flex блоковете
  • свойство flex,
    съкращение за flex-grow, flex-shrink и flex-basis