Złożone selektory i specyficzność
Wiemy już, jak tworzyć proste selektory w CSS. Umiemy stylować elementy wykorzystując ich nazwy, atrybuty, id
lub klasy. Przyszła pora, aby przenieść się na nieco wyższy poziom i zaznajomić z nieco trudniejszymi zagadnieniami.
W CSS możemy tworzyć złożone (kombinowane) selektory. Umożliwia to nam zawężenie kryterium wyboru elementu. Przyjrzyjmy się kilku przykładom:
Tak, jak wyżej – jeśli umieścimy obok siebie dwa (lub więcej) selektory (bez spacji!) oznacza to, że dane reguły CSS zostaną zastosowane dla elementów spełniających wszystkie te kryteria jednocześnie.
Możemy również wskazywać na elementy według relacji, w jakich znajdują się wobec siebie w drzewie dokumentu HTML.
W takim wypadku należy umieszczać kolejne selektory po spacji. Zobaczcie zresztą sami, jak to działa:
O nas
Cennik
Kontakt
Specyficzność
Wybierając za pomocą CSS dowolny element w dokumencie HTML można zazwyczaj zastosować więcej niż jeden selektor.
Mając tę świadomość, a także wiedząc, że style mogą pochodzić z różnych źródeł, w jaki sposób przeglądarka określa, jakie style mają zostać zastosowane dla naszego elementu? Aby odpowiedzieć na to pytanie, musimy zapoznać się z pojęciem specyficzności (ang. specificity).
Każdy rodzaj selektora możemy umieścić na ściśle określonej pozycji w szeregu ważności. Wymieńmy je w kolejności od najmniej do najbardziej ważnych:
1) Element oraz pseudoelement
2) Klasa, pseudoklasa oraz atrybut
3) ID
4) Styl zapisany inline
O tym, co to są pseudoklasy i pseudoelementy dowiemy się w późniejszych rozdziałach.
Important::Ważne
Wróćmy w tym momencie do wspomnianego w poprzednim rozdziale słowa kluczowego
!important
. Jak pewnie się domyślacie, służy ono do nadawania wybranym regułom specjalnej ważności.W powyższym przykładzie tekst naszego akapitu zostanie pokolorowany na szaro (
silver
), pomimo że według reguł specyficzności to styleinline
powinny zyskać najwyższy priorytet.Musicie być bardzo ostrożni używając
!important
, ze względu na to, że takie style są bardzo trudne do nadpisania – bardzo łatwo o bałagan w kodzie. Radzimy Wam zatem, aby unikać używania tego słowa kluczowego jak tylko się da!
Jeśli zatem na nasz element wskazuje kilka prostych selektorów, określenie, jakie style powinny zostać mu nadane jest całkiem proste. Jak sprawa ma się w przypadku selektorów kombinowanych? W tym wypadku specyficzność jest wyliczana bazując na 4-elementowej krotce:
1) Dla każdego selektora elementu bądź pseudoelementu zwiększ 4-ty element o 1.
2) Dla każdej klasy, pseudoklasy lub atrybutu zwiększ 3-ci element o 1.
3) Dla każdego ID zwiększ 2-gi element o 1.
4) Dla każdego stylu inline
zwiększ pierwszy element o 1.
Important::Ważne
Zwróćcie w tym momencie uwagę, że powyższe wartości są krotką, nie bazują na systemie dziesiętnym. Zatem użycie selektora złożonego nawet z 11 klas nie "przebije" selektora złożonego z jednego ID.
Wróćmy teraz do naszego przykładu menu:
I obliczmy specyficzność naszych selektorów:
Zatem w tej rywalizacji wygra drugi selektor .main-nav li.active
. Zauważmy, że rywalizacja dotyczy wartości właściwości wewnątrz selektora. Nasz element wynikowo uzyska zatem style:
Important::Ważne
Rozpisywanie krotek na kartce papieru ma wyłącznie pomóc Wam zrozumieć, jak działa specyficzność. Nie umieszczamy tego w kodzie, nie musimy tego robić za każdym razem, kiedy kodujemy złożony selektor. Może jednak okazać się pomocne, kiedy będziemy chcieli naprawić błędy w kodzie!
Zdajemy sobie sprawę, że specyficzność nie jest łatwym zagadnieniem na początek. Ale nie przejmujcie się! Im więcej wprawy będziecie nabierać w kodowaniu, tym bardziej stanie się to dla Was jasne.
Exercise::Ćwiczenie 11
Popatrz na przykładowy kod:
Wiedząc, w jaki sposób przeglądarka oblicza specyficzność określ, jaki kolor uzyska element
<a href="http://jdoe.com" class="author-website">Jane's website</a>
.
Last updated