Thử thách & Giới hạn Flexbox
Thách thức là căn giữa một nhóm các mục linh hoạt và căn trái chúng khi bọc. Nhưng trừ khi có số lượng hộp cố định trên mỗi hàng và mỗi hộp có chiều rộng cố định, điều này hiện không thể thực hiện được với flexbox.
Sử dụng mã được đăng trong câu hỏi, chúng ta có thể tạo một vùng chứa flex mới bao bọc vùng chứa flex hiện tại ( ul
), cho phép chúng ta căn giữa ul
với justify-content: center
.
Sau đó, các mục flex của ul
có thể được căn trái với justify-content: flex-start
.
#container {
display: flex;
justify-content: center;
}
ul {
display: flex;
justify-content: flex-start;
}
Điều này tạo ra một nhóm các mục flex căn trái ở giữa.
Vấn đề với phương pháp này là ở một số kích thước màn hình nhất định sẽ có một khoảng trống ở bên phải của màn hình ul
, khiến nó không còn xuất hiện ở giữa nữa.
Điều này xảy ra bởi vì trong bố cục flex (và trên thực tế, CSS nói chung) vùng chứa:
- không biết khi nào một phần tử kết thúc;
- không biết rằng không gian bị chiếm dụng trước đây hiện đang trống và
- không tính toán lại chiều rộng của nó để thu nhỏ lại bố cục hẹp hơn.
Độ dài tối đa của khoảng trắng ở bên phải là độ dài của mục linh hoạt mà vùng chứa mong đợi ở đó.
Trong bản demo sau, bằng cách định lại kích thước cửa sổ theo chiều ngang, bạn có thể thấy khoảng trắng đến và đi.
BẢN GIỚI THIỆU
Một cách tiếp cận thực tế hơn
Có thể đạt được bố cục mong muốn mà không cần sử dụng flexbox inline-block
và các truy vấn phương tiện .
HTML
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
CSS
ul {
margin: 0 auto;
width: 1200px;
padding-left: 0;
font-size: 0;
}
li {
display: inline-block;
font-size: 18px;
list-style-type: none;
width: 150px;
height: 50px;
line-height: 50px;
margin: 15px 25px;
box-sizing: border-box;
text-align: center;
}
@media screen and (max-width: 430px) { ul { width: 200px; } }
@media screen and (min-width: 431px) and (max-width: 630px) { ul { width: 400px; } }
@media screen and (min-width: 631px) and (max-width: 830px) { ul { width:600px; } }
@media screen and (min-width: 831px) and (max-width: 1030px) { ul { width: 800px; } }
@media screen and (min-width: 1031px) and (max-width: 1230px) { ul { width: 1000px; } }
Đoạn mã trên hiển thị vùng chứa căn giữa theo chiều ngang với các phần tử con được căn trái như sau:
BẢN GIỚI THIỆU
Sự lựa chọn khác