Bốn cách, xếp từ ngắn tới linh hoạt nhất.
css
/* 1. Grid — ngắn nhất cho một phần tử ở giữa */
.wrap { display: grid; place-items: center; min-height: 100dvh; }
/* 2. Flexbox — cách quen thuộc nhất */
.wrap { display: flex; justify-content: center; align-items: center; }
/* 3. Flex + margin auto trên con — hữu ích khi container đã là flex sẵn */
.wrap { display: flex; }
.wrap > .box { margin: auto; }
/* 4. Absolute + transform — khi không kiểm soát được container */
.box {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
}| Cách | Ưu | Nhược |
|---|---|---|
place-items: center | 1 dòng | cần container là grid |
| flex 2 dòng | quen thuộc, dễ đọc | dài hơn |
margin: auto | căn cả hai chiều, không cần justify/align | chỉ hợp một con |
| absolute + transform | không phụ thuộc container | thoát flow, có thể mờ chữ ở màn hình lẻ pixel |
Lưu ý 1: căn giữa dọc không có tác dụng nếu container không có chiều cao. align-items: center trong một div cao bằng nội dung thì không nhìn thấy gì — thiếu height / min-height mới là nguyên nhân.
Lưu ý 2: đừng dùng 100vh cho container full màn hình trên mobile — thanh địa chỉ làm nội dung bị cắt. Dùng 100dvh.