Hãy xem xét trục chính và trục chéo của thùng chứa flex:
Nguồn: W3C
Để căn chỉnh các mục flex dọc theo trục chính, có một thuộc tính:
Để căn chỉnh các mục flex dọc theo trục chéo, có ba thuộc tính:
Trong hình trên, trục chính là ngang và trục chéo là dọc. Đây là các hướng mặc định của một container flex.
Tuy nhiên, những hướng này có thể dễ dàng thay thế với flex-direction
tài sản.
/* main axis is horizontal, cross axis is vertical */
flex-direction: row;
flex-direction: row-reverse;
/* main axis is vertical, cross axis is horizontal */
flex-direction: column;
flex-direction: column-reverse;
(Trục chéo luôn vuông góc với trục chính.)
Quan điểm của tôi khi mô tả cách thức hoạt động của các trục là dường như không có gì đặc biệt về cả hai hướng. Trục chính, trục chéo, cả hai đều bằng nhau về tầm quan trọng và flex-direction
giúp dễ dàng chuyển đổi qua lại.
Vậy tại sao trục chéo có được hai thuộc tính căn chỉnh bổ sung?
Tại sao align-content
vàalign-items
hợp nhất thành một thuộc tính cho trục chính?
Tại sao trục chính không có được một justify-self
tài sản?
Các tình huống trong đó các thuộc tính này sẽ hữu ích:
đặt một vật phẩm flex ở góc của hộp chứa flex
#box3 { align-self: flex-end; justify-self: flex-end; }
tạo một nhóm các mục flex thẳng hàng bên phải (
justify-content: flex-end
) nhưng có mục đầu tiên căn lề trái (justify-self: flex-start
)Xem xét một phần tiêu đề với một nhóm các mục điều hướng và logo. Với
justify-self
logo có thể được căn trái sang trái trong khi các mục điều hướng ở bên phải và toàn bộ điều chỉnh trơn tru ("uốn cong") với các kích thước màn hình khác nhau.trong một hàng gồm ba mục flex, gắn vật phẩm ở giữa vào giữa của container (
justify-content: center
) và căn chỉnh các mục liền kề với các cạnh của container (justify-self: flex-start
vàjustify-self: flex-end
).Lưu ý rằng các giá trị
space-around
vàspace-between
thuộcjustify-content
tính sẽ không giữ mục giữa ở giữa về vùng chứa nếu các mục liền kề có chiều rộng khác nhau.
Khi viết bài này, không có đề cập đến justify-self
hoặc justify-items
trong thông số flexbox .
Tuy nhiên, trong Mô-đun căn chỉnh hộp CSS , là đề xuất chưa hoàn thành của W3C để thiết lập một tập hợp các thuộc tính căn chỉnh chung để sử dụng trên tất cả các mô hình hộp, có:
Nguồn: W3C
Bạn sẽ nhận thấy điều đó justify-self
và justify-items
đang được xem xét ... nhưng không phải cho flexbox .
Tôi sẽ kết thúc bằng cách nhắc lại câu hỏi chính:
Tại sao không có thuộc tính "justify-items" và "justify-self"?
justify-content: flex-start
, vì vậy các mặt hàng đang đông đúc ngay từ đầu như | abcd | Điều gì sẽ bạn mong đợi nó để làm, nếu bạn đặt. justify-self: [anything]
Vào mục 'b' đó?)
justify-self
làm việc cho một mục flex? Tôi sẽ nói không quá khác biệt so với auto
lợi nhuận đã làm việc trên các mặt hàng flex. Trong ví dụ thứ hai của bạn, justify-self: flex-end
trên mục d sẽ di chuyển nó đến cạnh xa. Điều đó tự nó sẽ là một tính năng tuyệt vời, mà auto
lợi nhuận có thể đã làm. Tôi đã đăng một câu trả lời với một cuộc biểu tình.
justify-content
và justify-self
được chỉ định, để các trường hợp có xung đột (như kịch bản tôi đã hỏi) được xác định rõ ràng & hợp lý. Như tôi đã lưu ý trong câu trả lời của mình ở đây, {justify|align}-self
là về việc sắp xếp các mục trong một hộp lớn hơn có kích thước độc lập với {justify|align}-self
giá trị - và không có hộp nào như vậy, trong trục chính, để một mục flex được căn chỉnh.
justify-self
và justify-content
sẽ tương tác, trong trường hợp chúng xung đột (như các kịch bản tôi đặt ra). Lợi nhuận tự động đơn giản là không tương tác với justify-content
tất cả - chúng ăn cắp tất cả không gian đóng gói trước khi justify-content
có cơ hội sử dụng nó. Vì vậy, lề tự động không thực sự là một tương tự tốt cho cách thức hoạt động của nó.
justify-self
làm việc cho một mục flex? Giả sử bạn có các mục a, b, c, d có thêm không gian để phân phối xung quanh chúng và thùng chứa flex cójustify-content: space-between
, vì vậy chúng kết thúc như | abcd |. Điều gì có nghĩa là thêm ví dụjustify-self: center
hoặc 'justify-self: flex-end` chỉ vào mục' b 'ở đó? Bạn sẽ mong đợi nó đi đâu? (Tôi thấy một số bản demo trong một trong những câu trả lời ở đây, nhưng tôi không thấy một cách rõ ràng rằng nó sẽ hoạt động chung.)