Menu

Selektory CSS: rodzaje, kombinatory i selektory atrybutów

Selektor CSS wybiera elementy, które stylizuje reguła. Poznaj wszystkie rodzaje selektorów, cztery kombinatory (potomka, dziecka, sąsiedniego rodzeństwa, ogólnego rodzeństwa), selektory atrybutów, grupowanie i testuj selektory na żywo.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Czym jest selektor CSS

Selektor to część reguły przed nawiasami klamrowymi. Decyduje, do których elementów stosują się deklaracje.

p.note { color: #2563eb; }
/* selector: p.note    declaration: color: #2563eb */

Pięć podstawowych selektorów wystarcza w większości prawdziwych arkuszy stylów:

Rodzaje selektorów w skrócie

SelektorPrzykładPasuje do
Uniwersalny*Każdego elementu
TypupKażdego <p>
Klasy.tipElementów z class="tip" (między innymi)
ID#main-titleElementu z id="main-title"
Atrybutu[type="email"]Elementów, których atrybut pasuje
Pseudoklasaa:hover, li:first-childElementów w danym stanie lub pozycji
Pseudoelementp::first-line, .x::beforeCzęści elementu
Grupah1, h2, h3Wszystkiego, co pasuje do jednego z listy
Złożonyp.tip<p>, który ma też tę klasę

Klasy i ID mają własną stronę, selektor klasy CSS. Pseudoklasy, takie jak :nth-child() i :not(), omawia strona o pseudoklasach.

Kombinatory: potomek a dziecko

Kombinator łączy dwa selektory według ich relacji w drzewie HTML. Są cztery.

KombinatorSkładniaPasuje do B, gdy
PotomkaA B (spacja)B jest gdziekolwiek wewnątrz A
DzieckaA > BRodzicem B jest A
Sąsiedniego rodzeństwaA + BB następuje zaraz po A, z tym samym rodzicem
Ogólnego rodzeństwaA ~ BB następuje gdzieś po A, z tym samym rodzicem

Spacja i > to para, którą najczęściej się myli. Selektor potomka sięga na dowolną głębokość; selektor dziecka zatrzymuje się na jednym poziomie:

Kombinatory rodzeństwa: + i ~

Rodzeństwo patrzy tylko do przodu. Nie ma kombinatora "poprzedniego rodzeństwa", choć da się to wyrazić przez :has(): h2:has(+ p) pasuje do h2, po którym bezpośrednio następuje p.

Selektory atrybutów

Nawiasy kwadratowe dopasowują atrybuty i ich wartości:

SelektorPasuje, gdy
[disabled]Ma atrybut, z dowolną wartością
[type="email"]Wartość to dokładnie email
[href^="https"]Wartość zaczyna się od https
[href$=".pdf"]Wartość kończy się na .pdf
[class*="icon"]Wartość zawiera gdziekolwiek icon
[lang|="en"]Wartość to en lub zaczyna się od en-
[data-state="open" i]Dokładne dopasowanie, bez rozróżniania wielkości liter

Selektory atrybutów na atrybutach data-* to czysty sposób na stylizowanie stanu ustawianego przez JavaScript, bez wymyślania nazw klas.

Wypróbuj dowolny selektor

Wpisz selektor w pole. Każdy pasujący element dostaje bursztynowy kontur, a poniżej pojawia się ich liczba.

Wypróbuj #demo a, ul > li, h2 ~ *, a[href^="https"], li:not(.active).

Złożony a potomka: spacja ma znaczenie

p.note i p .note różnią się jedną spacją i znaczą co innego.

Jak przeglądarki czytają selektory

Gdy kilka reguł pasuje do tego samego elementu i ustawia tę samą właściwość, wygrywa bardziej specyficzny selektor, a przy remisie późniejszy. ID waży więcej niż dowolna liczba klas, a klasa więcej niż dowolna liczba selektorów typu; strona o !important zawiera pełną tabelę specyficzności.

Grupa ma jeden haczyk: jeśli którykolwiek selektor na zwykłej liście jest nieprawidłowy, cała reguła przepada. W a, b:unknown { } nie zostaną ostylowane nawet linki. Otoczenie listy przez :is() czyni ją wyrozumiałą, więc :is(a, b:unknown) nadal stylizuje linki.

Częste błędy

  • Brak kropki lub krzyżyka. tip { } celuje w element <tip>, a nie w class="tip". Pisz .tip.
  • Spacja w selektorze złożonym. p .note to nie p.note.
  • Oczekiwanie, że > sięgnie do wnuków. Dla dowolnej głębokości użyj spacji.
  • Jedna literówka psuje całą grupę. W h1, h2:hovr, h3 nic nie zostaje ostylowane.
  • Zbyt długie selektory. body div.wrapper ul li a trudno się czyta i trudno go nadpisać. Zwykle wystarczy jedna klasa.

Najczęściej zadawane pytania

Czym jest selektor CSS?

To część reguły CSS przed {, która mówi, do których elementów stosują się deklaracje. W p.note { color: blue; } selektor p.note pasuje do każdego <p> z klasą note.

Czym różni się spacja od > w selektorze CSS?

Spacja to kombinator potomka: nav a pasuje do każdego linku w dowolnym miejscu wewnątrz nav, na dowolnej głębokości. > to kombinator dziecka: nav > a pasuje tylko do linków, których bezpośrednim rodzicem jest nav.

Co oznacza + w CSS?

+ to kombinator sąsiedniego rodzeństwa. h2 + p pasuje do <p>, który następuje bezpośrednio po <h2> z tym samym rodzicem. ~ jest luźniejszy: h2 ~ p pasuje do każdego późniejszego <p> z rodzeństwa.

Jak wybierać elementy według atrybutu w CSS?

Umieść atrybut w nawiasach kwadratowych: [disabled] pasuje do elementów, które go mają, [type="email"] do dokładnej wartości, [href^="https"] do wartości zaczynającej się od ciągu znaków, [href$=".pdf"] do takiej, która się nim kończy, a [class*="btn"] do takiej, która go zawiera.

Czy CSS może wybrać element rodzica?

Tak, za pomocą pseudoklasy :has(), obsługiwanej w aktualnych wersjach Chrome, Firefoksa i Safari. li:has(> a.active) pasuje do elementów listy, które bezpośrednio zawierają aktywny link.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ