Giá trị stretch (mặc định) của align-items kéo giãn các flex items để lấp đầy chiều cao của dòng (cross-axis size), trừ khi item có kích thước cố định trên trục đó.
Ví dụ: align-items: stretch
<!DOCTYPE html>
<html>
<head>
<style>
.mycontainer {
display: flex;
height: 200px;
background-color: #e74c3c;
align-items: stretch;
padding: 10px;
gap: 10px;
}
.mycontainer > div {
background-color: #e67e22;
text-align: center;
line-height: 60px;
font-size: 30px;
width: 100px;
margin: 5px;
border-radius: 4px;
}
</style>
</head>
<body>
<h1>Queue</h1>
<div class="mycontainer">
<div>Q1</div>
<div>Q2</div>
<div>Q3</div>
<div>Q4</div>
</div>
</body>
</html>
Điều kiện stretch hoạt động
- Item không có height cố định (hoặc height: auto)
- Item không có align-self ghi đè
- Container có chiều cao xác định hoặc được stretch bởi parent
So sánh các giá trị align-items
| Giá trị | Hành vi | Khi nào dùng |
|---|---|---|
stretch | Kéo giãn lấp đầy (mặc định) | Card cùng chiều cao, form inputs |
flex-start | Căn trên | Top-aligned content |
flex-end | Căn dưới | Bottom-aligned (footer) |
center | Căn giữa | Icon + text, avatar |
baseline | Căn baseline text | Text size khác nhau |
Ngăn chặn stretch cho item cụ thể
.item {
align-self: flex-start; /* Ghi đè stretch */
/* Hoặc */
height: 100px; /* Height cố định */
/* Hoặc */
align-self: center;
}
Ứng dụng: Equal Height Cards
.card-grid {
display: flex;
flex-wrap: wrap;
gap: 1.5rem;
align-items: stretch; /* Mặc định, card cùng cao */
}
.card {
flex: 1 1 300px;
display: flex;
flex-direction: column;
}
.card-content {
flex: 1; /* Nội dung đẩy footer xuống dưới */
}