Flexbox układa elementy w jednym kierunku, a Grid — w siatce wierszy i kolumn naraz. Dzięki temu układ strony, galerii czy panelu opisuje się kilkoma liniami, bez „obliczania” szerokości kolumn. Na lekcji uczniowie budują siatkę o trzech kolumnach i sprawdzają pomiarem, że jednostka fr dzieli wolne miejsce proporcjonalnie, a pola mogą zajmować kilka kolumn.
Scenariusz jest przeznaczony na 45 minut dla klasy znającej Flexbox i jednostki CSS — na przykład po lekcji o Flexboksie.
Przygotowanie stanowisk
Potrzebne są przeglądarka z narzędziami deweloperskimi (F12) i edytor tekstu. Rozpakuj pakiet z sekcji materiałów do osobnego folderu. HTML w obu folderach jest taki sam i jej nie zmieniasz — pracujesz w start/style.css. Po zapisaniu pliku odśwież stronę. Wymiary elementów sprawdzisz w narzędziach deweloperskich (zakładka Elements, panel Computed). Gotowe rozwiązanie jest w folderze rozwiazanie. Internet nie jest wymagany.
Cele i plan lekcji
Po zajęciach uczeń potrafi:
- utworzyć siatkę przez
display: gridigrid-template-columns; - obliczyć szerokości kolumn zapisanych w
fri odstępygap; - rozciągnąć pole na wiele kolumn (
grid-column: 1 / -1,span 2); - porównać Grid z Flexboksem i wybrać właściwy.
| Czas | Praca na lekcji |
|---|---|
| 0–5 min | Problem: układ w wierszach i kolumnach |
| 5–15 min | display: grid, kolumny fr, gap |
| 15–22 min | Pola na kilka kolumn |
| 22–37 min | Trzy zadania i pomiary |
| 37–42 min | Omówienie wyników |
| 42–45 min | Pytania kontrolne |
Siatka trzech kolumn
.siatka {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
gap: 16px;
}
Jednostka fr (*fraction*) oznacza część wolnego miejsca po odjęciu odstępów. Siatka ma szerokość 800 px i dwa odstępy po 16 px, więc na kolumny zostaje 800 − 32 = 768 px, dzielone w proporcji 1 : 2 : 1 — kolumny mają 192 px, 384 px i 192 px. Lewe krawędzie kolumn leżą w odległości 0, 208 (192 + 16) i 608 (208 + 384 + 16) px od lewej krawędzi siatki.
Elementy ustawiają się w kolejnych komórkach siatki wiersz po wierszu. Pole można rozciągnąć na wiele kolumn: grid-column: 1 / -1 oznacza „od pierwszej linii kolumn do ostatniej” (cała szerokość), a grid-column: span 2 — „zajmij dwie kolumny od bieżącego miejsca”. Jeśli pole zajmujące dwie kolumny nie mieści się już w bieżącym wierszu, trafia do następnego, a w poprzednim zostaje pusta komórka (domyślny algorytm rozmieszczania nie cofa się). Pole zajmujące kilka kolumn obejmuje też odstępy między nimi: dwie kolumny 384 + 192 plus odstęp 16 to 592 px.
Grid sprawdza się w układach dwuwymiarowych (strona z nagłówkiem, panelem i treścią, galeria), a Flexbox — w układach jednowymiarowych (rząd przycisków, menu). Oba można łączyć.
Zadania
Zadanie 1. Siatka. Ustaw .siatka jako siatkę o trzech kolumnach 1fr 2fr 1fr z odstępem 16 px. Zmierz szerokości pól 2 i 3 (pierwsze dwie komórki drugiego wiersza).
Zadanie 2. Pole na cały wiersz. Rozciągnij pole #g1 na całą szerokość siatki (grid-column: 1 / -1). Zmierz jego szerokość.
Zadanie 3. Pole na dwie kolumny. Rozciągnij #g4 na dwie kolumny (span 2). Zmierz jego szerokość oraz położenie i szerokość pól 5, 6 i 7.
Dla chętnych: zamień grid-template-columns na repeat(3, 1fr) i sprawdź, jak zmienią się szerokości kolumn.
Rozwiązanie i wyniki
body {
margin: 0;
padding: 0;
font-family: sans-serif;
}
.siatka {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
gap: 16px;
width: 800px;
}
.pole {
height: 40px;
background: #dbeafe;
}
#g1 {
grid-column: 1 / -1;
}
#g4 {
grid-column: span 2;
}
Pomiary w przeglądarce (siatka 800 px, pola po 40 px wysokości, odstęp 16 px — górne krawędzie wierszy w punktach 0, 56, 112 i 168 px): wiersz 1 — #g1 ma 800 px; wiersz 2 — #g2 ma 192 px (lewa krawędź w punkcie 0), #g3 ma 384 px (w punkcie 208), a trzecia komórka zostaje pusta, bo #g4 zajmujące dwie kolumny już się tu nie mieści; wiersz 3 — #g4 ma 592 px (w punkcie 0), #g5 ma 192 px (w punkcie 608); wiersz 4 — #g6 ma 192 px (w punkcie 0), #g7 ma 384 px (w punkcie 208).
Typowe błędy
| Objaw | Co sprawdzić |
|---|---|
| Pola ustawiają się jedno pod drugim | Brak display: grid na kontenerze lub kolumny nie zostały zdefiniowane. |
Kolumny fr mają niewłaściwe proporcje | Odstępy gap nie są częścią fr — odejmują się od dostępnego miejsca. |
Pole grid-column: 1 / -1 nie rozciąga się na całą szerokość | Siatka ma niejawne kolumny; -1 odnosi się do ostatniej linii zdefiniowanej siatki jawnej. |
| Szerokość pola na dwie kolumny nie równa się sumie kolumn | Do sumy dochodzi odstęp między kolumnami (gap). |
| Elementy siatki mają różne wysokości | Domyślnie rozciągają się do najwyższego w wierszu; ustaw align-items. |
| Siatka wychodzi poza ekran na telefonie | Stała szerokość 800 px; w układach elastycznych użyj %, fr i minmax. |
Pytania kontrolne i punktacja
- Ile pikseli ma kolumna
2frw siatce 800 px z dwoma odstępami po 16 px i kolumnami1fr 2fr 1fr? - Co robi
grid-column: span 2? - Kiedy wybierzesz Grid, a kiedy Flexbox?
Odpowiedzi: 384 px. Pole zajmuje dwie kolumny. Grid — dla układów dwuwymiarowych (wiersze i kolumny), Flexbox — dla układów w jednym kierunku.
Proponowana punktacja (razem 10 punktów): zadanie 1 — display: grid i kolumny 2 pkt, odstęp i pomiar 1 pkt; zadanie 2 — grid-column: 1 / -1 1 pkt, pomiar 1 pkt; zadanie 3 — span 2 1 pkt, pomiary położenia 2 pkt; wyjaśnienie obliczeń z gap 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.
Materiały do pobrania
Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.
Co dalej?
Następny krok to siatki elastyczne (repeat, minmax, auto-fit) i obszary nazwane (grid-template-areas). Ten materiał rozwija dział o układzie strony w kursie CSS w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: CSS Grid w MDN oraz grid-column. Zobacz też lekcję o Flexboksie.
Poprowadź kolejne lekcje CSS
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu CSS →