Nos ayudan a elegir entre una amplia gama de diferentes elementos subjetivos para darles unos estilos específicos sin tener que añadir clases extras al elemento a través de class, sobre todo para estados del elemento que sea.
Para algunos de ellos hay que escribirlo de forma diferente según el navegador, con prefijos, pero no nos tenemos que preocupar de eso si utilizamos SCSS o transpiladores o similar.
Hay MUCHAS
:active, para enlaces, si se acaba de pulsar.:checked, para checkboxes, si está seleccionado.:default, elementos de formulario, estado por defecto.:dir(), para saber si el documento se lee en una dirección u otra (ltr o rtl).:disabled, un elemento de formulario en el que no podemos escribir, similar a [disabled].:empty, cualquier elemento sin hijos ni texto.:enabled, lo contrario que disabled o un input sin ese atributo.:first-child, el primer hijo de un nodo.:first-of-type, el primer elemento de su tipo entre un grupo de elementos hermanos. Por ejemplo, el primer párrafo de un artículo.:fullscreen, para saber si el navegador se encuentra a pantalla completa (experimental).:focus, en un formulario, el elemento con el foco del teclado / ratón. Muy útil para a11y.:hover, cuando pasamos ratón por encima. En móvil, se lanza cuando hacemos clic sobre el elemento (clic ⤑ dedazo encima):indeterminate, similar a checked, cuando no se le ha dado un valor verdadero o falso al checkbox.:in-range, se activa si el valor actual de un input se encuentra dentro de los límites de rango especificados por los atributos min y max.:invalid, si el valor de un input no es el correcto.:lang(), podemos cambiar la apariencia dependiendo del idioma del elemento.:last-child, último de los hijos de un nodo dado.:last-of-type, el último elemento de su tipo entre un grupo de elementos hermanos. Por ejemplo, el último párrafo de un artículo.:link, un elemento (enlace) no visitado.:not(), lo que pone. Tal cual ... que no:nth-child(), Representa elementos cuya posición numérica en una serie de hermanos coincide con el patrón An+B. Ahora lo vemos.:nth-last-child(), unidos last child si, además, tiene la posición determinada.:nth-last-of-type(), último de ese tipo si, además, tiene la posición determinada.:nth-of-type(), el último hijo de un tipo (sea clase, etiqueta, etc).:only-child, un hijo único sin hermanos.:only-of-type, el único hijo de un elemento que es de ese tipo.:optional, elementos de un formulario sin un atributo required.:out-of-range, el contrario de :in-range.:read-only, un input que tenga el atributo readonly.:read-write, el contrario del anterior.:required, un campo de un formulario obligatorio, con atributo required.:root, pseudo clase, como vimos, que representa la raíz del documento y en el que solemos añadir las variables CSS del proyecto.:target, Sirve para enlazar documentos con el anchor <a name="name">Name</a> y que está activo en ese momento.:valid, campo de formulario en el que hay valores válidos.:visited, un link que hemos visitado antes.