Pseudoclases
Las pseudoclases se utilizan para referenciar a ciertos comportamientos de los elementos HTML. Las pseudoclases se definen añadiendo dos puntos (:) antes de la pseudoclase.
Pseudoclases de enlaces
Son pseudoclases orientadas a hipervínculos o hiperenlaces (etiqueta <a>).
Veamos un ejemplo. Imaginad que queremos poner de color rojo y en negrita aquellos enlaces que aún no han sido visitados:
Pseudoclases de ratón
Las siguientes pseudoclases se utilizan para cambiar el comportamiento cuando nos posicionamos o pulsamos un elemento con el ratón.
El ejemplo típico de :hover es cuando pasamos el ratón por encima de un enlace (<a>), vamos a cambiarle el color a la letra y a añadirle un padding a dicho elemento:
Pseudoclases de interacción
Están orientadas a formularios y cómo interaccionan los usuarios con ellos:
Por ejemplo, le vamos a dar un borde verde al input con el foco:
Pseudoclases de activación
De forma habitual, los elementos de un formulario HTML están activados, pero podemos querer desactivar un cierto campo en un momento dado añadiendo el atributo disabled en el HTML. Las distintas pseudoclases que nos permite detectar si un campo está activado/desactivado son:
- :enabled → cuando el campo está activado
- :disabled → cuando el campo está desactivado
- :read-only → cuando el campo es de sólo lectura
- :read-write → cuando el campo es editable por el usuario
Por ejemplo, vamos a darle un color de fondo blanco a los input que estén activos, y a los que no están activos los ponemos de color gris.
Pseudocalses de validación
Como sabemos, con HTML5 podemos hacer una primera validación a los campos de un formulario, asegurándonos que el usuario escribe un campo de forma correcta. Existen algunas pseudoclases para las validaciones:
- :required → Cuando el campo es obligatorio (atributo html required)
- :optional → Cuando el campo es opcional (por defecto todos son opcionales)
- :invalid → Campo que no cumple la validación HTML5
- :valid → Campo que cumple la validación HTML5
- :out-of-range → Campos numéricos fuera de rango
- :in-range → Campos numéricos dentro del rango
Por ejemplo, vamos a poner un borde azul a aquellos input que son de carácter obligatorio de rellenar:
Pseudocalses de negación, :not
La pseudoclase de negación, nos permite seleccionar todos los elementos que no cumplan los selectores indicados entre paréntesis. Por ejemplo, imaginad que queremos seleccionar todos los elementos <div> que no sean la clase container:
Pseudoclases para elementos según su posición
Podemos acceder a ciertos elementos del documento HTML dependiendo de su posición y estructura de los elementos hijos:
- :first-child → Primer elemento hijo
- :last-child → Último elemento hijo
- :nth-child(n) → N-elemento hijo
- :nth-last-child(n) → N-elemento hijo partiendo desde el final
Por ejemplo, vamos a cambiar el fondo de un artículo para el primer y último strong.
Si lo que queremos es seleccionar un elemento hijo en concreto pero que no es el primero ni el último, como hemos dicho usaríamos :nth-child(n). Por ejemplo, con strong:nth-child(1) estaríamos seleccionando el primer elemento hijo que además es un <strong>. Con esta pseudoclase por ejemplo, podríamos seleccionar todos los hijos pares con: :nth-child(2n), es decir, no es necesario poner un número.
Pseudoclases para elementos del mismo tipo
En el punto anterior hemos visto cómo seleccionar elementos independientemente del tipo, en este punto veremos cómo seleccionar solo a elementos del mismo tipo:
- :first-of-type → Primer elemento hijo (de su mismo tipo)
- :last-of-type → Último elemento hijo (de su mismo tipo)
- :nth-of-type(n) → N-elemento hijo (de su mismo tipo)
- :nth-last-of-type(n) → N-elemento hijo (de su mismo tipo) partiendo desde el final
Las pseudoclases :fist-of-type y :last-of-type son equivalentes a :first-type y :last-type pero sólo teniendo en cuenta elementos del mismo tipo. En cambio las pseudoclases :nth-of-type(n) es la equivalente a :nth-child(n) y :nth-last-of-type(n) es la equivalente a :nth-last-child(n). Veamos un ejemplo:
Otras pseudoclases
Podemos encontrar otras pseudoclases como :only-child, :only-of-type o :empty entre otras en aquí