Rozważ główną oś i oś poprzeczną elastycznego pojemnika:
Źródło: W3C
Aby wyrównać elementy elastyczne wzdłuż głównej osi, istnieje jedna właściwość:
Aby wyrównać elementy elastyczne wzdłuż osi poprzecznej, istnieją trzy właściwości:
Na powyższym zdjęciu główna oś jest pozioma, a oś poprzeczna pionowa. Są to domyślne kierunki elastycznego kontenera.
Jednak te kierunki można łatwo zamieniać z flex-directionwłaściwością.
/* 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;
(Oś poprzeczna jest zawsze prostopadła do osi głównej.)
Chodzi mi o to, żeby opisać, jak działają osie, że wydaje się, że w żadnym kierunku nie ma nic specjalnego. Oś główna, oś poprzeczna, oba są równe pod względem ważności iflex-direction ułatwiają przełączanie w przód iw tył.
Dlaczego więc oś poprzeczna ma dwie dodatkowe właściwości wyrównania?
Dlaczego align-contenti są align-itemsskonsolidowane w jedną właściwość dla głównej osi?
Dlaczego oś główna nie otrzymuje justify-selfwłaściwości?
Scenariusze, w których te właściwości byłyby przydatne:
umieszczenie elementu elastycznego w rogu pojemnika elastycznego
#box3 { align-self: flex-end; justify-self: flex-end; }tworzenie grupy elementów elastycznych wyrównywanie do prawej (
justify-content: flex-end), ale pierwszy element wyrównywanie do lewej (justify-self: flex-start)Rozważ sekcję nagłówka z grupą elementów nawigacyjnych i logo. Dzięki
justify-selflogo można wyrównać w lewo, podczas gdy elementy nawigacyjne pozostają daleko w prawo, a całość płynnie dostosowuje się („wygina”) do różnych rozmiarów ekranu.w rzędzie trzech elastycznych elementów przymocuj środkowy element do środka pojemnika (
justify-content: center) i wyrównaj sąsiednie przedmioty do krawędzi pojemnika (justify-self: flex-startijustify-self: flex-end).Należy zauważyć, że wartości
space-aroundispace-betweennajustify-contentnieruchomości nie będzie utrzymywać pozycję środkową skupia około pojemnika jeśli sąsiednie elementy mają różne szerokości.
W tym piśmie nie ma wzmianki o specyfikacji Flexboxjustify-self ani justify-itemso niej .
Jednak w CSS Box Alignment Module , który jest niedokończoną propozycją W3C dotyczącą ustanowienia wspólnego zestawu właściwości wyrównania do użytku we wszystkich modelach pudełek, jest to:
Źródło: W3C
Zauważysz to justify-selfi justify-itemsrozważasz ... ale nie dla Flexboksa .
Na koniec powtórzę główne pytanie:
Dlaczego nie ma właściwości „justify-items” i „justify-self”?
justify-content: flex-start, więc elementy są na początku zatłoczone, jak | abcd |. Czego byś się spodziewał, gdybyś włożył tam justify-self: [anything]przedmiot „b”?)
justify-selfpracować dla elementu elastycznego? Powiedziałbym, że nie inaczej niż automarginesy, które już działają na elementach elastycznych. W drugim przykładzie justify-self: flex-endelement d przesunąłby go na drugą stronę. To samo w sobie byłoby świetną funkcją, której automarże mogą już zrobić. Odpowiedziałem z demonstracją.
justify-contenti justify-selfsą określone tak, że przypadki konfliktów (jak scenariuszach Pytałem o) są jasno i rozsądnie zdefiniowane. Jak zauważyłem w mojej odpowiedzi tutaj, {justify|align}-selfchodzi o wyrównywanie elementów w większym pudełku, który ma wymiary niezależnie od {justify|align}-selfwartości - i nie ma takiego pudełka, w głównej osi, do którego mógłby zostać dopasowany element elastyczny.
justify-selfi jak byś wchodził w justify-contentinterakcje, w przypadkach, gdy są one sprzeczne (np. Scenariusze, które przedstawiłem). Automatyczne marginesy po prostu w ogóle nie wchodzą w interakcje justify-content- kradną całą przestrzeń pakowania, zanim justify-contentmają szansę z niej skorzystać. Automatyczne marginesy nie są tak naprawdę dobrym analogiem do tego, jak to by działało.



















justify-selfsię pracować dla elementu elastycznego? Załóżmy, że masz przedmioty a, b, c, d z dodatkową przestrzenią do rozmieszczenia wokół nich, a elastyczny pojemnik majustify-content: space-between, więc kończą jak | abcd |. Co oznaczałoby dodanie np.justify-self: center„Justify-self: flex-end” tylko do pozycji „b”? Gdzie byś się spodziewał? (Widzę kilka wersji demonstracyjnych w jednej z odpowiedzi tutaj, ale nie widzę jasnego sposobu, aby to w ogóle działało.)