CSS Grid to zaawansowany system układów, który pozwala tworzyć złożone siatki (grids) o precyzyjnej strukturze i rozmieszczeniu elementów na stronie. W przeciwieństwie do Flexboxa, który układa elementy w jednym kierunku (pionowo lub poziomo), Grid pozwala na kontrolowanie zarówno wierszy, jak i kolumn jednocześnie.
Podstawy CSS Grid
Aby stworzyć siatkę, musisz ustawić właściwość display: grid
na kontenerze, a następnie zdefiniować układ kolumn i wierszy.
Przykład prostej siatki:
<div class="grid-container"> <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>
.grid-container { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: auto; gap: 10px; /* Odstępy między komórkami */ } .item { background-color: lightblue; padding: 20px; text-align: center; }
W tym przykładzie:
grid-template-columns: repeat(3, 1fr);
– Tworzy trzy kolumny, z których każda zajmuje 1/3 dostępnej szerokości.grid-template-rows: auto;
– Wiersze są automatycznie dostosowywane do zawartości.gap: 10px;
– Dodaje odstęp między elementami w siatce.
Definiowanie kolumn i wierszy
Możesz dokładnie określić, ile kolumn i wierszy będzie w siatce, oraz jaki mają mieć rozmiar.
grid-template-columns
– Definiuje szerokość kolumn.grid-template-rows
– Definiuje wysokość wierszy.
Przykład: Definiowanie siatki o różnych rozmiarach:
.grid-container { display: grid; grid-template-columns: 100px 200px 1fr; grid-template-rows: 100px 200px; gap: 20px; }
- Pierwsza kolumna będzie miała szerokość 100px, druga 200px, a trzecia zajmie pozostałą dostępną przestrzeń (1fr = 1 jednostka ułamkowa dostępnej przestrzeni).
- Wiersze mają wysokość odpowiednio 100px i 200px.
Umieszczanie elementów w siatce
Elementy wewnątrz siatki są automatycznie umieszczane w komórkach, ale możesz precyzyjnie kontrolować, gdzie mają się znajdować, używając właściwości grid-column
i grid-row
.
Przykład: Umieszczanie elementów w konkretnych komórkach:
.item1 { grid-column: 1 / 3; /* Element zajmie kolumny 1 i 2 */ grid-row: 1 / 2; /* Element zajmie pierwszy wiersz */ } .item2 { grid-column: 3 / 4; /* Element zajmie trzecią kolumnę */ grid-row: 2 / 3; /* Element zajmie drugi wiersz */ }
Możesz kontrolować, ile kolumn lub wierszy dany element zajmuje, definiując zakres komórek.
Automatyczne rozmieszczanie elementów za pomocą grid-auto-flow
Jeśli nie chcesz ręcznie umieszczać każdego elementu, możesz skorzystać z właściwości grid-auto-flow
, która automatycznie rozmieszcza elementy w wierszach lub kolumnach.
grid-auto-flow: row;
– Domyślnie elementy będą rozmieszczane w wierszach.grid-auto-flow: column;
– Elementy będą rozmieszczane w kolumnach.
Przykład: Automatyczne rozmieszczanie w kolumnach:
.grid-container { display: grid; grid-auto-flow: column; grid-template-rows: repeat(2, 100px); }
Łączenie komórek za pomocą grid-area
Za pomocą właściwości grid-area
możesz sprawić, że jeden element zajmie kilka komórek w siatce. Jest to przydatne, jeśli chcesz, aby niektóre elementy były większe niż inne.
Przykład: Łączenie komórek:
.item1 { grid-area: 1 / 1 / 2 / 3; /* Zajmuje obszar od pierwszego wiersza, pierwszej kolumny do drugiego wiersza i trzeciej kolumny */ }
Tworzenie responsywnych układów z Grid
Podobnie jak w przypadku Flexboxa, CSS Grid doskonale nadaje się do tworzenia responsywnych układów. Dzięki mediom zapytaniom (@media
) możesz dostosowywać liczbę kolumn i wierszy w zależności od rozmiaru ekranu.
Przykład: Responsywna siatka:
.grid-container { display: grid; grid-template-columns: repeat(3, 1fr); } @media (max-width: 600px) { .grid-container { grid-template-columns: 1fr; } }
W tym przykładzie, na większych ekranach siatka będzie miała trzy kolumny, a na mniejszych (poniżej 600px) siatka będzie się składała z jednej kolumny.
Funkcja minmax()
minmax()
pozwala na ustalenie minimalnych i maksymalnych rozmiarów dla kolumn lub wierszy. Dzięki temu możesz kontrolować, jak elementy będą skalowane w zależności od dostępnej przestrzeni.
Przykład użycia minmax()
:
.grid-container { display: grid; grid-template-columns: repeat(3, minmax(100px, 1fr)); }
W tym przypadku każda kolumna będzie miała minimalnie 100px, ale jeśli jest więcej miejsca, może rozciągnąć się do 1/3 dostępnej przestrzeni.
Ćwiczenie: Tworzenie zaawansowanego układu z Grid
Zadanie: Stwórz stronę z trzema wierszami i trzema kolumnami, gdzie jeden element zajmuje dwie kolumny, a drugi dwie komórki w pionie.
<!DOCTYPE html> <html lang="pl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS Grid – Układ</title> <style> .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 100px); gap: 10px; } .item1 { background-color: lightblue; grid-column: 1 / 3; /* Zajmuje pierwszą i drugą kolumnę */ } .item2 { background-color: lightgreen; grid-row: 1 / 3; /* Zajmuje pierwszy i drugi wiersz */ } .item3, .item4, .item5 { background-color: lightcoral; } </style> </head> <body> <div class="grid-container"> <div class="item1">Element 1</div> <div class="item2">Element 2</div> <div class="item3">Element 3</div> <div class="item4">Element 4</div> <div class="item5">Element 5</div> </div> </body> </html>
Gratulacje! Ukończyłeś lekcję 10.
Przejdź teraz do lekcji 11 >> CSS Animacje i przejścia (transitions)
Spis Treści - darmowy kurs HTML i CSS
Podstawy:
Wprowadzenie: Jak przygotować środowisko pracy
Lekcja 1: Podstawowe tagi HTML i struktura dokumentu
Lekcja 2: Formatowanie tekstu, linki i obrazki
Lekcja 3: Listy, tabele i formularze w HTML
Lekcja 4: Wprowadzenie do CSS
Lekcja 5: Rozszerzenie podstawowych właściwości CSS
Zaawansowane:
Lekcja 6: Semantyczne HTML5
Lekcja 7: Zaawansowane formularze w HTML5
Lekcja 8: Multimedia w HTML5
Lekcja 9: Flexbox – Elastyczny układ stron
Lekcja 10: CSS Grid Layout – Potężny system układów
Lekcja 11: CSS Animacje i przejścia (transitions)
Lekcja 12: Responsywność i Media Queries
Lekcja 13: CSS Variables (Custom Properties)
Dodatki:
- Spis tagów HTML
- Spis Właściwości CSS