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-directiontà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-directiongiú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-contentvà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-selftà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-selflogo 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-startvàjustify-self: flex-end).Lưu ý rằng các giá trị
space-aroundvàspace-betweenthuộcjustify-contenttí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-selfhoặc justify-itemstrong 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-selfvà 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-selflàm việc cho một mục flex? Tôi sẽ nói không quá khác biệt so với autolợ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-endtrê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à autolợ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}-selflà 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}-selfgiá 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-selfvà justify-contentsẽ 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-contenttất cả - chúng ăn cắp tất cả không gian đóng gói trước khi justify-contentcó 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-selflà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: centerhoặ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.)