Menu

CSS justify-content i align-items: wszystkie wartości

justify-content rozmieszcza elementy flex wzdłuż osi głównej, a align-items wzdłuż osi poprzecznej. Zobacz wszystkie wartości obok siebie, zmierzone, z klikalną siatką wyrównania, align-self i powodami, dla których justify-content czasem nic nie robi.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

justify-content i align-items w jednym zdaniu

W kontenerze flex justify-content rozkłada elementy wzdłuż osi głównej (w poprzek wiersza), a align-items ustawia je na osi poprzecznej (w górę i w dół wiersza). Obie właściwości ustawia się na kontenerze:

Pudełko jest wyśrodkowane w obu kierunkach: tak samo daleko od krawędzi początkowej i końcowej oraz od góry i dołu. Usuń height: 140px, a align-items: center nie będzie miało nic do zrobienia, bo kontener skurczy się do wysokości elementu.

Wszystkie wartości justify-content, zmierzone

Każdy wiersz poniżej to te same trzy elementy z innym justify-content. Liczby w etykiecie nad każdym wierszem to odstępy zostawione przez przeglądarkę: przed pierwszym elementem, między elementami i po ostatnim.

Kontener ma 420px, a elementy zajmują 180px, więc zostaje 240px wolnej przestrzeni. Gdzie trafia:

WartośćWolna przestrzeń trafiaOdstępy w demo
flex-start (i start)cała za elementy0 / 0 / 0 / 240
centerpołowa przed, połowa za120 / 0 / 0 / 120
flex-end (i end)cała przed elementy240 / 0 / 0 / 0
space-betweentylko między elementy0 / 120 / 120 / 0
space-aroundpo równo z obu stron każdego elementu, więc krawędzie dostają połowę40 / 80 / 80 / 40
space-evenlykażdy odstęp równy, łącznie z krawędziami60 / 60 / 60 / 60

flex-start podąża za kierunkiem flex, a start za kierunkiem pisma. Różnią się tylko przy row-reverse lub column-reverse, gdzie flex-start jest na odwróconym końcu.

Wszystkie wartości align-items

align-items działa w poprzek wiersza. Elementy poniżej mają różne wysokości, żeby było widać, co robi z nimi każda wartość:

WartośćCo dzieje się na osi poprzecznej
stretch (domyślna)Elementy bez ustawionej wysokości rosną, żeby wypełnić kontener
flex-start (i start)Elementy są u góry, z własną wysokością
centerElementy są wyśrodkowane, z własną wysokością
flex-end (i end)Elementy są na dole
baselineElementy przesuwają się tak, żeby pierwsze linijki tekstu miały wspólną linię bazową

W pudełku baseline trzy etykiety "Ag" stoją na jednej linii, choć pierwsza jest większa, a druga ma nad sobą padding. To wartość dla wiersza, który łączy duży nagłówek z małym tekstem albo etykietę z polem formularza.

Kliknij, żeby wyrównać

Kliknij dowolną komórkę siatki 3 na 3. Pudełko przesunie się tam, a poniżej pojawi się CSS, który je tam umieszcza:

Wiersze selektora zmieniają align-items, a kolumny justify-content. Środkowa komórka to klasyczne "wyśrodkowanie diva".

W kolumnie obie się zamieniają

justify-content zawsze podąża za osią główną. Przy flex-direction: column oś główna jest pionowa, więc justify-content przesuwa elementy w górę i w dół, a align-items w poprzek:

Jeśli je pomylisz, zamień obie właściwości miejscami zamiast przepisywać układ.

align-self i marginesy auto: tylko jeden element

align-self na elemencie nadpisuje align-items dla tego elementu. We flexboxie nie ma justify-self; żeby przesunąć jeden element wzdłuż osi głównej, nadaj mu margines auto, który zabiera całą wolną przestrzeń po tej stronie:

Zielony element sam opada na dół, a bursztynowy zostaje zepchnięty na sam koniec wiersza, podczas gdy pozostałe zostają na początku.

Gdy linii jest kilka: align-content

align-items wyrównuje elementy wewnątrz ich linii. Gdy kontener zawija się na kilka linii, align-content rozmieszcza same linie i przyjmuje te same wartości co justify-content. Nic nie robi w kontenerze nowrap, którego jedyna linia zawsze wypełnia wysokość kontenera. Strona o flex-wrap to pokazuje.

Częste błędy

  • Mylenie osi. justify-content to kierunek przepływu, align-items działa w poprzek niego. W kolumnie wyśrodkowanie w pionie to justify-content: center.
  • Brak wolnej przestrzeni. Element z flex: 1 zabiera całe miejsce, więc justify-content nie ma czego rozkładać. To samo dzieje się, gdy kontener ma inline-flex i jest dokładnie tak szeroki jak jego elementy.
  • Brak wysokości dla align-items. Kontener tak wysoki jak jego treść nie zostawia nic do wyrównania. Ustaw height albo min-height.
  • Szukanie justify-self we flexboxie. Jest tam ignorowane. Użyj na elemencie margin-inline-start: auto (albo margin-left: auto).
  • align-items: stretch, które nie rozciąga. Element z własnym height je zachowuje. Usuń wysokość (użyj min-height, jeśli potrzebne jest minimum).
  • Ustawianie tych właściwości na elementach. Obie idą na kontener flex. Tylko align-self ustawia się na elemencie.

Najczęściej zadawane pytania

Czym różni się justify-content od align-items?

justify-content rozkłada elementy wzdłuż osi głównej, czyli w kierunku, w którym płyną (poziomo przy flex-direction: row). align-items ustawia je wzdłuż osi poprzecznej (pionowo w wierszu). W kolumnie obie się zamieniają: justify-content działa pionowo.

Czym różnią się space-between, space-around i space-evenly?

space-between nie dodaje miejsca przed pierwszym elementem ani po ostatnim, a resztę dzieli między elementy. space-around daje każdemu elementowi tyle samo miejsca po obu stronach, więc krawędzie dostają pół odstępu. space-evenly sprawia, że każdy odstęp jest równy, łącznie z krawędziami.

Dlaczego justify-content nie działa?

Zwykle nie ma wolnej przestrzeni do rozłożenia: jakiś element ma flex-grow albo flex: 1, albo kontener jest tylko tak szeroki jak jego elementy (na przykład przy display: inline-flex lub kontenerze z float). Sprawdź też, czy display: flex jest na rodzicu, a nie na elementach.

Dlaczego align-items center nie wyśrodkowuje w pionie?

Kontener jest prawdopodobnie dokładnie tak wysoki jak jego treść, więc nie ma w czym wyśrodkowywać. Nadaj kontenerowi flex wysokość albo min-height, a elementy przesuną się na jego środek.

Co robi align-self?

align-self nadpisuje align-items kontenera dla jednego elementu. Na przykład align-self: flex-end na jednym dziecku przesuwa tylko je na koniec osi poprzecznej, a pozostałe zostają tam, gdzie umieściło je align-items.

Czy we flexboxie jest justify-self?

Nie. Flexbox ignoruje justify-self, bo oś główna jest wspólna dla wszystkich elementów. Żeby przesunąć jeden element wzdłuż osi głównej, użyj marginesu auto, na przykład margin-inline-start: auto. justify-self działa w grid.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ