Thuộc tính flexShrink (CSS flex-shrink) xác định khả năng co lại của flex item khi tổng kích thước cơ sở (flex-basis) vượt quá container. Giá trị mặc định là 1.
Ví dụ minh họa
Hai DIV có flex-basis: 300px trong container 500px. Nhấn nút để DIV2 co lại gấp 5 lần DIV1:
<!DOCTYPE html>
<html>
<head>
<style>
#box {
border: 1px solid #000;
width: 500px;
height: 100px;
display: flex;
}
#box div {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 300px;
}
</style>
</head>
<body>
<div id="box">
<div style="background-color:orange;">DIV1</div>
<div style="background-color:yellow;" id="myID">DIV2</div>
</div>
<p>Sử dụng thuộc tính flexShrink</p>
<button onclick="display()">Thiết lập</button>
<script>
function display() {
document.getElementById("myID").style.flexShrink = "5";
}
</script>
</body>
</html>
Cách tính toán co lại (shrink)
Khi container nhỏ hơn tổng flex-basis:
- Tính "hệ số co" của mỗi item:
flex-shrink * flex-basis - Tổng hệ số co = tổng của tất cả items
- Mỗi item bị trừ đi:
(hệ số item / tổng hệ số) * không gian thừa
Ví dụ: DIV1 (shrink=1, basis=300), DIV2 (shrink=5, basis=300). Tổng basis=600, container=500 → thừa 100px. Hệ số: 300 và 1500. Tổng=1800. DIV1 mất 100*(300/1800)=16.7px. DIV2 mất 83.3px.