4.15.2. Pseudo-classes

All a elements that have an href attribute, all area elements that have an href attribute, and all link elements that have an href attribute, must
match one of :link and :visited.

Other specifications might apply more specific rules regarding how these elements are to match
these pseudo-classes, to mitigate some privacy concerns that apply with straightforward
implementations of this requirement.

For example, if the user is using a keyboard to push a button element by pressing the space bar, the element would match this pseudo-class in
between the time that the element received the keydown event and the time the
element received the keyup event.

An element is said to be in a formal activation state between the time the user
begins to indicate an intent to trigger the element’s activation behavior and either
the time the user stops indicating an intent to trigger the element’s activation behavior, or the time the element’s activation behavior has finished
running, which ever comes first.

An element is said to be being actively pointed at while the user indicates the
element using a pointing device while that pointing device is in the "down" state (e.g., for a
mouse, between the time the mouse button is pressed and the time it is depressed; for a remote
control on a television, the time during which the remote control is pointing at the element).

The :hoverpseudo-class is defined to match an element while
the user designates an element with a pointing device. For the purposes of
defining the :hoverpseudo-class only, an HTML user agent must consider an element as
being one that the user designates if it is:

An element that the user indicates using a pointing device.

An element that has a descendant that the user indicates using a pointing device.

If the user designates the element with ID "a" with their pointing device, then
the p element (and all its ancestors not shown in the snippet above), the label element, the element with ID "a", and the element with ID "c" will
match the :hoverpseudo-class. The element with ID "a" matches it from
condition 1, the label and p elements match it because of condition 2 (one of their
descendants is designated), and the element with ID "c" matches it through
condition 3 (its label element matches :hover). However, the element with ID
"b" does not match :hover: its descendant is not designated, even though it matches :hover.

This specification does not define when an element matches the :lang() dynamic pseudo-class, as it is defined in sufficient detail in a language-agnostic fashion in the
Selectors specification. [SELECTORS4]