Kurs HTML

2.4. Selektory ID (#identyfikator)

Strona główna > Kurs CSS > Rozdział 2: Podstawowe Selektory CSS > Selektory ID (#identyfikator)

Wprowadzenie: Identyfikacja unikalnych elementów

Podczas gdy klasy pozwalają grupować wiele elementów w celu nadania im wspólnych stylów, czasami potrzebujemy wybrać i ostylować jeden, **unikalny** element na stronie. Do tego celu służy **selektor ID**.

Selektor ID wybiera element na podstawie wartości jego atrybutu id w HTML. Kluczową zasadą jest, że wartość atrybutu id **musi być unikalna** w całym dokumencie HTML – żaden inny element nie może mieć tego samego ID.

Składnia

W HTML, aby nadać elementowi unikalny identyfikator, używamy atrybutu id:

<div id="naglowek-strony">...</div>
<p id="wstep">To jest akapit wstępny.</p>
<ul id="menu-glowne">...</ul>

Ważne: Wartość ID musi być unikalna na całej stronie!

W CSS, aby wybrać element na podstawie jego ID, używamy znaku **hash (#)** bezpośrednio przed nazwą identyfikatora:

/* Styl dla elementu o ID 'naglowek-strony' */
#naglowek-strony {
  background-color: #eee;
  padding: 20px;
  border-bottom: 1px solid #ccc;
}

/* Styl dla elementu o ID 'wstep' */
#wstep {
  font-size: 1.2em;
  font-style: italic;
  color: #555;
}

/* Styl dla elementu o ID 'menu-glowne' */
#menu-glowne {
  list-style: none;
  padding-left: 0;
}

W powyższym przykładzie, style zostaną zastosowane wyłącznie do tych konkretnych elementów, które mają przypisane odpowiednie ID.

Uwaga: W przeciwieństwie do klas, nie można łączyć selektora ID z selektorem typu w taki sam sposób (np. div#naglowek-strony). Ponieważ ID jest już unikalne, dodawanie selektora typu jest zbędne i nie zwiększa specyficzności w praktyczny sposób (choć technicznie jest dozwolone).

Specyficzność selektora ID

Selektor ID ma **bardzo wysoką specyficzność**. W notacji specyficzności (A, B, C, D), selektor ID ma wartość (0, 1, 0, 0).

  • Jest znacznie bardziej specyficzny niż selektor klasy (0,0,1,0), selektor atrybutu, pseudoklasa, selektor typu (0,0,0,1) i selektor uniwersalny (0,0,0,0).
  • Jest mniej specyficzny tylko niż style inline (1,0,0,0) i deklaracje z !important.

Ze względu na wysoką specyficzność, style zdefiniowane za pomocą selektora ID są trudne do nadpisania przez inne selektory (bez użycia !important lub jeszcze bardziej specyficznych selektorów ID). To jeden z powodów, dla których zaleca się ostrożne używanie ID do stylizowania.

p {
  color: blue; /* Specyficzność: 0,0,0,1 */
}

.moj-paragraf {
  color: green; /* Specyficzność: 0,0,1,0 */
}

#unikalny-paragraf {
  color: purple; /* Specyficzność: 0,1,0,0 - nadpisze poprzednie style dla 

*/ }

Zastosowania i dobre praktyki

  • Identyfikacja głównych sekcji strony: ID są często używane do oznaczania głównych, unikalnych obszarów strony, takich jak nagłówek (#header), stopka (#footer), główna treść (#main-content), nawigacja (#main-nav).
  • Kotwice (Anchors) dla linków: Atrybut id jest używany do tworzenia wewnętrznych linków (kotwic) na stronie (np. <a href="#sekcja1"> przeniesie do elementu <div id="sekcja1">).
  • Interakcje JavaScript: ID są bardzo wygodne do wybierania konkretnych elementów w kodzie JavaScript w celu manipulacji nimi (np. document.getElementById('mojElement')).
  • Ostrożność przy stylizowaniu: Ze względu na wysoką specyficzność i brak możliwości reużycia, **generalnie odradza się nadmierne używanie selektorów ID do stylizowania**. Preferuje się używanie klas, które są bardziej elastyczne i łatwiejsze w zarządzaniu. Używaj ID do stylizowania tylko wtedy, gdy masz absolutną pewność, że styl dotyczy tylko tego jednego, unikalnego elementu i nie będzie potrzeby jego reużycia.
  • Unikalność: Zawsze pamiętaj o bezwzględnym wymogu unikalności ID na stronie. Zduplikowane ID prowadzą do niepoprawnego HTML i mogą powodować nieprzewidywalne zachowanie CSS i JavaScript.

Zadania praktyczne

Zadanie 1 (z rozwiązaniem)

Stwórz plik HTML z elementem <div>, któremu nadasz ID logo-container. Wewnątrz diva umieść obrazek (<img>). W pliku CSS użyj selektora ID #logo-container, aby ustawić tło tego diva na jasnoszare (lightgray), nadać mu stałą szerokość 200px i wyśrodkować go na stronie (używając margin: 0 auto; - wymaga to, aby element był blokowy, a div jest domyślnie).

Rozwiązanie:

Plik HTML (np. index.html):

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>Zadanie 1 - Selektor ID</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div id="logo-container">
        <img src="logo.png" alt="Logo Firmy" style="max-width: 100%;"> <!-- Dodano styl inline dla responsywności obrazka -->
    </div>
    <p>Reszta treści strony...</p>
</body>
</html>

Plik CSS (style.css):

#logo-container {
  background-color: lightgray;
  width: 200px;
  margin: 0 auto; /* Wyśrodkowanie elementu blokowego */
  padding: 10px; /* Dodatkowe wypełnienie dla estetyki */
}

Efekt: Div zawierający logo będzie miał szerokość 200px, jasnoszare tło i zostanie wyśrodkowany poziomo na stronie.

Zadanie 2 (do samodzielnego wykonania)

Stwórz element stopki na stronie, np. <footer id="stopka-glowna">. Użyj selektora ID #stopka-glowna, aby nadać jej ciemne tło (np. #333), biały kolor tekstu (white), mały padding (padding: 10px;) i wyśrodkowany tekst (text-align: center;).

Zadanie 3 (do samodzielnego wykonania)

Masz paragraf z ID i klasą: <p id="wazny-akapit" class="ostrzezenie">...</p>. Napisz regułę dla klasy .ostrzezenie ustawiającą kolor tekstu na pomarańczowy. Następnie napisz regułę dla ID #wazny-akapit ustawiającą kolor tekstu na czerwony. Jaki kolor będzie miał ostatecznie tekst paragrafu? Dlaczego?

FAQ - Najczęściej zadawane pytania

Czy mogę użyć tego samego ID dla wielu elementów?

Nie, absolutnie nie. Standard HTML wymaga, aby wartość atrybutu id była **unikalna** w całym dokumencie. Użycie tego samego ID dla wielu elementów jest błędem walidacji HTML i może prowadzić do nieprzewidywalnych problemów z CSS (przeglądarka może zastosować styl tylko do pierwszego napotkanego elementu) i JavaScript.

Kiedy powinienem używać ID, a kiedy klasy do stylizowania?

Generalna zasada: **używaj klas do stylizowania**, a ID do identyfikacji unikalnych elementów (dla JavaScript lub kotwic). Klasy są bardziej elastyczne, reużywalne i mają niższą specyficzność, co ułatwia zarządzanie stylami. Używaj selektorów ID do stylizowania oszczędnie, głównie dla głównych bloków layoutu lub gdy masz pewność co do unikalności i braku potrzeby reużycia stylu.

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

Tak. W HTML4 nazwa ID musiała zaczynać się od litery. W HTML5 zasady są luźniejsze – ID musi zawierać co najmniej jeden znak i nie może zawierać spacji. Jednak dla kompatybilności i uniknięcia problemów w CSS/JS, dobrą praktyką jest, aby ID zaczynało się od litery, a następnie zawierało litery, cyfry, myślniki (-) lub podkreślenia (_).

Dlaczego style ID są trudne do nadpisania?

Ze względu na ich bardzo wysoką specyficzność (0,1,0,0). Aby nadpisać styl zdefiniowany za pomocą selektora ID, musisz użyć jeszcze bardziej specyficznego selektora (co jest trudne bez użycia innego ID lub !important), stylu inline lub deklaracji !important. Nadmierne poleganie na ID prowadzi do "wojen specyficzności" i utrudnia refaktoryzację CSS.