Selektor mówi przeglądarce, którym elementom nadać styl. Prosty selektor wybiera po nazwie znacznika, klasie albo identyfikatorze, a złożone potrafią wskazać „drugi element listy”, „pole typu e-mail” albo „akapit bezpośrednio wewnątrz karty”. Dobrze dobrany selektor oszczędza dopisywanie klas w HTML. Na lekcji uczniowie piszą dziewięć selektorów i liczą, ile elementów każdy z nich wybiera.
Scenariusz jest przeznaczony na 45 minut dla klasy po pierwszej lekcji CSS — na przykład po pierwszej lekcji CSS i lekcji o kaskadzie.
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:
- zapisać selektory typu, klasy i identyfikatora;
- odróżnić selektor potomka (spacja) od selektora bezpośredniego dziecka (
>); - użyć pseudoklas strukturalnych
:first-childi:nth-child()oraz selektora atrybutu; - policzyć, ile elementów wybiera dany selektor (
querySelectorAllw konsoli).
| Czas | Praca na lekcji |
|---|---|
| 0–5 min | Problem: jak wskazać „co drugi” element? |
| 5–15 min | Selektory proste i złożone |
| 15–22 min | Pseudoklasy strukturalne i atrybuty |
| 22–37 min | Trzy zadania i liczenie w konsoli |
| 37–42 min | Porównanie wyników |
| 42–45 min | Pytania kontrolne |
Najważniejsze selektory
| Selektor | Wybiera | Liczba elementów w projekcie |
|---|---|---|
li | wszystkie elementy li | 4 |
.wazne | elementy z klasą wazne | 2 |
#zajecia | element o identyfikatorze zajecia | 1 |
.karta p | akapity wewnątrz .karta (dowolnie głęboko) | 3 |
.karta > p | akapity będące bezpośrednimi dziećmi .karta | 2 |
li:first-child | li, które jest pierwszym dzieckiem swojego rodzica | 1 |
li:nth-child(even) | li na parzystych miejscach (2., 4. …) | 2 |
input[type="email"] | pola, których atrybut type to email | 2 |
Różnicę między .karta p i .karta > p widać na zagnieżdżonym akapicie w section: pasuje do pierwszego selektora (jest potomkiem), ale nie do drugiego (nie jest dzieckiem .karta). W :nth-child(n) liczy się miejsce wśród wszystkich rodzeństwa, nie tylko tej samej klasy; wartości odd i even oznaczają nieparzyste i parzyste, a zapis 2n+1 — co drugi, zaczynając od pierwszego. Selektor atrybutu [type="email"] pozwala stylować bez dodatkowych klas.
Liczbę dopasowań sprawdzisz w konsoli: document.querySelectorAll("li:nth-child(even)").length. Specyficzność selektorów (klasa silniejsza od typu, identyfikator silniejszy od klasy) opisuje lekcja o kaskadzie.
Zadania
Zadanie 1. Proste selektory. Napisz selektory: li (kolor #1e3a8a), .wazne (pogrubienie) i #zajecia (ramka 1px solid #94a3b8). Policz, ile elementów wybiera każdy.
Zadanie 2. Potomek i dziecko. Napisz .karta p (kolor #166534) i .karta > p (podkreślenie). Ile akapitów trafia pod każdy selektor i dlaczego różnie?
Zadanie 3. Pseudoklasy i atrybut. Napisz li:first-child (tło #fef9c3), li:nth-child(even) (tło #e0f2fe) i input[type="email"] (kolor ramki #dc2626). Sprawdź w konsoli, które elementy zostały wybrane.
Dla chętnych: napisz selektor, który wybierze tylko trzeci element listy (li:nth-child(3)) i selektor, który wybierze wszystkie li z klasą wazne będące drugim lub czwartym dzieckiem.
Rozwiązanie i wyniki
li {
color: #1e3a8a;
}
.wazne {
font-weight: bold;
}
#zajecia {
border: 1px solid #94a3b8;
}
.karta p {
color: #166534;
}
.karta > p {
text-decoration: underline;
}
li:first-child {
background: #fef9c3;
}
li:nth-child(even) {
background: #e0f2fe;
}
input[type="email"] {
border-color: #dc2626;
}
Pomiary w przeglądarce (querySelectorAll): li — 4 elementy, .wazne — 2, #zajecia — 1, .karta p — 3, .karta > p — 2, li:first-child — 1, li:nth-child(even) — 2, input[type="email"] — 2. Zagnieżdżony akapit w section ma kolor rgb(22, 101, 52) (z .karta p), ale bez podkreślenia (nie jest dzieckiem .karta); pierwszy li ma tło rgb(254, 249, 195), drugi i czwarty — rgb(224, 242, 254).
Typowe błędy
| Objaw | Co sprawdzić |
|---|---|
| Selektor nic nie wybiera | Literówka w nazwie klasy lub brak kropki (klasa) albo krzyżyka (identyfikator). |
| Styl dotyczy za wielu elementów | Selektor typu (li) obejmuje wszystkie takie elementy; zawęź go klasą lub kontekstem. |
.karta > p pomija zagnieżdżony akapit | Znak > oznacza tylko bezpośrednie dzieci. |
:nth-child(even) zaznacza inne elementy niż oczekiwano | Liczy się miejsce wśród wszystkich rodzeństwa, nie tylko elementów z daną klasą. |
| Selektor atrybutu nie działa | Brak cudzysłowu lub zła wartość atrybutu w HTML. |
| Reguła jest przekreślona w narzędziach deweloperskich | Inna reguła o większej specyficzności ją nadpisuje. |
Pytania kontrolne i punktacja
- Czym różni się
.karta pod.karta > p? - Które elementy wybiera
li:nth-child(odd)w liście czterech elementów? - Jak zapiszesz selektor wszystkich pól typu e-mail?
Odpowiedzi: Pierwszy wybiera akapity na dowolnej głębokości wewnątrz .karta, drugi — tylko bezpośrednie dzieci. Pierwszy i trzeci. input[type="email"].
Proponowana punktacja (razem 10 punktów): zadanie 1 — trzy selektory 2 pkt, liczby elementów 1 pkt; zadanie 2 — dwa selektory 2 pkt, wyjaśnienie różnicy 1 pkt; zadanie 3 — dwie pseudoklasy 2 pkt, selektor atrybutu 1 pkt; sprawdzenie w konsoli 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 pseudoelementy, układ strony (Flexbox, Grid) i organizacja CSS. Ten materiał rozwija dział o selektorach w kursie CSS w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: selektory CSS w MDN oraz pseudoklasy. Zobacz też lekcję o kaskadzie.
Poprowadź kolejne lekcje CSS
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu CSS →