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-direction
wł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-content
i są align-items
skonsolidowane w jedną właściwość dla głównej osi?
Dlaczego oś główna nie otrzymuje justify-self
wł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-self
logo 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-start
ijustify-self: flex-end
).Należy zauważyć, że wartości
space-around
ispace-between
najustify-content
nieruchomoś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-items
o 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-self
i justify-items
rozważ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-self
pracować dla elementu elastycznego? Powiedziałbym, że nie inaczej niż auto
marginesy, które już działają na elementach elastycznych. W drugim przykładzie justify-self: flex-end
element d przesunąłby go na drugą stronę. To samo w sobie byłoby świetną funkcją, której auto
marże mogą już zrobić. Odpowiedziałem z demonstracją.
justify-content
i justify-self
są 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}-self
chodzi o wyrównywanie elementów w większym pudełku, który ma wymiary niezależnie od {justify|align}-self
wartości - i nie ma takiego pudełka, w głównej osi, do którego mógłby zostać dopasowany element elastyczny.
justify-self
i jak byś wchodził w justify-content
interakcje, 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-content
mają szansę z niej skorzystać. Automatyczne marginesy nie są tak naprawdę dobrym analogiem do tego, jak to by działało.
justify-self
się 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.)