13.5. 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 dlagrid-column-start
igrid-column-end
.grid-row
: Skrót dlagrid-row-start
igrid-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ść dlagrid-column-start
lubgrid-row-start
. Może to być numer linii, nazwa linii (omówimy później) lub słowo kluczowespan
.<end-line>
(opcjonalna): Wartość dlagrid-column-end
lubgrid-row-end
. Może to być numer linii, nazwa linii lub słowo kluczowespan
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żnegrid-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żnegrid-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
).