Kurs HTML

13.9. Rozmiar niejawnych ścieżek: grid-auto-columns i grid-auto-rows

Strona główna > Kurs CSS > Rozdział 13: Grid Layout > Rozmiar niejawnych ścieżek: 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ą.
  • 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ą.

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.