Flexbox (Flexible Box Layout) là một module layout của CSS giúp sắp xếp các phần tử theo hàng hoặc cột một cách linh hoạt. Đây là công cụ được sử dụng phổ biến nhất trong phát triển giao diện web hiện đại nhờ khả năng căn chỉnh, phân bố khoảng cách và xây dựng layout responsive dễ dàng.
Trước khi Flexbox ra đời, việc xây dựng layout thường sử dụng:
Những kỹ thuật này có nhiều hạn chế:
Flexbox giải quyết các vấn đề trên bằng một hệ thống layout đơn giản và trực quan hơn.
Khi khai báo:
.container {
display: flex;
}
Ta có:
Ví dụ:
<div class="container">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
Container là phần tử có class container. Ba div bên trong là Flex Items.
Flexbox hoạt động dựa trên hai trục:
1 2 3
Main Axis chạy từ trái sang phải.
Cross Axis chạy từ trên xuống dưới.
1
2
3
Main Axis chạy từ trên xuống dưới.
Cross Axis chạy từ trái sang phải.
Ghi nhớ:
Bật Flexbox cho container.
.container {
display: flex;
}
Kết quả:
Item1 Item2 Item3
Xác định hướng của Main Axis.
.container {
flex-direction: row;
}
Các giá trị:
1 2 3
3 2 1
1
2
3
3
2
1
Căn các item theo Main Axis.
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
Ví dụ:
.container {
display: flex;
justify-content: space-between;
}
Căn các item theo Cross Axis.
.container {
display: flex;
align-items: center;
}
Các giá trị:
.container {
display: flex;
justify-content: center;
align-items: center;
}
Tạo khoảng cách giữa các item.
.container {
display: flex;
gap: 20px;
}
Ví dụ:
1 2 3
Hiện nay gap được ưu tiên hơn margin để tạo khoảng cách giữa các phần tử.
Cho phép item xuống dòng khi không đủ chỗ.
.container {
flex-wrap: wrap;
}
Ví dụ:
1 2 3
4 5 6
7 8 9
Các giá trị:
Chỉ hoạt động khi:
.container {
flex-wrap: wrap;
align-content: space-between;
}
align-content dùng để căn các dòng, không phải từng item.
Cho phép item mở rộng để chiếm phần không gian còn lại.
.left {
flex-grow: 1;
}
.right {
flex-grow: 2;
}
Kết quả:
left = 1 phần
right = 2 phần
Cho phép item co lại khi không đủ không gian.
.item {
flex-shrink: 1;
}
Kích thước ban đầu của item.
.item {
flex-basis: 200px;
}
Thuộc tính shorthand quan trọng nhất của Flex Item.
.item {
flex: 1;
}
Tương đương:
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0;
.item {
flex: 1;
}
Kết quả:
+-------+-------+-------+
| 1 | 2 | 3 |
+-------+-------+-------+
Thay đổi thứ tự hiển thị mà không cần thay đổi HTML.
.item {
order: -1;
}
HTML:
A B C
Kết quả:
B A C
Ghi đè align-items cho riêng một item.
.item {
align-self: flex-end;
}
<nav class="navbar">
<div>Logo</div>
<div>Menu</div>
</nav>
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
}
Kết quả:
LOGO MENU
<div class="layout">
<aside class="sidebar"></aside>
<main class="content"></main>
</div>
.layout {
display: flex;
}
.sidebar {
width: 250px;
}
.content {
flex: 1;
}
| Loại | Thuộc tính | Mục đích |
|---|---|---|
| Container | display | Bật Flexbox |
| Container | flex-direction | Xác định Main Axis |
| Container | justify-content | Căn theo Main Axis |
| Container | align-items | Căn theo Cross Axis |
| Container | flex-wrap | Cho phép xuống dòng |
| Container | gap | Khoảng cách giữa item |
| Item | flex | Co giãn item |
| Item | order | Thay đổi thứ tự hiển thị |
| Item | align-self | Ghi đè align riêng item |
Chỉ cần nắm vững 6 thuộc tính trên, bạn đã có thể xây dựng phần lớn giao diện web hiện đại bằng Flexbox.