A starting point
The pseudo-class concept is introduced to permit selection based on information that lies outside of the document tree or that cannot be expressed using the other simple selectors.
A pseudo-class always consists of a "colon" ( followed by the name of the pseudo-class and, for functional pseudo-classes, by a value between parentheses. White space is optionally allowed between the parentheses and the argument, but not between the pseudo-class name and the parentheses.
Pseudo-classes are allowed in all compound selectors contained in a selector. Pseudo-classes are allowed anywhere in a compound selector after the leading type selector or (possibly omitted) universal selector. Pseudo-class names are case-insensitive. Some pseudo-classes are mutually exclusive (such that a compound selector containing them, while valid, will never match anything), while others can apply simultaneously to the same element. Pseudo-classes may be dynamic, in the sense that an element can acquire or lose a pseudo-class while a user interacts with the document.
Dynamic pseudo-classes classify elements on characteristics other than their name, attributes, or content, but rather on characteristics that cannot be deduced from the document tree. They do not appear in or modify the document source or document tree.