CSSSelectores

Pseudo-elementos

Permiten estilar una parte específica de un elemento, o directamente crear contenido que no existe como etiqueta propia en el HTML.

¿Qué son?

Un pseudo-elemento se escribe con dos puntos dobles (::nombre) y actúa como si insertara un elemento extra dentro de otro, sin tener que agregarlo al HTML. La convención moderna usa :: (doble) para diferenciarlos de las pseudo-clases, que usan : (simple), aunque por compatibilidad los navegadores todavía aceptan la sintaxis vieja con uno solo en casos como :before.

::before y ::after

Insertan contenido generado justo antes o después del contenido real de un elemento. Necesitan la propiedad content para existir, aunque sea vacía.

.tooltip::before {
  content: "";
  position: absolute;
  border: 6px solid transparent;
  border-top-color: black;
}

.required::after {
  content: " *";
  color: red;
}

Se usan mucho para íconos decorativos, flechitas de tooltips, o marcar campos obligatorios en un formulario, sin ensuciar el HTML con elementos que no tienen significado semántico.

::first-line y ::first-letter

p::first-line {
  font-weight: 600;
}

p::first-letter {
  font-size: 2.5em;
  float: left;
  line-height: 1;
}

::first-line estila la primera línea del texto (recalculándose según el ancho disponible), y ::first-letter apunta solo a la primera letra — el clásico efecto de letra capital en revistas y diarios.

::placeholder y ::selection

input::placeholder {
  color: #999;
  font-style: italic;
}

::selection {
  background: #5b9bd5;
  color: white;
}

::placeholder estila el texto de ayuda de un <input> vacío, y ::selection cambia cómo se ve el texto que el usuario selecciona con el mouse.

A tener en cuenta: Un elemento solo puede tener un ::before y un ::after — no se pueden apilar varios. Si necesitás más de dos elementos generados, la alternativa es agregar el HTML real o combinar pseudo-elementos con pseudo-clases, por ejemplo li::before junto con li:hover::before.
contenido generado::before / ::afterpseudo-elementos