Selektor CSSSelektory

*

Gwiazdka pasuje do każdego elementu. Służy do resetów stylów i reguł dla wszystkich dzieci wybranego kontenera.

Na tej stronie

Przykład

#
CSS
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
}
Podgląd

Definicja i zastosowanie

#

Selektor uniwersalny * wybiera każdy element, bez względu na znacznik, klasy i atrybuty. Użyty samodzielnie trafia w cały dokument, łącznie z html i body. W połączeniu z innymi selektorami ogranicza się do wybranego fragmentu: .card > * to wszystkie bezpośrednie dzieci karty.

Ma zerową specyficzność (0, 0, 0), więc nie dokłada nic do wagi selektora. Reguła * { margin: 0 } przegra z każdą inną regułą ustawiającą margines. Gwiazdka jest też niejawnie obecna przed samotną klasą czy atrybutem: .lead znaczy to samo co *.lead.

Najczęściej spotkasz ją w resecie box-sizing oraz w regule odstępów zwanej „sową” (* + *), która dodaje margines każdemu elementowi poprzedzonemu rodzeństwem. Pamiętaj, że * nie obejmuje pseudoelementów, dlatego resety wymieniają osobno *::before i *::after.

Obawy o wydajność samej gwiazdki są dziś przesadzone, ale ciężkie reguły dla wszystkich elementów, jak * { transition: all 0.3s }, potrafią spowolnić stronę i wywołać niechciane animacje.

Składnia

#
Składnia
* { właściwość: wartość; }

Przykładowe selektory

#
  • *

    Dosłownie wszystko, także html i body, dlatego przerywaną ramkę widać nawet wokół całego podglądu.
  • body *

    Wszyscy potomkowie body na każdej głębokości, także strong w akapicie i li w liście. Elementy html i body już nie pasują.
  • .demo > *

    Tylko bezpośrednie dzieci ramki: nagłówek, akapit i lista. Elementy strong i li leżą głębiej.
  • .flow > * + *

    Każde dziecko poprzedzone rodzeństwem dostaje górny margines. Pierwsze zostaje bez odstępu.

Przykładowe selektory w praktyce

#

*

Dosłownie wszystko, także html i body, dlatego przerywaną ramkę widać nawet wokół całego podglądu.
* {
  outline: 2px dashed #f59e0b;
  outline-offset: -2px;
}

body *

Wszyscy potomkowie body na każdej głębokości, także strong w akapicie i li w liście. Elementy html i body już nie pasują.
body * {
  outline: 2px dashed #f59e0b;
  outline-offset: -2px;
}

.demo > *

Tylko bezpośrednie dzieci ramki: nagłówek, akapit i lista. Elementy strong i li leżą głębiej.
.demo > * {
  outline: 2px dashed #f59e0b;
  outline-offset: -2px;
}

.flow > * + *

Każde dziecko poprzedzone rodzeństwem dostaje górny margines. Pierwsze zostaje bez odstępu.
.flow > * + * {
  margin-top: 14px;
  outline: 2px dashed #f59e0b;
  outline-offset: -2px;
}

Więcej przykładów

#
Równe odstępy między dziećmi, czyli „sowa”
CSS
.flow > * + * {
  margin-top: 12px;
}
Podgląd

Zapis * + * przypomina parę oczu, stąd żartobliwa nazwa „sowa”. Reguła działa dla dowolnych elementów, bez wymieniania ich z nazwy.

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

#
  • Reset z gwiazdką umieść na samej górze arkusza. Ma zerową wagę, więc każda późniejsza reguła łatwo go nadpisze.
  • Nie nadawaj przez * ciężkich efektów, takich jak przejścia, cienie czy filtry. Trafią w setki elementów, także te, których nie widać.
  • Zamiast .card * (wszyscy potomkowie) zwykle wystarczy .card > * (tylko dzieci). Reguła jest wtedy bardziej przewidywalna.

Powiązane hasła

#

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