Lekcja 10 – CSS Grid Layout – Potężny system układów

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