13.3. Odstępy w siatce: grid-gap
, grid-column-gap
, grid-row-gap
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 nazwagap
): 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
zamiastgrid-column-gap
row-gap
zamiastgrid-row-gap
gap
zamiastgrid-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 dorow-gap
, jak icolumn-gap
. - Dwie wartości: Jeśli podasz dwie wartości (np.
gap: 10px 20px;
), pierwsza wartość ustawiarow-gap
(odstęp między wierszami), a druga wartość ustawiacolumn-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:
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.