Kurs HTML

13.5. Skrócone właściwości: grid-column i grid-row

Strona główna > Kurs CSS > Rozdział 13: Grid Layout > Skrócone właściwości: grid-column i grid-row

Wprowadzenie: Zwięzłe definiowanie położenia

W poprzedniej lekcji nauczyliśmy się używać właściwości grid-column-start, grid-column-end, grid-row-start i grid-row-end do precyzyjnego umieszczania elementów w siatce za pomocą numerów linii.

CSS Grid Layout oferuje również dwie **skrócone właściwości (shorthands)**, które pozwalają zdefiniować zarówno linię startową, jak i końcową dla kolumn lub wierszy w jednej deklaracji:

  • grid-column: Skrót dla grid-column-start i grid-column-end.
  • grid-row: Skrót dla grid-row-start i grid-row-end.

Używanie tych skrótów sprawia, że kod CSS jest bardziej zwięzły i często łatwiejszy do odczytania. Stosuje się je do **elementu Grid**.

Składnia grid-column i grid-row

Obie właściwości przyjmują jedną lub dwie wartości oddzielone ukośnikiem (/).

grid-column: <start-line> [ / <end-line> ]?;
grid-row: <start-line> [ / <end-line> ]?;
  • <start-line>: Wartość dla grid-column-start lub grid-row-start. Może to być numer linii, nazwa linii (omówimy później) lub słowo kluczowe span.
  • <end-line> (opcjonalna): Wartość dla grid-column-end lub grid-row-end. Może to być numer linii, nazwa linii lub słowo kluczowe span wraz z liczbą.

Interpretacja:

  • Jedna wartość: Jeśli podasz tylko jedną wartość (np. grid-column: 2;), ustawia ona tylko linię startową (grid-column-start: 2;). Linia końcowa przyjmuje domyślną wartość auto, co zazwyczaj oznacza rozpiętość jednej ścieżki (span 1).
  • Dwie wartości oddzielone ukośnikiem: Jeśli podasz dwie wartości (np. grid-column: 2 / 4;), pierwsza ustawia linię startową (grid-column-start: 2;), a druga linię końcową (grid-column-end: 4;).
  • Użycie span: Można używać span zarówno dla linii startowej (choć rzadziej), jak i końcowej.
    • grid-column: span 2; jest równoważne grid-column-start: auto; grid-column-end: span 2; (zajmij 2 kolumny, zaczynając od automatycznie znalezionej pozycji).
    • grid-column: 2 / span 3; jest równoważne grid-column-start: 2; grid-column-end: span 3; (zacznij od linii 2, zajmij 3 kolumny).

Przykłady użycia skrótów

Rozważmy siatkę 4x3 z poprzedniej lekcji.

.container {
  display: grid;
  grid-template-columns: repeat(4, 1fr); 
  grid-template-rows: repeat(3, 100px); 
  gap: 10px;
  border: 1px solid black;
}

.item {
  background-color: lightblue;
  border: 1px solid navy;
}

/* Poprzednio: */
/* .item-1 { */
/*   grid-column-start: 2; */
/*   grid-column-end: 4; */
/*   grid-row-start: 1; */
/*   grid-row-end: 3; */
/* } */

/* Używając skrótów: */
.item-1 {
  background-color: lightcoral;
  grid-column: 2 / 4; /* Zacznij na linii 2, zakończ na linii 4 */
  grid-row: 1 / 3;    /* Zacznij na linii 1, zakończ na linii 3 */
}

/* Poprzednio: */
/* .item-2 { */
/*   grid-column-start: 1; */
/*   grid-column-end: 2; */
/*   grid-row-start: 3; */
/*   grid-row-end: 4; */
/* } */

/* Używając skrótów: */
.item-2 {
  background-color: lightgreen;
  grid-column: 1 / 2; /* Linia 1 do 2 */
  grid-row: 3 / 4;    /* Linia 3 do 4 */
}

/* Używając span w skrócie */
.item-3 {
  background-color: lightyellow;
  grid-column: 1 / span 2; /* Zacznij na linii 1, zajmij 2 kolumny */
  grid-row: 2 / span 1;    /* Zacznij na linii 2, zajmij 1 wiersz */
}

/* Tylko linia startowa (domyślnie span 1) */
.item-4 {
  background-color: pink;
  grid-column: 4; /* Równoważne grid-column: 4 / span 1; */
  grid-row: 3;    /* Równoważne grid-row: 3 / span 1; */
}

Jak widać, kod staje się znacznie krótszy i potencjalnie bardziej czytelny, gdy używamy skrótów grid-column i grid-row.

Zadania praktyczne

Zadanie 1 (z rozwiązaniem)

Stwórz siatkę 3x3. Użyj skróconej właściwości grid-column, aby umieścić element w drugiej kolumnie (zajmując tylko tę jedną kolumnę).

Rozwiązanie:

HTML:

<div class="container-task1">
  <div class="item">Element</div>
</div>

CSS:

.container-task1 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 60px);
  gap: 5px;
  border: 1px solid black;
}

.item {
  background-color: lightcoral;
  border: 1px solid darkred;
  /* Umieść w drugiej kolumnie (linie 2 do 3) */
  grid-column: 2 / 3; 
  /* Lub po prostu: grid-column: 2; (domyślnie span 1) */

  /* Domyślnie zajmie pierwszy wiersz (grid-row: 1 / 2;) */
}

Efekt: Element pojawi się w drugiej kolumnie i pierwszym wierszu siatki.

Zadanie 2 (do samodzielnego wykonania)

Stwórz siatkę 4x2. Użyj skróconych właściwości grid-column i grid-row, aby element zajmował kolumny od 2 do 4 oraz oba wiersze.

Zadanie 3 (do samodzielnego wykonania)

Stwórz siatkę 5x5. Użyj skróconych właściwości i słowa kluczowego span, aby element zaczynał się w drugiej kolumnie i zajmował 3 kolumny, oraz zaczynał się w drugim wierszu i zajmował 2 wiersze.

Zadanie 4 (do samodzielnego wykonania)

Stwórz siatkę 3x4. Użyj skróconych właściwości i ujemnych numerów linii, aby element zajmował ostatnie dwie kolumny i ostatnie dwa wiersze.

FAQ - Najczęściej zadawane pytania

Czy ukośnik (/) jest obowiązkowy przy dwóch wartościach?

Tak, jeśli chcesz podać zarówno linię startową, jak i końcową (lub rozpiętość span dla linii końcowej), musisz użyć ukośnika jako separatora, np. grid-column: 1 / 3; lub grid-column: 2 / span 2;.

Co jeśli podam tylko grid-column: span 2;?

W tym przypadku linia startowa przyjmuje wartość auto, a linia końcowa jest ustawiona na span 2. Element zajmie dwie kolumny, zaczynając od pierwszej dostępnej kolumny w danym wierszu.

Czy mogę używać nazwanych linii w skrótach grid-column i grid-row?

Tak, jeśli zdefiniujesz nazwane linie siatki (co omówimy wkrótce), możesz ich używać w skróconych właściwościach, np. grid-column: content-start / content-end;.

Który zapis jest lepszy: pełny czy skrócony?

W większości przypadków skrócony zapis (grid-column, grid-row) jest preferowany ze względu na zwięzłość. Pełny zapis (grid-column-start, etc.) może być bardziej czytelny w bardzo skomplikowanych przypadkach lub gdy ustawiasz tylko jedną z właściwości (np. tylko grid-column-start).