Kurs HTML

13.3. Odstępy w siatce: grid-gap, grid-column-gap, grid-row-gap

Strona główna > Kurs CSS > Rozdział 13: Grid Layout > Odstępy w siatce: grid-gap, grid-column-gap, grid-row-gap

Definiowanie przestrzeni między ścieżkami (Rynny/Gutters)

Po zdefiniowaniu kolumn i wierszy siatki za pomocą grid-template-columns i grid-template-rows, często chcemy dodać przestrzeń **między** tymi ścieżkami, aby elementy siatki nie stykały się ze sobą. Te przestrzenie nazywane są **rynienkami** (gutters) lub po prostu odstępami.

CSS Grid Layout dostarcza dedykowanych właściwości do kontrolowania tych odstępów, stosowanych do **kontenera Grid**:

  • grid-column-gap: Definiuje rozmiar odstępu (rynny) **między kolumnami**.
  • grid-row-gap: Definiuje rozmiar odstępu (rynny) **między wierszami**.
  • grid-gap (lub nowsza, preferowana nazwa gap): Skrócona właściwość do jednoczesnego ustawienia odstępów między wierszami i kolumnami.

Ważna uwaga: W nowszych specyfikacjach CSS nazwy tych właściwości zostały ujednolicone i uproszczone. Obecnie zaleca się używanie:

  • column-gap zamiast grid-column-gap
  • row-gap zamiast grid-row-gap
  • gap zamiast grid-gap

Te nowsze nazwy działają zarówno w Grid Layout, jak i we Flexboxie (dla odstępów między elementami flex w kontenerach wieloliniowych). Przeglądarki nadal wspierają stare nazwy (grid-*) dla kompatybilności wstecznej, ale w nowym kodzie lepiej używać column-gap, row-gap i gap.

column-gap (dawniej grid-column-gap)

Ustawia rozmiar odstępu wyłącznie między kolumnami siatki. Przyjmuje wartość długości (np. px, em, %).

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  column-gap: 20px; /* Odstęp 20px tylko między kolumnami */
  /* grid-row-gap: 0; (domyślnie) */
}

Odstęp pojawi się tylko między kolumną 1 a 2 oraz między kolumną 2 a 3. Nie będzie odstępu przed pierwszą ani za ostatnią kolumną.

row-gap (dawniej grid-row-gap)

Ustawia rozmiar odstępu wyłącznie między wierszami siatki. Przyjmuje wartość długości (np. px, em, %).

.container {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 100px 100px;
  row-gap: 1em; /* Odstęp 1em tylko między wierszami */
  /* column-gap: 0; (domyślnie) */
}

Odstęp pojawi się tylko między wierszem 1 a 2. Nie będzie odstępu nad pierwszym ani pod ostatnim wierszem.

gap (dawniej grid-gap) - Skrót

Jest to skrócona właściwość, która pozwala ustawić row-gap i column-gap jednocześnie.

  • Jedna wartość: Jeśli podasz jedną wartość (np. gap: 15px;), zostanie ona zastosowana zarówno do row-gap, jak i column-gap.
  • Dwie wartości: Jeśli podasz dwie wartości (np. gap: 10px 20px;), pierwsza wartość ustawia row-gap (odstęp między wierszami), a druga wartość ustawia column-gap (odstęp między kolumnami).
/* Odstęp 15px między wierszami ORAZ między kolumnami */
.container-1 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(2, 100px);
  gap: 15px; 
}

/* Odstęp 10px między wierszami i 20px między kolumnami */
.container-2 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(2, 100px);
  gap: 10px 20px; 
}

Używanie skrótu gap jest zazwyczaj bardziej zwięzłe i czytelne.

Wizualizacja odstępów

Poniższy przykład pokazuje siatkę 2x2 z odstępami zdefiniowanymi za pomocą gap:

<div class="gap-example">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
</div>
.gap-example {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 80px 80px;
  gap: 10px 20px; /* 10px między wierszami, 20px między kolumnami */
  border: 1px solid black;
  padding: 10px; /* Padding kontenera, nie mylić z gap */
  background-color: #f0f0f0; /* Tło kontenera, aby było widać odstępy */
}

.gap-example .item {
  background-color: lightcoral;
  border: 1px solid darkred;
  display: flex; /* Dla wyśrodkowania tekstu */
  justify-content: center;
  align-items: center;
  font-size: 1.5em;
}

Efekt wizualny:

1
2
3
4

Zwróć uwagę, że odstępy (szare tło kontenera) pojawiają się tylko **między** elementami siatki, a nie na krawędziach kontenera.

Zadania praktyczne

Zadanie 1 (z rozwiązaniem)

Stwórz siatkę 3x3 z równymi kolumnami i wierszami o wysokości 60px. Użyj właściwości gap, aby ustawić odstęp 10px zarówno między wierszami, jak i kolumnami.

Rozwiązanie:

HTML (9 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 class="item">7</div><div class="item">8</div><div class="item">9</div>
</div>

CSS:

.container-task1 {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 3 równe kolumny */
  grid-template-rows: repeat(3, 60px); /* 3 wiersze po 60px */
  gap: 10px; /* Odstęp 10px w obu kierunkach */
  border: 1px solid black;
  width: 300px; /* Przykładowa szerokość */
  background-color: #f0f0f0;
}

.item {
  background-color: lightblue;
  border: 1px solid navy;
  display: flex; justify-content: center; align-items: center;
}

Efekt: Siatka 3x3 z elementami oddzielonymi od siebie o 10px.

Zadanie 2 (do samodzielnego wykonania)

Stwórz siatkę 2x2. Użyj row-gap, aby ustawić odstęp 30px między wierszami, i column-gap, aby ustawić odstęp 5px między kolumnami.

Zadanie 3 (do samodzielnego wykonania)

Stwórz siatkę 4x2. Użyj skróconej właściwości gap, aby ustawić odstęp 0 między wierszami i 1em między kolumnami.

FAQ - Najczęściej zadawane pytania

Czy gap dodaje odstęp na krawędziach kontenera?

Nie, właściwości gap, column-gap i row-gap dodają odstępy **tylko między** ścieżkami (kolumnami lub wierszami) siatki. Nie tworzą one odstępu między krawędzią kontenera a pierwszą/ostatnią ścieżką. Do tego celu należy użyć właściwości padding na kontenerze Grid.

Czy mogę używać procentów w gap?

Tak, można używać wartości procentowych w gap, column-gap i row-gap. Procenty te odnoszą się do odpowiedniego wymiaru kontenera Grid (szerokości dla column-gap, wysokości dla row-gap).

Jakie są domyślne wartości odstępów?

Domyślną wartością dla gap, column-gap i row-gap jest 0. Oznacza to, że domyślnie nie ma żadnych odstępów między ścieżkami siatki.

Czy gap działa we Flexboxie?

Tak, nowsza właściwość gap (oraz row-gap i column-gap) działa również we Flexboxie dla kontenerów wieloliniowych (z flex-wrap: wrap lub flex-wrap: wrap-reverse), definiując odstępy między elementami flex. Jest to wygodniejsza alternatywa dla stosowania marginesów na elementach flex w celu uzyskania odstępów.