Pseudoelementos ::before y ::after: efectos, badges y patrones modernos

Usa ::before y ::after para crear decoraciones, overlays y UI sin HTML extra.

::before y ::after generan cajas decorativas sin añadir HTML.

Siempre requieren content para aparecer.

Son ideales para badges, líneas, overlays y efectos de hover.

attr() permite leer datos del HTML y mostrarlos en UI.

  • Sin content, el pseudoelemento no existe.
  • ::before y ::after se comportan como elementos inline por defecto.
  • Define content: "" para crear una caja vacía y poder estilizarla.
  • Puedes cambiar su display a block o inline-block según el caso.
  • Con position absoluta controlas overlays y decoraciones.

Fundamentos: content y flujo

Sin content, el pseudoelemento no existe.

::before y ::after se comportan como elementos inline por defecto.

Define content: "" para crear una caja vacía y poder estilizarla.

Puedes cambiar su display a block o inline-block según el caso.

Posicionamiento y capas

Con position absoluta controlas overlays y decoraciones.

Asigna position: relative al contenedor para anclar el pseudoelemento.

Usa inset para cubrir todo el elemento y crear overlays.

pointer-events: none evita que el pseudoelemento bloquee clics.

  • Combina z-index con cuidado para no tapar contenido.
  • Usa opacity y blur para efectos suaves.
  • Evita overlays si dificultan la lectura.

attr(): datos desde el HTML

Ideal para etiquetas, estados y tooltips ligeros.

attr() permite leer atributos data-* y mostrarlos en UI.

Es perfecto para badges dinámicos o tooltips simples.

Mantén el texto breve para evitar que se desborde.

Efectos y microinteracciones

Crea subrayados, brillos y separadores sin más HTML.

Los pseudoelementos son perfectos para subrayados animados y líneas guía.

Usa transform y transition para efectos suaves.

Combina gradients con opacity para un look moderno.

Buenas prácticas

Úsalos como decoración, no como contenido esencial.

El contenido importante debe estar en el HTML para accesibilidad y SEO.

Los pseudoelementos son invisibles para lectores de pantalla.

Mantén un contraste adecuado si el pseudoelemento añade color.

CSS
29

Pseudoelementos ::before y ::after: efectos, badges y patrones modernos

Usa ::before y ::after para crear decoraciones, overlays y UI sin HTML extra.

Código del tema: display: grid; gap: 1rem;

📘 Teoría

Fundamentos: content y flujo

Sin content, el pseudoelemento no existe.

1

::before y ::after se comportan como elementos inline por defecto.

2

Define content: "" para crear una caja vacía y poder estilizarla.

3

Puedes cambiar su display a block o inline-block según el caso.

Caja base
.highlight::before {
  content: "";
  display: inline-block;
  width: 8px;
  height: 8px;
  margin-right: 8px;
  background: #0ea5e9;
  border-radius: 999px;
}

Posicionamiento y capas

Con position absoluta controlas overlays y decoraciones.

Asigna position: relative al contenedor para anclar el pseudoelemento.

Usa inset para cubrir todo el elemento y crear overlays.

pointer-events: none evita que el pseudoelemento bloquee clics.

  • Combina z-index con cuidado para no tapar contenido.
  • Usa opacity y blur para efectos suaves.
  • Evita overlays si dificultan la lectura.
Overlay suave
.card { position: relative; overflow: hidden; }

.card::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at top, rgba(14, 165, 233, 0.18), transparent 60%);
  pointer-events: none;
}

attr(): datos desde el HTML

Ideal para etiquetas, estados y tooltips ligeros.

1

attr() permite leer atributos data-* y mostrarlos en UI.

2

Es perfecto para badges dinámicos o tooltips simples.

3

Mantén el texto breve para evitar que se desborde.

Badge con data-label
.price::after {
  content: attr(data-label);
  margin-left: 8px;
  padding: 2px 6px;
  border-radius: 999px;
  font-size: 11px;
  background: #e2e8f0;
}

Efectos y microinteracciones

Crea subrayados, brillos y separadores sin más HTML.

1

Los pseudoelementos son perfectos para subrayados animados y líneas guía.

2

Usa transform y transition para efectos suaves.

3

Combina gradients con opacity para un look moderno.

Subrayado animado
.link { position: relative; color: #0f172a; text-decoration: none; }

.link::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -2px;
  width: 100%;
  height: 2px;
  background: #0ea5e9;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 180ms ease;
}

.link:hover::after {
  transform: scaleX(1);
}

Buenas prácticas

Úsalos como decoración, no como contenido esencial.

1

El contenido importante debe estar en el HTML para accesibilidad y SEO.

2

Los pseudoelementos son invisibles para lectores de pantalla.

3

Mantén un contraste adecuado si el pseudoelemento añade color.

🧪 Aprende probando

Ejemplo Badge en tarjeta Etiqueta sin añadir HTML extra.
Ejemplo Comillas decorativas Añade una comilla grande con ::before.
Ejemplo Subrayado animado Efecto moderno al pasar el mouse.
Ejemplo Tooltip con attr() Usa data-tip para mostrar información.
Ejemplo Demo interactiva: botones hover avanzados Explora varios patrones de hover con `::before`, `::after`, capas y transiciones para CTAs más expresivos.

🏁 Retos

Reto Reto: cinta decorativa Crea una cinta usando ::before y ::after.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre CSS.

Test de CSS

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .