Do którego elementu trafia reguła i kto wygrywa, gdy dwie reguły mówią co innego
Cztery podstawowe selektory: typ, klasa, id, uniwersalny
Łączenie kilku selektorów przecinkiem
Kaskada: kto wygrywa, gdy style się kłócą
Ćwiczenie: selektory w Waszym pliku style.css
Rozgrzewka · 3 minuty
Trzy pytania z poprzedniej lekcji
Z jakich elementów zawsze składa się reguła CSS?
Jakim znakiem kończycie każdą deklarację wewnątrz klamer?
Który sposób dołączenia CSS jest zalecany i dlaczego?
Część 1 · cztery selektory
Które selektory już znacie?
Selektor mówi, do jakiego elementu ma się dopasować styl. Jeden znacznik HTML może mieć naraz nazwę, klasę i id - pasuje do niego kilka selektorów jednocześnie.
MDN: „A type selector is sometimes called a tag name selector or element selector” · „The case-sensitive class selector starts with a dot” · „an ID can be used only once per page” · „The universal selector is indicated by an asterisk (*). It selects everything in the document” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Basic_selectors
Część 2 · wiele selektorów naraz
Ten sam styl dla kilku selektorów
Gdy kilka różnych elementów ma wyglądać tak samo, nie piszecie tej samej reguły kilka razy. Selektory łączycie przecinkiem w jedną listę - reguła dotyczy ich wszystkich naraz.
h1, .intro {
color: blue;
}
Spacja przed przecinkiem albo po nim nie ma znaczenia. Każdy selektor może stać w osobnej linii - dla czytelności, nie dla działania kodu.
MDN: „If you want to apply the same CSS to multiple items, you can combine individual selectors into a selector list. The rule is then applied to all the individual selectors” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Basic_selectors
Część 3 · selektor na drzewie dokumentu
Do którego elementu trafia ten selektor?
Dokument HTML to drzewo zagnieżdżonych elementów. Selektor .intro nie patrzy na to, gdzie element stoi w drzewie - trafia w każdy element z tą klasą, niezależnie od miejsca.
MDN, „Basic_selectors”
Część 4 · kto wygrywa
Gdy style się kłócą
Czasem dwie reguły CSS mówią co innego o tym samym elemencie. Wygrywa ta z większą wagą: styl wbudowany style="" bije wszystko, potem #id, potem .class, na końcu sam typ znacznika.
Ciekawostka z MDN: selektor uniwersalny * ma wagę zero, mimo że pasuje do każdego elementu na stronie. Dlatego przegrywa nawet z najprostszym selektorem typu, np. regułą p { color: blue; }.
MDN: „a million class selectors combined would not be able to overwrite the specificity of one id selector” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Handling_conflicts · ciekawostka: developer.mozilla.org/en-US/docs/Web/CSS/CSS_cascade/Specificity
Ten element ma naraz typ p, klasę intro i id lead - pasują do niego wszystkie trzy reguły. Wygrywa #lead, bo selektor id ma największą wagę spośród tych trzech: tekst będzie niebieski.
MDN, „Handling_conflicts”
CSS · egzamin
Tak pytają na egzaminie
1. W języku CSS zapis selektora p > i { color: red;} oznacza, że kolorem czerwonym zostanie sformatowany
każdy tekst w znaczniku <p> lub każdy tekst w znaczniku <i>
każdy tekst w znaczniku <p> za wyjątkiem tych w znaczniku <i>
jedynie ten tekst znacznika <p>, do którego jest przypisana klasa o nazwie i
jedynie ten tekst w znaczniku <i>, który jest umieszczony bezpośrednio wewnątrz znacznika <p>
2. Który selektor formatuje akapity tekstu o klasie text oraz element blokowy o ID images?
Zapisz plik, wciśnij F5 i sprawdź wynik w przeglądarce.
Ma się pojawić: inny styl akapitów, inny kolor elementów z klasą, osobny wygląd elementu z id, brak domyślnych marginesów.
Pytania kontrolne
Trzy pytania na koniec
Czym różni się selektor klasy od selektora id?
Co zaznacza selektor uniwersalny *?
Który selektor wygrywa, gdy na ten sam element działają #lead i .intro?
To domyka start z CSS: na następnej lekcji kolor i tekst.
Z realnych wdrożeń
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
Selektor po #id
Metodyki nazewnictwa klas CSS, takie jak BEM (ang. Block Element Modifier), celowo unikają id w CSS: zbyt duża waga utrudnia późniejsze nadpisanie stylu.
unikane
Liczenie wagi selektorów w głowie
Narzędzia deweloperskie przeglądarki (F12 → zakładka Styles) pokazują wprost, która reguła wygrała i dlaczego.
narzędzia
Jedna reguła * zerująca marginesy
W dużych projektach zamiast jednej reguły używa się gotowego pliku reset albo normalize, zerującego dziesiątki właściwości naraz.
rozbudowane
Kilka reguł w jednym style.css
Deklaracja !important wymusza wygraną regułę mimo niższej wagi; w produkcji traktowana jako ostateczność, bo psuje przewidywalność kaskady.