CSS 3 posiada dość sporo specyficznych selektorów i pseudoklas. Z czym to się je? Polecam poczytać tutaj: http://www.kurshtml.edu.pl/css/co_to_sa_pseudoklasy,pseudoklasy.html
Od siebie dodam jedynie, że kod HTML powinno upraszczać się do minimum, czyli nadawać jak najmniej class i id a przede wszystkim nie pisanie żadnego kodu CSS w pliku html.
I właśnie do upraszczania kodu html, zostały wymyślone nowe selektory i pseudoklasy. Wiem, że poprawne używanie może zająć trochę czasu, ale naprawdę wpłynie to znacząco na jakość Twojego kodu!