Регулиране на свиването на флекс елементи в CSS
По подразбиране от всички елементи се отрязват
парченца, пропорционални на ширината на елемента.
Въпреки това, може да се направи така, че от някои
елементи да се отрязват по-големи или по-малки
парченца. За това съществува специално свойство
flex-shrink.
Това свойство представлява някакво
тегло, с което ще се умножава ширината на елемента
при изчисляване на отрязаното парченце по вече
приведената по-горе формула. Например, ако
ширината на елемента е 200px, а неговото
flex-shrink е 3, то тегловата
(т.е. умножена по теглото) ширина на елемента
ще бъде равна на:
200px * 3 = 600px
Формулата с отчитане на flex-shrink ще
има следния вид: отриц. свободно пространство
* (теглова ширина на елемента / сума от всички
теглови ширини на елементите).
Нека да разгледаме пример. Да предположим, че имаме
4 елемента. Нека ширината на първия
елемент е 400px, а flex-shrink
е 2, ширината на останалите елементи
- 200px, а техният flex-shrink е
1. Нека ширината на родителя е 900px.
Общата ширина на елементите е:
400px + 3 * 200px = 1000px
Отрицателното свободно пространство ще бъде:
1000px - 900px = 100px
Общата теглова ширина на елементите е:
400px * 2 + 200px * 1 + 200px * 1 + 200px * 1 = 1400px
Тегловата ширина на първия елемент е:
400px * 2 = 800px
От първия елемент ще се отреже следното парченце:
100px * (800px / 1400px) = 100px * 0.57 = 57.14px
Ширината на елемента ще бъде равна на:
400px - 57.14px = 342.86px ~ 343px
Тегловата ширина на всеки от останалите елементи е:
200px * 1 = 200px
От всеки елемент ще се отреже следното парченце:
100px * (200px / 1400px) = 100px * 0.142 = 14.2px
Ширината на елемента ще бъде равна на:
200px - 14.2px = 185.8px ~ 186px
Реализирайте описаните блокове и проверете чрез измерване, че ширината на елементите наистина е равна на изчислената от нас.
Изчислете ширината на блоковете и след това проверете изчисленията чрез измерване:
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
</div>
.parent {
display: flex;
width: 200px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 100px;
flex-shrink: 2;
}
.elem2 {
width: 100px;
flex-shrink: 1;
}
.elem3 {
width: 100px;
flex-shrink: 1;
}
Изчислете ширината на блоковете и след това проверете изчисленията чрез измерване:
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
</div>
.parent {
display: flex;
width: 200px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 100px;
flex-shrink: 3;
}
.elem2 {
width: 100px;
flex-shrink: 2;
}
.elem3 {
width: 100px;
flex-shrink: 1;
}
Изчислете ширината на блоковете и след това проверете изчисленията чрез измерване:
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
<div class="child elem4">4</div>
</div>
.parent {
display: flex;
width: 500px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 300px;
flex-shrink: 3;
}
.elem2 {
width: 200px;
flex-shrink: 2;
}
.elem3 {
width: 200px;
flex-shrink: 1;
}
.elem4 {
width: 200px;
flex-shrink: 1;
}