Trong CSS, việc chia bố cục (layout) là một yếu tố quan trọng để xây dựng các giao diện web hiện đại. Chúng ta có thể chia layout theo nhiều cách như dùng width/height, float, flexbox và grid.
px, %, vw, auto, min-content, max-content.px, %, vh, auto, min-content, max-content.left) hoặc phải (right). Các giá trị: none, left, right, inherit.none, left, right, both.visible, hidden, scroll, auto, clip.flex: 1 (chia đều không gian còn lại).flex: 2 (chiếm gấp đôi phần tử có flex: 1).flex: none (không co giãn).flex-start (căn trái).center (căn giữa).flex-end (căn phải).space-between (chia đều, hai phần tử ngoài cùng sát mép).space-around (chia đều, có khoảng cách xung quanh).space-evenly (khoảng cách bằng nhau giữa các phần tử).flex-start (căn trên).center (căn giữa).flex-end (căn dưới).stretch (giãn đều nếu không có chiều cao cố định).baseline (căn theo dòng chữ).repeat(3, 1fr) (chia thành 3 cột bằng nhau).100px 1fr 2fr (cột 1: 100px, cột 2: bằng cột 3 nhưng nhỏ hơn).repeat(2, auto) (2 hàng, chiều cao tự động).gap): Khoảng cách giữa các ô trong grid.content-box (chỉ tính phần nội dung, không gồm padding và border).border-box (bao gồm cả padding và border).padding: 10px 20px 15px 5px (trên, phải, dưới, trái).auto để căn giữa ngang.left, center, right, justify.1.5 (gấp 1.5 lần kích thước chữ).baseline, top, middle, bottom.Ưu điểm:
Dễ dàng kiểm soát kích thước phần tử.
Không bị ảnh hưởng bởi nội dung bên trong.
Nhược điểm:
Không phản hồi tốt trên các màn hình có kích thước khác nhau.
Nếu nội dung thay đổi, có thể gây tràn hoặc không đủ không gian hiển thị.
Nên dùng khi nào:
Khi cần đảm bảo một phần tử có kích thước cố định trên giao diện.
Ví dụ:
<div class="box">Hộp có kích thước cố định</div>
.box {
width: 300px;
height: 200px;
background-color: lightblue;
text-align: center;
line-height: 200px;
border: 1px solid black;
}
Ưu điểm, nhược điểm và khi nào nên dùng:
Ưu điểm: Tương thích tốt với trình duyệt cũ, dễ hiểu.
Nhược điểm: Cần dùng clear để tránh lỗi, khó kiểm soát căn chỉnh.
Nên dùng khi nào: Khi làm bố cục đơn giản.
Ví dụ:
<div class="container">
<div class="left">Cột trái</div>
<div class="right">Cột phải</div>
</div>
.container {
width: 100%;
overflow: hidden;
}
.left {
float: left;
width: 50%;
background-color: lightgreen;
padding: 20px;
box-sizing: border-box;
}
.right {
float: right;
width: 50%;
background-color: lightcoral;
padding: 20px;
box-sizing: border-box;
}
Hệ thống 12 cột giúp chia bố cục linh hoạt bằng cách sử dụng width theo phần trăm.
Mỗi cột trong hệ thống 12 cột chiếm 8.33% chiều rộng (100% / 12 = 8.33%).
📌 Công thức tính chiều rộng của một cột:
.column-x {
width: calc(8.33% * x); /* x là số cột */
}
🚀 Ví dụ:
Khi sử dụng thì chúng ta chỉ cần gọi lại các class đã có. Ví dụ chia thành 2 phần bằng nhau
<div class="col-12">
<div class="col-6">Phần 1</div>
<div class="col-6">Phần 2</div>
</div>
Hiện đại, dễ dàng căn chỉnh và co giãn theo hàng hoặc cột.
Ví dụ:
<div class="container">
<div class="box">Cột 1</div>
<div class="box">Cột 2</div>
<div class="box">Cột 3</div>
</div>
.container {
display: flex;
gap: 10px;
}
.box {
flex: 1;
padding: 20px;
background-color: lightblue;
text-align: center;
}
Flex container: phần tử cha dùng display: flex
Flex items: các phần tử con trực tiếp của container
display: flex):| Thuộc tính | Ý nghĩa |
|---|---|
flex-direction |
Xác định hướng sắp xếp (row, column,...) |
justify-content |
Căn theo trục chính (ngang hoặc dọc tùy flex-direction) |
align-items |
Căn theo trục phụ |
flex-wrap |
Có cho xuống hàng không? |
align-content |
Căn hàng khi có nhiều hàng |
.container {
display: flex;
flex-direction: row; /* mặc định: row */
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
| Thuộc tính | Ý nghĩa |
|---|---|
flex-grow |
Mở rộng tỉ lệ (tăng kích thước khi có khoảng trống) |
flex-shrink |
Co lại tỉ lệ khi không đủ chỗ |
flex-basis |
Kích thước ban đầu của item |
flex |
Viết gọn của grow shrink basis |
align-self |
Ghi đè align-items chỉ cho item đó |
<style>
.container {
display: flex;
justify-content: space-between;
align-items: center;
background: #eee;
padding: 10px;
}
.item {
background: lightblue;
padding: 20px;
flex: 1;
margin: 5px;
text-align: center;
}
</style>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
Hệ thống lưới mạnh mẽ giúp bố cục linh hoạt với hàng và cột.
Ví dụ:
<div class="container">
<div class="box">Ô 1</div>
<div class="box">Ô 2</div>
<div class="box">Ô 3</div>
<div class="box">Ô 4</div>
<div class="box">Ô 5</div>
<div class="box">Ô 6</div>
</div>
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.box {
background-color: lightgoldenrodyellow;
padding: 20px;
text-align: center;
}
Mỗi phương pháp chia layout đều có ưu và nhược điểm. Trong thực tế, flexbox và grid là những phương pháp hiện đại và linh hoạt nhất. Hãy lựa chọn phương pháp phù hợp cho giao diện của bạn!