Selektor CSSSelektory

[atrybut]

Wybiera elementy po atrybucie HTML i jego wartości: dokładnej, początku, końcu, fragmencie albo słowie z listy.

Na tej stronie

Przykład

#
CSS
a[href^="https"]::after {
  content: " ↗";
}

a[href$=".pdf"]::before {
  content: "PDF";
  margin-right: 6px;
  padding: 1px 5px;
  border-radius: 4px;
  background: #f43f5e;
  color: #fff;
  font-size: 11px;
  font-weight: 700;
}
Podgląd

Definicja i zastosowanie

#

Selektor atrybutu zapisujesz w nawiasach kwadratowych. Sam [title] wybiera każdy element, który ma atrybut title, bez względu na wartość, nawet pustą. Po dodaniu operatora i wartości sprawdzasz treść atrybutu: dokładną wartość, jej początek, koniec, dowolny fragment albo pojedyncze słowo z listy.

To wygodny sposób na stylowanie bez dopisywania klas. Pola formularzy rozróżnisz po typie (input[type="email"]), linki zewnętrzne po początku adresu (a[href^="https"]), a pliki po rozszerzeniu (a[href$=".pdf"]). Świetnie działa też z atrybutami data-* i aria-*, które opisują stan komponentu, na przykład [aria-expanded="true"].

Wartość w cudzysłowie jest zawsze bezpieczna. Cudzysłów możesz pominąć tylko wtedy, gdy wartość jest prostym słowem z liter, cyfr, łączników i podkreśleń, które nie zaczyna się od cyfry. Wielkość liter w wartości zwykle ma znaczenie, chyba że przed nawiasem zamykającym dodasz flagę i.

Specyficzność selektora atrybutu to (0, 1, 0), tyle samo co klasy. Rzadziej spotkasz operator |=: [lang|="pl"] pasuje do wartości pl oraz do wartości zaczynających się od pl-, np. pl-PL.

Składnia

#
Składnia
[atrybut] | [atrybut="w"] | [atrybut^="w"] | [atrybut$="w"] | [atrybut*="w"] | [atrybut~="w"] | [atrybut|="w"] | [atrybut="w" i]

Warianty zapisu

#
  • [title]

    [atrybut]

    Liczy się sama obecność atrybutu, wartość nie gra roli. Pasuje tylko link z atrybutem title.
  • [data-tags="css-grid"]

    [atrybut="w"]

    Dokładnie ta wartość, znak w znak. Element z „css nowe” nie pasuje, choć też zawiera słowo css.
  • [href^="https"]

    [atrybut^="w"]

    Wartość zaczyna się od podanego tekstu. Tak najczęściej wyróżnia się linki zewnętrzne.
  • [href$=".pdf"]

    [atrybut$="w"]

    Wartość kończy się podanym tekstem. Plik MAPA.PDF nie pasuje, bo wielkość liter ma znaczenie.
  • [href*="pliki"]

    [atrybut*="w"]

    Podany tekst występuje w dowolnym miejscu wartości, także w środku adresu. Pasują oba linki do plików.
  • [data-tags~="css"]

    [atrybut~="w"]

    Wartość to lista słów rozdzielonych spacjami i jedno z nich to dokładnie „css”. Słowo „css-grid” się nie liczy.
  • [href$=".pdf" i]

    flaga i

    Flaga i wyłącza rozróżnianie wielkości liter, więc pasują oba pliki PDF: małymi i wielkimi literami.

Warianty zapisu w praktyce

#

[title]

Liczy się sama obecność atrybutu, wartość nie gra roli. Pasuje tylko link z atrybutem title.
[title] { background: #7c3aed; color: #fff; }

[data-tags="css-grid"]

Dokładnie ta wartość, znak w znak. Element z „css nowe” nie pasuje, choć też zawiera słowo css.
[data-tags="css-grid"] { background: #7c3aed; color: #fff; }

[href^="https"]

Wartość zaczyna się od podanego tekstu. Tak najczęściej wyróżnia się linki zewnętrzne.
[href^="https"] { background: #7c3aed; color: #fff; }

[href$=".pdf"]

Wartość kończy się podanym tekstem. Plik MAPA.PDF nie pasuje, bo wielkość liter ma znaczenie.
[href$=".pdf"] { background: #7c3aed; color: #fff; }

[href*="pliki"]

Podany tekst występuje w dowolnym miejscu wartości, także w środku adresu. Pasują oba linki do plików.
[href*="pliki"] { background: #7c3aed; color: #fff; }

[data-tags~="css"]

Wartość to lista słów rozdzielonych spacjami i jedno z nich to dokładnie „css”. Słowo „css-grid” się nie liczy.
[data-tags~="css"] { background: #7c3aed; color: #fff; }

[href$=".pdf" i]

Flaga i wyłącza rozróżnianie wielkości liter, więc pasują oba pliki PDF: małymi i wielkimi literami.
[href$=".pdf" i] { background: #7c3aed; color: #fff; }

Więcej przykładów

#
Stan komponentu zapisany w atrybucie ARIA
CSS
.toggle[aria-expanded="true"] {
  background: #7c3aed;
}

.toggle[aria-expanded="false"] + .details {
  display: none;
}
Podgląd

Kliknij przycisk. Skrypt zmienia tylko wartość aria-expanded, a kolor przycisku i widoczność szczegółów wynikają wyłącznie z CSS.

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Stan komponentu trzymaj w atrybutach, takich jak aria-expanded czy data-state, i stylizuj go selektorem atrybutu. Wygląd zawsze będzie zgodny z tym, co słyszą użytkownicy czytników ekranu.
  • Selektor atrybutu widzi tylko atrybuty zapisane w HTML. input[value=""] nie zareaguje na wpisywanie, a [checked] na kliknięcie pola. Do bieżącego stanu służą pseudoklasy, np. :checked i :placeholder-shown.
  • Adresy i rozszerzenia plików bywają pisane różnie, dlatego przy ^=, $= i *= warto rozważyć flagę i.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.