Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> CSS

Thuộc tính flex-grow trong CSS Flexbox

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-grow củ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ếu
  • flex-basis (mặc định auto): Kích thước ban đầu trước grow/shrink
  • Shorthand: flex: <grow> <shrink> <basis>

Lưu ý

  • flex-grow chỉ phân bổ không gian thừa, không làm item nhỏ hơn flex-basis
  • Set flex-basis: 0 khi 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