13.9. Rozmiar niejawnych ścieżek: grid-auto-columns
i grid-auto-rows
grid-auto-columns
i grid-auto-rows
Niejawna siatka (Implicit Grid)
Gdy definiujemy siatkę za pomocą grid-template-columns
i grid-template-rows
, tworzymy tzw. **jawną siatkę (explicit grid)**.
Jednak co się dzieje, gdy:
- Mamy więcej elementów niż komórek w jawnej siatce?
- Jawnie umieścimy element poza granicami jawnej siatki (np.
grid-column: 5;
w siatce 4-kolumnowej)?
W takich sytuacjach Grid automatycznie tworzy dodatkowe linie i ścieżki (kolumny lub wiersze), aby pomieścić te elementy. Te automatycznie utworzone ścieżki tworzą **niejawną siatkę (implicit grid)**.
Domyślnie, rozmiar tych niejawnych ścieżek jest ustawiany na auto
, co oznacza, że dopasowują się one do zawartości umieszczonych w nich elementów.
Właściwości grid-auto-columns
i grid-auto-rows
pozwalają nam **kontrolować rozmiar** tych automatycznie tworzonych, niejawnych ścieżek. Stosuje się je do **kontenera Grid**.
grid-auto-columns
Definiuje rozmiar **niejawnie tworzonych kolumn** (czyli kolumn dodawanych automatycznie, gdy elementy wykraczają poza jawnie zdefiniowane kolumny, np. przy grid-auto-flow: column
lub umieszczaniu elementu w nieistniejącej kolumnie).
Przyjmuje takie same wartości jak pojedyncza ścieżka w grid-template-columns
(np. px
, %
, fr
, auto
, minmax()
).
Wartość domyślna: auto
.
.container {
display: grid;
grid-template-columns: 100px 100px; /* Jawna siatka: 2 kolumny */
grid-template-rows: 50px 50px;
grid-auto-flow: row; /* Wypełniaj wierszami */
gap: 5px;
/* Jeśli element zostanie umieszczony w 3. lub dalszej kolumnie, */
/* ta kolumna będzie miała 80px szerokości. */
grid-auto-columns: 80px;
}
.item-placed-outside {
grid-column: 4; /* Umieszczenie w niejawnej, 4. kolumnie */
grid-row: 1;
}
W tym przykładzie, jawna siatka ma 2 kolumny po 100px. Jeśli umieścimy element w 4. kolumnie, Grid utworzy niejawnie kolumnę 3 i 4. Dzięki grid-auto-columns: 80px;
, obie te niejawne kolumny (3 i 4) będą miały szerokość 80px.
grid-auto-rows
Definiuje rozmiar **niejawnie tworzonych wierszy** (czyli wierszy dodawanych automatycznie, gdy elementy wykraczają poza jawnie zdefiniowane wiersze, np. przy domyślnym grid-auto-flow: row
i większej liczbie elementów niż komórek).
Przyjmuje takie same wartości jak pojedyncza ścieżka w grid-template-rows
.
Wartość domyślna: auto
.
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: 100px; /* Jawna siatka: 1 wiersz */
grid-auto-flow: row; /* Wypełniaj wierszami (domyślnie) */
gap: 10px;
/* Wiersze tworzone automatycznie (drugi, trzeci, itd.) */
/* będą miały wysokość 60px. */
grid-auto-rows: 60px;
}
/* Jeśli dodamy np. 5 elementów, pierwsze 3 wypełnią jawny wiersz 1. */
/* Elementy 4 i 5 utworzą niejawny wiersz 2, który będzie miał 60px wysokości. */
W tym przykładzie, jawna siatka ma tylko jeden wiersz o wysokości 100px. Gdy elementy zaczną wypełniać drugi, trzeci i kolejne wiersze (niejawne), każdy z tych nowych wierszy będzie miał wysokość 60px dzięki grid-auto-rows: 60px;
.
Kiedy są używane?
grid-auto-columns
jest istotne głównie wtedy, gdy:- Używasz
grid-auto-flow: column
. - Jawnie umieszczasz element w kolumnie poza jawną siatką.
- Używasz
grid-auto-rows
jest istotne głównie wtedy, gdy:- Używasz domyślnego
grid-auto-flow: row
i masz więcej elementów niż komórek w jawnych wierszach. - Jawnie umieszczasz element w wierszu poza jawną siatką.
- Używasz domyślnego
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Stwórz jawną siatkę 2x2. Dodaj 6 elementów. Ustaw grid-auto-rows
na 40px
. Zaobserwuj wysokość trzeciego wiersza, który zostanie utworzony niejawnie.
Rozwiązanie:
HTML (6 elementów):
<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 class="item">5</div><div class="item">6</div>
</div>
CSS:
.container-task1 {
display: grid;
grid-template-columns: 1fr 1fr; /* Jawne 2 kolumny */
grid-template-rows: 60px 60px; /* Jawne 2 wiersze */
grid-auto-rows: 40px; /* Niejawne wiersze będą miały 40px */
gap: 5px;
border: 1px solid black;
}
.item {
background-color: lightblue;
border: 1px solid navy;
display: flex; justify-content: center; align-items: center;
}
Efekt: Elementy 1-4 wypełnią jawną siatkę 2x2 (wiersze 1 i 2 o wysokości 60px). Elementy 5 i 6 utworzą niejawny wiersz 3, który będzie miał wysokość 40px zgodnie z grid-auto-rows
.
Zadanie 2 (do samodzielnego wykonania)
Stwórz jawną siatkę 2x2. Ustaw grid-auto-flow: column;
. Dodaj 5 elementów. Ustaw grid-auto-columns
na 1fr
. Zaobserwuj szerokość trzeciej, niejawnie utworzonej kolumny.
Zadanie 3 (do samodzielnego wykonania)
Stwórz jawną siatkę 3x1. Dodaj 4 elementy. Ustaw grid-auto-rows
na minmax(50px, auto)
. Zaobserwuj wysokość drugiego, niejawnego wiersza (powinien mieć co najmniej 50px, ale dostosować się do zawartości, jeśli jest wyższa).
FAQ - Najczęściej zadawane pytania
Jakie są domyślne wartości grid-auto-columns
i grid-auto-rows
?
Domyślną wartością dla obu właściwości jest auto
. Oznacza to, że niejawnie tworzone ścieżki domyślnie dopasowują swój rozmiar do zawartości umieszczonych w nich elementów.
Czy mogę użyć repeat()
w grid-auto-columns
/rows
?
Nie, funkcja repeat()
jest przeznaczona do użycia tylko w grid-template-columns
i grid-template-rows
do definiowania jawnej siatki. Właściwości grid-auto-*
przyjmują tylko definicję pojedynczej ścieżki, która będzie stosowana do wszystkich niejawnie tworzonych ścieżek.
Czy grid-auto-columns
/rows
wpływają na jawną siatkę?
Nie, te właściwości definiują rozmiar tylko tych kolumn i wierszy, które są tworzone **automatycznie** (niejawnie) przez Grid, gdy elementy wykraczają poza jawną siatkę zdefiniowaną przez grid-template-columns
i grid-template-rows
.
Czy mogę ustawić różne rozmiary dla różnych niejawnych ścieżek?
Nie bezpośrednio za pomocą grid-auto-columns
lub grid-auto-rows
. Te właściwości ustawiają jeden, spójny rozmiar dla **wszystkich** niejawnie tworzonych kolumn lub wierszy. Jeśli potrzebujesz bardziej złożonej kontroli nad rozmiarem ścieżek poza początkową jawną siatką, zazwyczaj lepiej jest rozszerzyć definicję jawnej siatki.