Menu

Selektor klasy i selektor id w CSS (.class i #id)

Selektor klasy (.name) stylizuje każdy element z tą klasą; selektor id (#name) stylizuje jeden element o tym id. Poznaj składnię, wiele klas i łączenie klas, różnicę między klasą a id, zasady nazewnictwa i przełączanie klas w JavaScripcie.

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

Selektor klasy

Selektor klasy to kropka, a po niej nazwa klasy. Stylizuje każdy element, którego atrybut class zawiera tę nazwę, bez względu na typ elementu.

Kropka pojawia się tylko w CSS. W HTML atrybut to class="badge", bez kropki. W nazwach klas wielkość liter ma znaczenie: .Badge nie pasuje do class="badge".

Wiele klas na jednym elemencie

Element może mieć dowolną liczbę klas rozdzielonych spacjami. Każda wnosi własne reguły i właśnie tak buduje się warianty z małych kawałków:

.btn.danger, bez spacji, pasuje do elementów, które mają obie klasy. Ostatni span ma danger, ale nie ma btn, więc połączona reguła go pomija.

Warianty selektora klasy

SelektorPasuje do
.noteDowolnego elementu z klasą note
p.noteTylko elementów <p> z klasą note
.btn.primaryElementów z klasami btn i primary jednocześnie
.card .title.title w dowolnym miejscu wewnątrz .card
.card > .title.title, którego rodzicem jest .card
.a, .bElementów z klasą a albo b

Różnicę między spacją a jej brakiem, razem z innymi kombinatorami, omawia strona o selektorach CSS.

Selektor id

Selektor id to krzyżyk, a po nim id: #site-header stylizuje element z id="site-header". Id musi być unikalne na stronie, więc selektor id trafia dokładnie w jeden element.

Id służy nie tylko do stylów: href="#details" przewija do elementu, <label for="email"> wskazuje id pola, a JavaScript znajduje element przez document.getElementById('details'). To zwykły powód, żeby nadać elementowi id; do stylizowania lepiej nadaje się klasa.

Klasa a id

Klasa .nameId #name
Na stronieWiele elementówJeden element
Na elemencieKilka, rozdzielonych spacjamiJedno
Specyficzność(0,1,0)(1,0,0)
Cel odnośnika (#name w adresie URL)NieTak
Najlepsze doStylizowaniaKotwic, etykiet, zaczepów dla JavaScriptu

Różnica w specyficzności to praktyczny powód, żeby stylizować klasami. Jedno id wygrywa z dowolną liczbą klas, więc regułę zapisaną z id może nadpisać tylko inne id, styl w linii albo !important:

Dodawanie i usuwanie klas w JavaScripcie

Klasy to normalny sposób, w jaki JavaScript zmienia wygląd elementu: CSS definiuje stany, a skrypt tylko je przełącza.

classList ma też add, remove, contains i replace. Unikaj bezpośredniego przypisywania className: zastępuje wszystkie klasy, które element miał.

Nazywanie klas

  • Litery, cyfry, łączniki i podkreślenia są bezpieczne: card, card-title, card__title, is-open.
  • Nie zaczynaj selektora od cyfry ani od łącznika, po którym jest cyfra. .2col to niepoprawny CSS. Zacznij od litery (.cols-2) albo poprzedź cyfrę znakiem ucieczki (.\32 col).
  • Nazywaj według przeznaczenia, a nie wyglądu: .error przetrwa zmianę projektu, .red-text nie.
  • W większych projektach pomaga konwencja nazewnictwa. BEM zapisuje block__element--modifier, na przykład .card__title--large.

Częste błędy

  • Kropka w HTML. class=".badge" nigdy nie pasuje do .badge.
  • Dwa atrybuty class. <p class="a" class="b"> zachowuje tylko a. Użyj class="a b".
  • Spacja, gdy chodziło o obie klasy. .btn .primary szuka zagnieżdżonego elementu; .btn.primary to ten sam element.
  • Powtórzone id. Zduplikowane id psują getElementById, odnośniki do kotwic i powiązania etykiet, nawet jeśli CSS wydaje się działać.
  • Stylizowanie wszystkiego przez id. Ich specyficzność utrudnia późniejsze nadpisywanie; używaj klas.

Najczęściej zadawane pytania

Jak wybrać klasę w CSS?

Napisz kropkę, a po niej nazwę klasy: .card { ... } stylizuje każdy element z class="card". Kropka występuje tylko w CSS; atrybut w HTML nie ma kropki.

Czym różni się klasa od id w CSS?

Klasy można użyć na dowolnej liczbie elementów, a element może mieć ich kilka; id musi być unikalne na stronie, a element ma najwyżej jedno. W CSS #id ma dużo wyższą specyficzność niż .class, więc reguły z id trudniej nadpisać.

Jak nadać elementowi dwie klasy?

Rozdziel nazwy spacją w jednym atrybucie: class="btn primary". Dwukrotne wpisanie class na elemencie nie działa; przeglądarka zachowuje tylko pierwszy atrybut.

Jak wybrać element, który ma dwie klasy?

Połącz selektory klas bez spacji: .btn.primary pasuje do elementów, które mają obie klasy. Ze spacją .btn .primary oznacza element .primary wewnątrz elementu .btn.

Czy nazwa klasy CSS może zaczynać się od cyfry?

W HTML może, ale selektor nie może zaczynać się od cyfry bez znaku ucieczki, więc .1col to niepoprawny CSS. Poprzedź cyfrę znakiem ucieczki (.\31 col) albo, co lepsze, zaczynaj nazwy klas od litery.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ