Przejdź do treści

Łączenie selektorów

W jaki sposób połączyć kilka selektorów w jednej regule stylów CSS? Jak zmienić obramowanie obrazka po wskazaniu myszką? Jak dodać ciekawie wyglądający tekst po wskazaniu myszką?

Na koniec warto wspomnieć o jeszcze jednej przydatnej własności selektorów CSS. Jak się można było przekonać, rodzajów selektorów jest bardzo wiele - każdy przeznaczony do innego celu. Co jednak zrobić, jeżeli potrzebujemy w jednej regule stylu zastosować kilka selektorów prostych? Czy jest to w ogóle możliwe? Oczywiście, że tak. Wystarczy po prostu wpisać je jeden po drugim (bez żadnych odstępów) w następującej kolejności:

  1. selektor typu lub selektor uniwersalny
  2. selektory atrybutów, selektor identyfikatora, selektor klasy lub selektory pseudoklas (w dowolnej kolejności)
  3. selektory pseudoelementów

Zespół selektorów z punktu 1 i 2 nazywamy selektorem prostym. W jednej regule może wystąpić kilka selektorów prostych - każdy rozdzielony przez tzw. kombinator, tj. znaki spacji, ">" lub "+", które są wykorzystywane przy tworzeniu selektorów: potomka, dziecka i braci. Selektor pseudoelementów może się znajdować tylko za ostatnim selektorem prostym w regule stylu.

Przykład

📋 Zaznacz kod ▶ Edytuj na żywo

a.przyklad_selektory:hover { font-weight: bold }
Taka reguła kojarzy każdy element typu a (czyli odsyłacz), który będzie posiadał klasę class="przyklad_selektory", kiedy zostanie on wskazany myszką:

Wskaż ten odsyłacz myszką: class="przyklad_selektory". A tutaj jest odsyłacz bez klasy.

Taki sposób tworzenia selektora odsyłaczy jest szczególnie przydatny, ponieważ zwykle chcemy część odnośników na stronie wystylizować inaczej, jeżeli chodzi o ich podświetlanie po wskazaniu myszką. Mogą to być np. linki z menu, które powinny wyglądać inaczej niż normalne hiperłącza w tekście. Jeżeli jednak chcemy zmienić wygląd wszystkich odsyłaczy znajdujących się w jednym miejscu - np. w menu serwisu - wygodniej jest użyć następującej reguły:

📋 Zaznacz kod ▶ Edytuj na żywo

.przyklad_selektory2 a:hover { font-weight: bold }

Teraz wystarczy wstawić:

📋 Zaznacz kod ▶ Edytuj na żywo

<div class="przyklad_selektory2">
	<a href="?">Link1</a>
	<a href="?">Link2</a>
	<a href="?">Link3</a>
</div>

aby zmienić wygląd po wskazaniu wszystkich odsyłaczy z tego bloku, bez wpływu na pozostałe znajdujące się na stronie:


Zmiana koloru obramowania obrazka po wskazaniu go myszką:

📋 Zaznacz kod ▶ Edytuj na żywo

img.przyklad_selektory3 { border: 5px solid black }
a:hover img.przyklad_selektory3 { border: 5px solid red }

Wskaż poniższy obrazek myszką:

class="przyklad_selektory3"

Inny ciekawy przykład - tym razem z automatycznym generowaniem zawartości:

📋 Zaznacz kod ▶ Edytuj na żywo

a.przyklad_selektory4:hover:after { content: "Rollover"; position: absolute; color: #000; background-color: #eee; font-size: 10px; border-width: 1px 2px 2px 1px; border-style: solid; border-color: #888; padding: 1px 5px }

Jeśli wskażesz ten odsyłacz myszką, powinien pojawić się zaraz za nim nowy element z napisem "Rollover".


A oto bardziej zaawansowany przykład:

📋 Zaznacz kod ▶ Edytuj na żywo

div.przyklad_selektory5 > ul:first-child[dir="ltr"]:lang(pl) + p[title]:first-letter { color: red; font-weight: bold; font-size: larger }
To jest blok, który posiada klasę class="przyklad_selektory5"...
  • To jest wykaz, który znajduje się wewnątrz bloku zaraz na jego początku, a zatem jest jego pierwszym dzieckiem.
  • Wykaz posiada atrybuty: dir="ltr" lang="pl"
...ciąg dalszy bloku...

To jest akapit, czyli brat wykazu, który posiada przypisany atrybut title. Pierwsza litera w tym akapicie powinna być zmodyfikowany przez regułę stylów.

...i tutaj kończy się blok.

W powyższej regule stylów możemy wyróżnić następujące selektory proste:

  • div.przyklad_selektory5
  • ul:first-child[dir="ltr"]:lang(pl)
  • p[title]:first-letter

Komentarze #

  • Sławomir Kokłowski
    Sławomir Kokłowski

    18.05.2020 21:19
    Zależy o co pytasz. Ale generalnie na tak postawione pytanie odpowiedź brzmi: tak ;-)
    Zobacz więcej

  • Gosc
    Gosc

    18.05.2020 20:29
    Ktoś to jeszcze "ulepsza"?
    Zobacz więcej

  • Nitr0Skay
    Nitr0Skay

    07.01.2015 21:17
    kurshtml
    Teraz już jest w porządku. Dziękuję za poprawkę :)
    Zobacz więcej

  • Sławomir Kokłowski
    Sławomir Kokłowski

    07.01.2015 00:41
    Dziękuję za informację. Minifikator kodu usunął białe znaki z tego znacznika.
    Zobacz więcej

  • Nitr0Skay
    Nitr0Skay

    06.01.2015 22:24
    Gość
    Potwierdzam. U mnie też to występuje. Korzystam z Chrome
    http://caniuse.com/#search=%3Aempty
    http://i.imgur.com/T3Mv6F2.png
    Zobacz więcej

  • Gość
    Gość

    06.01.2015 22:05
    Chciałam zapytać: czy tu (http://www.kurshtml.edu.pl/css/pusty_element,pseudoklasy.html) nie ma błędu? U mnie zarówno pierwszy jak i trzeci akapit mają czerwone tło.
    Zobacz więcej

  • Roberto
    Roberto

    31.03.2013 19:27
    ujemne marginesy, position:absolute, ogólnie wyjęcie z obiegu albo 'przeciwdziałanie' zmianom.
    nazwy muszą być dzieckiem elementu, którego :hover powoduje zmianę - [...] jak najedziesz na 'magia' to strong nadal jest...
    Zobacz więcej

  • GoŚćX
    GoŚćX

    31.03.2013 19:21
    Chciałbym wiedzieć czy istnieje taka cecha że pojawiający się element który wcześniej miał ceche i wartość: display:none; nie rozwali żadnych elementów strony, tylko pokaże się nad nimi. I gdy robię menu gdzie po najechaniu na klawisz np: galeria zwiększa on wysokoś i na nim wyskakują nazwy...
    Zobacz więcej

  • Roberto
    Roberto

    30.03.2013 21:03
    zmiana display dziecka z none na jakiś przy :hover rodzica...
    Zobacz więcej

  • jaaa
    jaaa

    30.03.2013 20:12
    Jak zrobić żeby po najechaniu myszką na jakiś elemnt (np: klawisz z menu) oprucz zmiany (podświetlenia klawisza) pod nim pokazywał się na przykład jakiś bloczek (zupełnie inny elemnt) jakie selektory użyć???
    Zobacz więcej

Zobacz więcej komentarzy

Facebook