Thuộc tính flex-grow xác định khả năng phóng to của flex item so với các item khác khi có không gian thừa trên trục chính. Giá trị mặc định là 0 (không phóng to).
Cơ chế hoạt động
- Tổng
flex-growcủa tất cả items = tổng "phần" (parts) - Không gian thừa chia tỷ lệ theo số phần
- Item với flex-grow: 2 nhận gấp 2 lần item flex-grow: 1
Ví dụ: Q3 lớn hơn các item khác
<!DOCTYPE html>
<html>
<head>
<style>
.mycontainer {
display: flex;
background-color: #e67e22;
align-content: space-between;
padding: 10px;
gap: 10px;
}
.mycontainer > div {
background-color: white;
text-align: center;
line-height: 40px;
font-size: 25px;
width: 100px;
margin: 5px;
border-radius: 4px;
}
</style>
</head>
<body>
<h1>Quiz</h1>
<div class="mycontainer">
<div style="flex-grow: 1">Q1</div>
<div style="flex-grow: 1">Q2</div>
<div style="flex-grow: 20">Q3</div>
<div style="flex-grow: 1">Q4</div>
<div style="flex-grow: 1">Q5</div>
</div>
</body>
</html>
Tính toán ví dụ trên
Tổng flex-grow = 1+1+20+1+1 = 24 parts Q1, Q2, Q4, Q5: 1/24 không gian thừa mỗi item Q3: 20/24 không gian thừa (gấp 20 lần)
Ứng dụng thực tế: Sidebar + Main Content
.layout {
display: flex;
min-height: 100vh;
}
.sidebar {
flex: 0 0 250px; /* Không grow, không shrink, width 250px */
}
.main-content {
flex: 1; /* flex-grow: 1, flex-shrink: 1, flex-basis: 0% */
/* Chiếm toàn bộ không gian còn lại */
}
Bỏ sung: flex-shrink & flex-basis
flex-shrink(mặc định 1): Khả năng co lại khi không gian thiếuflex-basis(mặc định auto): Kích thước ban đầu trước grow/shrink- Shorthand:
flex: <grow> <shrink> <basis>
Lưu ý
flex-growchỉ phân bổ không gian thừa, không làm item nhỏ hơn flex-basis- Set
flex-basis: 0khi dùng flex-grow để chia tỷ lệ chính xác - Kết hợp
min-width/max-widthđể kiểm soát giới hạn