W tym pytaniu wszystko rozgrywa się o tzw. specyfikę oraz kolejność deklaracji CSS. Kiedy kilka reguł stylów dotyczy tego samego selektora, a nie mają różnej specyficzności, przeglądarka stosuje tę, która pojawia się jako ostatnia w kodzie. W arkuszu stylów przedstawionym w pytaniu wszystkie selektory to po prostu „p”, więc dotyczą każdego akapitu. Najpierw przypisano im kolor żółty, potem czarny, a na końcu czerwony. I to właśnie ta ostatnia wartość — color: red — będzie miała zastosowanie, bo nadpisuje poprzednie. W praktyce to bardzo częsta sytuacja, zwłaszcza gdy rozbudowujemy projekt lub podpinamy wiele plików CSS — jeśli ten sam selektor występuje wielokrotnie, ostateczny wygląd zależy od tego, która reguła jest ostatnia. Branżowo mówi się, że CSS działa na zasadzie „ostatni wygrywa” (ang. last rule wins), co potwierdzają oficjalne standardy W3C. Warto pilnować porządku w swoich stylach, bo nieświadome nadpisywanie może prowadzić do trudnych do wykrycia błędów wizualnych. Takie zachowanie CSS jest też przydatne przy tworzeniu tzw. motywów lub dynamicznego przewijania stylu, gdzie dokładnie na tej zasadzie można łatwo zmieniać wygląd całych sekcji strony. Z mojego doświadczenia wynika, że osoby początkujące często są zaskoczone tym mechanizmem i długo nie mogą znaleźć, dlaczego jakiś kolor nie działa — a to po prostu kwestia kolejności w kodzie.
To pytanie porusza dość podchwytliwy aspekt arkuszy stylów CSS, mianowicie mechanizm nadpisywania reguł poprzez kolejność ich deklaracji. Wiele osób intuicyjnie zakłada, że wystarczy spojrzeć na pierwszą lub środkową regułę, nie zwracając uwagi na fakt, że najważniejsza jest ta ostatnia, jeśli wszystkie mają identyczną specyficzność. Założenie, że kolor tekstu akapitu będzie żółty lub czarny, wynika najczęściej z nieznajomości tej właśnie zasady „last rule wins” w CSS albo mylenia z innymi mechanizmami specyficzności, gdzie selektor bardziej szczegółowy przeważa nad ogólnym. Jednak tutaj selektory są dokładnie takie same — zwykłe „p”. To oznacza, że każda kolejna reguła nadpisuje poprzednią dla tego samego selektora i właściwości. Kolor zielony w ogóle nie występował wśród deklaracji, więc jego wybór świadczy raczej o nieuwadze lub przypadkowym błędzie. Często początkujący deweloperzy myślą, że pierwsza reguła zdefiniowana w arkuszu wyznaczy bazowy wygląd, a kolejne tylko szczegóły, jednak w praktyce działa to odwrotnie, jeśli selektory są identyczne. Ten mechanizm jest też powodem, dla którego w dużych projektach warto planować strukturę CSS i unikać powtarzania tych samych reguł. Kiedy style się rozrastają, łatwo przeoczyć, że gdzieś na końcu pliku lub w importowanym stylu została nadpisana wcześniejsza deklaracja, przez co efekt końcowy jest inny niż zamierzony. Warto zapamiętać, że jeśli nie stosujesz dodatkowej specyficzności czy !important, to zawsze ostatnia pasująca reguła dla danego selektora decyduje o ostatecznym stylu. Z mojego doświadczenia wynika, że dopiero praktyka pozwala dobrze zrozumieć, jak ta zasada wpływa na wygląd strony i jak unikać chaotycznego nadpisywania stylów.