8. Zaawansowane selektory i pseudo-elementy

~15-20 min średni

Zaawansowane selektory pozwalają precyzyjnie targetować elementy, a pseudo-elementy dodają wirtualne treści.

Dlaczego to ważne?

Umożliwiają złożone stylowanie bez dodatkowego HTML. W 2026: nowe selektory jak :has() i :where() upraszczają logikę.

Zaawansowane selektory

/* Kombinatory */
div + p { margin-top: 0; } /* p bezpośrednio po div */
ul ~ li { color: gray; } /* li po ul (nie bezpośrednie) */
a[href^='https'] { color: green; } /* href zaczyna się od https */
input[type='text']:focus { border-color: #0d6efd; }

/* Nowe selektory */
li:nth-child(odd) { background: #f8f9fa; } /* nieparzyste */
p:has(strong) { font-weight: bold; } /* p zawierające strong */
:where(.class) { color: red; } /* niska specyficzność */

Pseudo-elementy

p::before { content: '⭐ '; }
p::after { content: ' (koniec)'; color: gray; }
::first-letter { font-size: 2rem; }
::first-line { text-transform: uppercase; }
::selection { background: #6610f2; color: white; }
::placeholder { color: #6c757d; }

Pierwszy akapit.

Drugi akapit z :nth-child.

  • :nth-child(n) – po pozycji
  • :has() – warunkowy
  • :where() / :is() – grupowanie
  • ::before / ::after – dodają treść
  • ::first-letter – pierwsza litera
  • ::selection – zaznaczony tekst
  • :focus – stan fokus
Do zapamiętania: Używaj :has() do warunkowych styli, ::before/after do dekoracji.

Zadanie

W pliku style.css i index.html:

  • dodaj ::before do h2 (ikona)
  • styluj co drugi wiersz listy :nth-child(even)
  • użyj :has() do stylowania div z img
  • zmień kolor ::placeholder w input