Cách trung tâm các phần tử theo chiều dọc và chiều ngang trong Flexbox
Dưới đây là hai giải pháp định tâm chung.
Một cho các mục flex được căn chỉnh theo chiều dọc ( flex-direction: column
) và một cho các mục flex được căn chỉnh theo chiều ngang ( flex-direction: row
).
Trong cả hai trường hợp, chiều cao của div trung tâm có thể thay đổi, không xác định, không xác định, bất cứ điều gì. Chiều cao của div trung tâm không quan trọng.
Đây là HTML cho cả hai:
<div id="container"><!-- flex container -->
<div class="box" id="bluebox"><!-- flex item -->
<p>DIV #1</p>
</div>
<div class="box" id="redbox"><!-- flex item -->
<p>DIV #2</p>
</div>
</div>
CSS (không bao gồm các kiểu trang trí)
Khi các mục flex được xếp theo chiều dọc:
#container {
display: flex; /* establish flex container */
flex-direction: column; /* make main axis vertical */
justify-content: center; /* center items vertically, in this case */
align-items: center; /* center items horizontally, in this case */
height: 300px;
}
.box {
width: 300px;
margin: 5px;
text-align: center; /* will center text in <p>, which is not a flex item */
}
BẢN GIỚI THIỆU
Khi các mục flex được xếp theo chiều ngang:
Điều chỉnh flex-direction
quy tắc từ mã trên.
#container {
display: flex;
flex-direction: row; /* make main axis horizontal (default setting) */
justify-content: center; /* center items horizontally, in this case */
align-items: center; /* center items vertically, in this case */
height: 300px;
}
BẢN GIỚI THIỆU
Căn giữa nội dung của các mục flex
Phạm vi của bối cảnh định dạng flex được giới hạn trong mối quan hệ cha-con. Hậu duệ của một container flex ngoài trẻ em không tham gia vào bố trí flex và sẽ bỏ qua các thuộc tính flex. Về cơ bản, tính chất flex không được thừa kế ngoài trẻ em.
Do đó, bạn sẽ luôn cần phải áp dụng display: flex
hoặc display: inline-flex
cho một phần tử cha để áp dụng các thuộc tính flex cho trẻ.
Để văn bản trung tâm theo chiều dọc và / hoặc chiều ngang hoặc nội dung khác có trong một mục flex, hãy đặt mục đó thành một thùng chứa flex (lồng nhau) và lặp lại các quy tắc định tâm.
.box {
display: flex;
justify-content: center;
align-items: center; /* for single line flex container */
align-content: center; /* for multi-line flex container */
}
Thêm chi tiết tại đây: Làm cách nào để căn chỉnh văn bản theo chiều dọc trong một flexbox?
Ngoài ra, bạn có thể áp dụng margin: auto
cho thành phần nội dung của mục flex.
p { margin: auto; }
Tìm hiểu về auto
lề flex tại đây: Phương pháp căn chỉnh các mục Flex (xem hộp số 56).
Định tâm nhiều dòng vật phẩm flex
Khi một thùng chứa flex có nhiều dòng (do bao bọc), thuộc align-content
tính sẽ cần thiết cho việc căn chỉnh trục chéo.
Từ thông số kỹ thuật:
8.4. Đóng gói Flex Lines: align-content
tài sản
Các align-content
bất động sản Canh lề đường một container flex trong container flex khi có thêm không gian trong cross-trục, tương tự như cách justify-content
Canh lề mục riêng lẻ trong chính trục.
Lưu ý, thuộc tính này không có hiệu lực đối với thùng chứa flex dòng đơn.
Thêm chi tiết tại đây: Làm thế nào để flex-quấn hoạt động với align-self, align-item và align-content?
Hỗ trợ trình duyệt
Flexbox được hỗ trợ bởi tất cả các trình duyệt chính, ngoại trừ IE <10 . Một số phiên bản trình duyệt gần đây, như Safari 8 và IE10, yêu cầu tiền tố của nhà cung cấp . Để biết cách nhanh chóng để thêm tiền tố, hãy sử dụng Autoprefixer . Thêm chi tiết trong câu trả lời này .
Giải pháp định tâm cho các trình duyệt cũ hơn
Đối với một giải pháp định tâm thay thế bằng cách sử dụng bảng CSS và các thuộc tính định vị, hãy xem câu trả lời này: https://stackoverflow.com/a/31977476/3597276