13.11. Wyrównanie w komórce: justify-items i align-items
justify-items i align-items
Wyrównanie zawartości elementu Grid
Do tej pory skupialiśmy się na definiowaniu struktury siatki i umieszczaniu w niej elementów Grid. Teraz zajmiemy się tym, jak **zawartość** elementu Grid jest wyrównywana **wewnątrz obszaru siatki**, który ten element zajmuje (czyli wewnątrz jego komórki lub grupy komórek).
Do tego służą właściwości justify-items i align-items, stosowane do **kontenera Grid**. Kontrolują one domyślne wyrównanie **wszystkich** elementów potomnych w ich odpowiednich obszarach siatki.
justify-items: Wyrównuje elementy wzdłuż **osi rzędów (inline axis)** wewnątrz ich obszaru siatki.align-items: Wyrównuje elementy wzdłuż **osi kolumn (block axis)** wewnątrz ich obszaru siatki.
Pomyśl o tym jak o ustawieniu domyślnego zachowania dla wszystkich komórek w siatce.
Wartości justify-items i align-items
Obie właściwości przyjmują te same cztery główne wartości:
stretch(wartość domyślna): Element rozciąga się, aby wypełnić cały dostępny obszar siatki w danej osi.start: Element jest wyrównywany do **początku** obszaru siatki w danej osi (do lewej dlajustify-items, do góry dlaalign-itemsw typowym układzie LTR).end: Element jest wyrównywany do **końca** obszaru siatki w danej osi (do prawej dlajustify-items, do dołu dlaalign-items).center: Element jest wyśrodkowany w obszarze siatki w danej osi.- (Istnieją też inne wartości jak
baseline,left,right, alestart,end,center,stretchsą najczęściej używane i bardziej uniwersalne).
Przykład użycia
<div class="container">
<div class="item">Element 1</div>
<div class="item">Element 2</div>
<div class="item">Element 3</div>
<div class="item">Element 4</div>
</div>
.container {
display: grid;
grid-template-columns: 120px 120px;
grid-template-rows: 80px 80px;
gap: 10px;
border: 1px solid black;
/* Wyrównanie dla wszystkich elementów */
justify-items: center; /* Wyśrodkuj w poziomie w komórkach */
align-items: end; /* Wyrównaj do dołu w komórkach */
}
.item {
background-color: lightblue;
border: 1px solid navy;
padding: 5px; /* Dodajemy padding, aby zobaczyć efekt wyrównania */
/* Domyślnie elementy byłyby rozciągnięte (stretch) */
}
Efekt wizualny:
Wszystkie elementy są teraz wyśrodkowane w poziomie (justify-items: center;) i wyrównane do dolnej krawędzi (align-items: end;) swoich komórek siatki.
Gdybyśmy nie ustawili justify-items i align-items, domyślnie obowiązywałoby stretch i elementy (a dokładniej ich tło i obramowanie) wypełniłyby całe komórki.
Wpływ na rozmiar elementu
Wartości inne niż stretch powodują, że element kurczy się do rozmiaru swojej zawartości (lub rozmiaru jawnie ustawionego za pomocą width/height) w danej osi, a następnie jest przesuwany na początek, koniec lub środek dostępnego miejsca w komórce.
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Stwórz siatkę 2x2. Ustaw, aby wszystkie elementy były wyrównane do prawej strony (koniec osi rzędów) i do środka w pionie (środek osi kolumn) w swoich komórkach.
Rozwiązanie:
HTML (4 elementy):
<div class="container-task1">
<div class="item">1</div><div class="item">2</div>
<div class="item">3</div><div class="item">4</div>
</div>
CSS:
.container-task1 {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 70px 70px;
gap: 5px;
border: 1px solid black;
justify-items: end; /* Wyrównaj do prawej */
align-items: center; /* Wyśrodkuj w pionie */
}
.item {
background-color: lightcoral;
border: 1px solid darkred;
padding: 8px;
}
Efekt: Wszystkie elementy będą przytulone do prawej krawędzi swoich komórek i wyśrodkowane w pionie.
Zadanie 2 (do samodzielnego wykonania)
Stwórz siatkę 3x1. Ustaw, aby elementy były wyrównane do lewej (start) w poziomie i rozciągnięte (stretch) w pionie.
Zadanie 3 (do samodzielnego wykonania)
Stwórz siatkę 1x3. Ustaw, aby elementy były wyśrodkowane zarówno w poziomie, jak i w pionie.
FAQ - Najczęściej zadawane pytania
Jaka jest różnica między justify-items a justify-content?
To częste źródło pomyłek! justify-items (i align-items) wyrównuje **poszczególne elementy Grid wewnątrz ich komórek**. Natomiast justify-content (i align-content), które omówimy w następnej lekcji, wyrównuje **całą siatkę (wszystkie ścieżki) wewnątrz kontenera Grid**, gdy jest w nim wolne miejsce.
Czy mogę ustawić inne wyrównanie dla konkretnego elementu?
Tak! Właściwości justify-items i align-items ustawiają domyślne wyrównanie dla wszystkich elementów w kontenerze. Możesz nadpisać to domyślne zachowanie dla **konkretnego elementu Grid** za pomocą właściwości justify-self i align-self, które omówimy później.
Co oznacza oś rzędów (inline) i oś kolumn (block)?
W typowym układzie (języki pisane od lewej do prawej, od góry do dołu), **oś rzędów (inline axis)** biegnie poziomo, a **oś kolumn (block axis)** biegnie pionowo. justify-items działa wzdłuż osi rzędów, a align-items wzdłuż osi kolumn.
Czy stretch zawsze rozciąga element?
stretch rozciąga element, aby wypełnił obszar siatki, **chyba że** element ma jawnie ustawiony rozmiar (np. width dla justify-items lub height dla align-items) lub jego naturalny rozmiar (np. obrazka) jest mniejszy niż dostępna przestrzeń. W takich przypadkach stretch zachowuje się jak start.