Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Phương pháp căn chỉnh các mục linh hoạt dọc theo trục chính

Như đã nêu trong câu hỏi :

Để căn chỉnh các mục flex dọc theo trục chính, có một thuộc tính: justify-content

Để sắp xếp các mặt hàng flex dọc theo trục chéo có ba thuộc tính: align-content, align-itemsalign-self .

Câu hỏi sau đó hỏi:

Tại sao không có justify-itemsjustify-selftài sản?

Một câu vấn đáp hoàn toàn có thể là : Bởi vì chúng không thiết yếu .Đặc tả flexbox cung ứng hai giải pháp để chỉnh sửa những mục flex dọc theo trục chính :

  1. Các justify-contentbất động sản từ khóa, và
  2. auto lề

nội dung biện minh

Các justify-contenttài sản gắn mục flex dọc theo trục chính của container flex.

Nó được vận dụng cho container flex nhưng chỉ ảnh hưởng tác động đến những mục flex .Có năm tùy chọn chỉnh sửa :

  • flex-start ~ Các mặt hàng Flex được đóng gói vào đầu dòng.

    Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

  • flex-end ~ Các mặt hàng Flex được đóng gói vào cuối dòng.

    Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

  • center ~ Các mặt hàng Flex được đóng gói về phía trung tâm của dòng.

    Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

  • space-between~ Các mặt hàng Flex được đặt cách đều nhau, với mặt hàng đầu tiên được căn chỉnh theo một cạnh của thùng chứa và mặt hàng cuối cùng được căn chỉnh theo cạnh đối diện. Các cạnh được sử dụng bởi các mục đầu tiên và cuối cùng phụ thuộc vào flex-directionvà chế độ viết ( ltrhoặc rtl).

    Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

  • space-around~ Tương tự như space-betweenngoại trừ với không gian nửa kích thước ở cả hai đầu.

    Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Lợi nhuận tự động

Với autolề, các mục flex có thể được căn giữa, cách nhau hoặc đóng gói thành các nhóm phụ.

Không giống như justify-content, được áp dụng cho container flex, autolề đi vào các mục flex.

Họ thao tác bằng cách tiêu thụ tổng thể khoảng trống trống theo hướng được chỉ định .

Sắp xếp nhóm các mục flex ở bên phải, nhưng mục đầu tiên bên trái

Kịch bản từ câu hỏi :

  • tạo một nhóm các mục flex thẳng hàng 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 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 CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Các kịch bản hữu ích khác:

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Đặt một mục flex trong góc

Kịch bản từ câu hỏi :

  • đặt một vật phẩm flex ở một góc .box { align-self: flex-end; justify-self: flex-end; }

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Trung tâm một mục flex theo chiều dọc và chiều ngang

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

margin: autolà một thay thế cho justify-content: centeralign-items: center.

Thay vì mã này trên container flex :

.container{justify-content:center;align-items:center;}

Bạn hoàn toàn có thể sử dụng điều này trên mục flex :

.box56{margin:auto;}

Sự thay thế này rất hữu ích khi căn giữa một vật phẩm flex tràn vào thùng chứa .

Căn giữa một mục flex và căn giữa một mục flex thứ hai giữa cạnh thứ nhất và cạnh

Một container flex sắp xếp những mục flex bằng cách phân phối khoảng trống trống .Do đó, để tạo ra sự cân đối như nhau, để một vật phẩm ở giữa hoàn toàn có thể được căn giữa trong vật chứa với một vật phẩm duy nhất bên cạnh, một đối trọng phải được đưa ra .Trong những ví dụ dưới đây, những mục flex thứ ba vô hình dung ( hộp 61 và 68 ) được trình làng để cân đối những mục ” thực ” ( hộp 63 và 66 ) .

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Tất nhiên, giải pháp này không có gì tuyệt vời về mặt ngữ nghĩa .

Ngoài ra, bạn có thể sử dụng phần tử giả thay vì phần tử DOM thực tế. Hoặc bạn có thể sử dụng định vị tuyệt đối. Tất cả ba phương pháp được đề cập ở đây: Các mục flex căn giữa và dưới cùng

LƯU Ý : Các ví dụ trên sẽ chỉ hoạt động giải trí – về mặt định tâm thực sự – khi những mục ngoài cùng có chiều cao / chiều rộng bằng nhau. Khi những mục flex có độ dài khác nhau, xem ví dụ tiếp theo .

Trung tâm một mục flex khi các mục liền kề khác nhau về kích thước

Kịch bản từ câu hỏi :

  • 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-startjustify-self: flex-end).

    Lưu ý rằng các giá trị space-aroundspace-betweenthuộc justify-contenttính sẽ không giữ mục giữa ở giữa liên quan đến vùng chứa nếu các mục liền kề có chiều rộng khác nhau ( xem bản demo ).

Như đã lưu ý, trừ khi tất cả các mục flex có chiều rộng hoặc chiều cao bằng nhau (tùy thuộc vào flex-direction), mục giữa không thể thực sự được căn giữa. Vấn đề này làm cho một trường hợp mạnh mẽ cho một justify-selftài sản (tất nhiên được thiết kế để xử lý các nhiệm vụ).

Hiển thị đoạn mã

#container{display:flex;justify-content:space-between;background-color:lightyellow;}.box{height:50 px;width:75 px;background-color:springgreen;}.box1{width:100 px;}.box3{width:200 px;}#center{text-align:center;margin-bottom:5 px;}#center>span{background-color:aqua;padding:2 px;}

id=" center "

>

TRUE CENTER

id=” container “>

class=” box box1 “>

class=” box box2 “>

class=” box box3 “>

The middle box will be truly centered only if adjacent boxes are equal width .

Đây là hai giải pháp để xử lý yếu tố này :

Giải pháp số 1: Định vị tuyệt đối

Thông số kỹ thuật flexbox được cho phép xác định tuyệt đối những mục flex. Điều này được cho phép vật phẩm ở giữa được căn giữa một cách hoàn hảo nhất bất kể kích cỡ của anh chị em của nó .Chỉ cần quan tâm rằng, giống như toàn bộ những yếu tố được xác định tuyệt đối, những mục được xóa khỏi luồng tài liệu. Điều này có nghĩa là họ không chiếm khoảng trống trong container và hoàn toàn có thể chồng lên anh chị em của họ .

Trong các ví dụ dưới đây, mục giữa được căn giữa với định vị tuyệt đối và các mục bên ngoài vẫn trong dòng. Nhưng cách bố trí tương tự có thể đạt được theo kiểu ngược lại: Căn giữa mục giữa justify-content: centervà hoàn toàn định vị các mục bên ngoài.

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

Giải pháp số 2: Container linh hoạt lồng nhau (không định vị tuyệt đối)

.container{display:flex;}.box{flex:1;display:flex;justify-content:center;}.box71>span{margin-right:auto;}.box73>span{margin-left:auto;}/ * non-essential * /.box{align-items:center;border:1 pxsolid# ccc;background-color:lightgreen;height:40 px;}

class=" container ">

class=" box box71 "

>

71 short

class=” box box72 “

>

72 centered

class=” box box73 “

>

73 loooooooooooooooong

Đây là cách nó hoạt động giải trí :

  • Div cấp cao nhất ( .container) là một thùng chứa flex.
  • Mỗi div div ( .box) bây giờ là một mục flex.
  • Mỗi .boxmục được đưa flex: 1ra để phân phối không gian container bằng nhau.
  • Bây giờ các mục đang tiêu thụ tất cả không gian trong hàng và có chiều rộng bằng nhau.
  • Làm cho mỗi mục một thùng chứa flex (lồng nhau) và thêm justify-content: center.
  • Bây giờ mỗi spanphần tử là một mục flex trung tâm.
  • Sử dụng autolề flex để dịch chuyển spans bên trái và bên phải.

Bạn cũng có thể từ bỏ justify-contentvà sử dụng autolợi nhuận độc quyền.

Nhưng justify-contentcó thể làm việc ở đây vì autolợi nhuận luôn được ưu tiên. Từ thông số kỹ thuật:

8.1. Căn chỉnh với auto lề

Trước khi căn chỉnh thông qua justify-contentalign-self, mọi không gian trống tích cực sẽ được phân phối cho các lề tự động theo chiều đó.

justify-content: space-same (khái niệm)

Quay trở lại justify-contenttrong một phút, đây là một ý tưởng cho một lựa chọn khác.

  • space-same~ Một sự kết hợp của space-betweenspace-around. Các mục Flex được đặt cách đều nhau (như space-between), ngoại trừ thay vì khoảng trống một nửa ở cả hai đầu (như space-around), có không gian kích thước đầy đủ ở cả hai đầu.

Bố cục này có thể đạt được với ::before::aftercác phần tử giả trên thùng chứa flex.

Trong CSS Flexbox, tại sao không có các thuộc tính của justify-vật phẩm nào?

( tín dụng thanh toán : @ oriol cho mã và @ crl cho nhãn )

CẬP NHẬT: Các trình duyệt đã bắt đầu thực hiện space-evenly, thực hiện các điều trên. Xem bài đăng này để biết chi tiết: Không gian bằng nhau giữa các mục flex

PLAYGROUND (bao gồm mã cho tất cả các ví dụ ở trên)