Kurs HTML

2.3. Selektory klas (.nazwa-klasy)

Strona główna > Kurs CSS > Rozdział 2: Podstawowe Selektory CSS > Selektory klas (.nazwa-klasy)

Wprowadzenie: Grupowanie elementów do stylizowania

Selektory typu pozwalają stylizować wszystkie elementy danego rodzaju, ale co jeśli chcemy zastosować te same style tylko do niektórych paragrafów, nagłówków lub innych elementów, niezależnie od ich typu? Tutaj z pomocą przychodzą **selektory klas**.

Selektor klasy jest jednym z **najważniejszych i najczęściej używanych** selektorów w CSS. Pozwala on na zdefiniowanie stylu dla grupy elementów, którym nadaliśmy wspólną nazwę klasy za pomocą atrybutu class w HTML.

Składnia

W HTML, aby przypisać element do danej klasy, używamy atrybutu class:

<p class="informacja">To jest ważna informacja.</p>
<div class="informacja warning">To jest ostrzeżenie.</div>
<span class="highlight">Wyróżniony tekst.</span>

Zauważ, że jeden element może mieć przypisane **wiele klas**, oddzielonych spacjami (jak w drugim przykładzie: class="informacja warning").

W CSS, aby wybrać elementy na podstawie ich klasy, używamy **kropki (.)** bezpośrednio przed nazwą klasy:

/* Styl dla wszystkich elementów z klasą 'informacja' */
.informacja {
  background-color: lightblue;
  border: 1px solid blue;
  padding: 10px;
}

/* Styl dla wszystkich elementów z klasą 'warning' */
.warning {
  background-color: lightcoral;
  border-color: red;
  font-weight: bold;
}

/* Styl dla wszystkich elementów z klasą 'highlight' */
.highlight {
  background-color: yellow;
}

W powyższym przykładzie:

  • Pierwszy paragraf (<p class="informacja">) otrzyma style z reguły .informacja.
  • Drugi div (<div class="informacja warning">) otrzyma style zarówno z reguły .informacja, jak i z reguły .warning (jeśli wystąpią konflikty, zostaną rozwiązane zgodnie z zasadami specyficzności i kolejności).
  • Trzeci span (<span class="highlight">) otrzyma style z reguły .highlight.

Łączenie selektora klasy z selektorem typu

Można również tworzyć bardziej specyficzne selektory, łącząc selektor typu z selektorem klasy. Wybierze to tylko elementy danego typu, które mają określoną klasę.

/* Styl tylko dla elementów  z klasą 'informacja' */
p.informacja {
  font-style: italic;
}

/* Styl tylko dla elementów 
z klasą 'warning' */ div.warning { margin-bottom: 20px; }

W tym przypadku, styl font-style: italic; zostanie zastosowany tylko do paragrafów z klasą informacja, a nie do innych elementów (np. divów) z tą samą klasą.

Specyficzność selektora klasy

Selektor klasy ma wyższą specyficzność niż selektor typu i selektor uniwersalny. W notacji specyficzności (A, B, C, D), selektor klasy ma wartość (0, 0, 1, 0).

  • Jest bardziej specyficzny niż selektor typu (0,0,0,1) i selektor uniwersalny (0,0,0,0).
  • Jest mniej specyficzny niż selektor ID (0,1,0,0).

Łączenie selektora typu z klasą (np. p.informacja) zwiększa specyficzność do (0, 0, 1, 1).

Zastosowania i dobre praktyki

  • Reużywalne komponenty: Klasy są podstawowym narzędziem do tworzenia reużywalnych stylów dla komponentów interfejsu użytkownika (np. przyciski, karty, alerty). Definiujesz styl dla klasy (np. .przycisk) i możesz go zastosować do dowolnego elementu HTML, który ma pełnić rolę przycisku.
  • Modyfikatory: Używaj dodatkowych klas do modyfikowania wyglądu lub stanu komponentu (np. .przycisk jako styl bazowy, .przycisk--duzy lub .przycisk--danger jako modyfikatory). Jest to podstawa metodologii BEM.
  • Znaczące nazwy klas: Nadawaj klasom nazwy, które opisują **znaczenie lub funkcję** elementu (np. .wiadomosc-ostrzegawcza, .profil-uzytkownika, .glowna-nawigacja), a nie jego wygląd (np. .czerwony-tekst, .duzy-margines). Stylizowanie oparte na znaczeniu jest bardziej elastyczne i łatwiejsze w utrzymaniu.
  • Unikaj nadużywania: Nie twórz klasy dla każdego drobnego stylu. Wykorzystuj dziedziczenie i kombinatory selektorów tam, gdzie to możliwe.
  • Konwencje nazewnictwa: W projektach często stosuje się konwencje nazewnictwa klas, takie jak BEM (Block, Element, Modifier) czy OOCSS, aby zapewnić spójność i uniknąć konfliktów nazw.

Zadania praktyczne

Zadanie 1 (z rozwiązaniem)

Stwórz plik HTML z trzema paragrafami. Nadaj dwóm pierwszym klasę akapit-wprowadzenia. W pliku CSS napisz regułę dla klasy akapit-wprowadzenia, która ustawi kolor tekstu na szary (gray) i powiększy rozmiar czcionki do 1.1em.

Rozwiązanie:

Plik HTML (np. index.html):

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>Zadanie 1 - Selektor Klasy</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <p class="akapit-wprowadzenia">To jest pierwszy akapit wprowadzenia.</p>
    <p class="akapit-wprowadzenia">To jest drugi akapit wprowadzenia.</p>
    <p>To jest zwykły paragraf.</p>
</body>
</html>

Plik CSS (style.css):

.akapit-wprowadzenia {
  color: gray;
  font-size: 1.1em;
}

Efekt: Pierwsze dwa paragrafy będą miały szary tekst i będą nieco większe niż trzeci, zwykły paragraf.

Zadanie 2 (do samodzielnego wykonania)

Dodaj do pliku HTML przycisk (<button>) i link (<a href="#">). Nadaj obu elementom tę samą klasę, np. przycisk-akcji. W CSS stwórz regułę dla klasy przycisk-akcji, która ustawi tło na niebieskie (blue), kolor tekstu na biały (white), usunie obramowanie (border: none;) i doda wewnętrzne wypełnienie (padding) 10px góra/dół i 20px lewo/prawo.

Zadanie 3 (do samodzielnego wykonania)

Masz element <div class="wiadomosc sukces">Operacja zakończona pomyślnie!</div>. Napisz dwie reguły CSS: jedną dla klasy wiadomosc (ustawiającą np. obramowanie i padding) oraz drugą dla klasy sukces (ustawiającą np. zielone tło i biały kolor tekstu). Zaobserwuj, jak style z obu klas łączą się na elemencie div.

FAQ - Najczęściej zadawane pytania

Jaka jest różnica między klasą a ID?

Główna różnica polega na unikalności i przeznaczeniu. ID musi być unikalne w całym dokumencie HTML i służy do identyfikacji jednego, konkretnego elementu (np. do linkowania lub manipulacji przez JavaScript). Klasa może być przypisana do wielu elementów i służy do grupowania elementów w celu zastosowania wspólnych stylów lub zachowań.

Czy nazwa klasy może zawierać cyfry lub myślniki?

Tak. Nazwa klasy w CSS (po kropce) musi zaczynać się od litery, podkreślenia (_) lub myślnika (-), a następnie może zawierać litery, cyfry, podkreślenia i myślniki. W atrybucie class w HTML nazwy klas są oddzielone spacjami. Przykłady poprawnych nazw klas: .klasa1, .moja-klasa, ._ukryty-element.

Czy kolejność klas w atrybucie class="..." ma znaczenie?

Nie, kolejność nazw klas w atrybucie class w HTML nie ma wpływu na stosowanie stylów CSS. Znaczenie ma jedynie kolejność reguł CSS w arkuszu stylów oraz ich specyficzność.

Czy lepiej używać klas czy selektorów typu?

Zależy od sytuacji. Selektory typu są dobre dla globalnych, domyślnych stylów dla standardowych elementów. Klasy są znacznie bardziej elastyczne i preferowane do tworzenia reużywalnych komponentów, specyficznych wariantów elementów i ogólnej organizacji stylów w większości przypadków. Zbyt intensywne stylizowanie za pomocą selektorów typu może prowadzić do trudności w nadpisywaniu stylów.