Modo oscuro moderno: prefers-color-scheme y theming

Implementa dark mode robusto con tokens CSS, preferencia del sistema y override manual sin romper accesibilidad.

Dark mode moderno no es invertir colores: es diseñar tokens para ambos contextos de iluminación.

Con variables CSS puedes cambiar paleta completa sin duplicar reglas por componente.

La mejor estrategia combina preferencia del sistema y override manual del usuario.

  • Cambia variables, no componentes enteros.
  • Define un set mínimo de tokens: fondo, superficie, texto y acento. Sobre ellos construyes todo el sistema visual.
  • Después puedes activar tema oscuro con media query o atributo en <code>html</code>.
  • Soporte automático para usuarios que ya usan modo oscuro.
  • <code>@media (prefers-color-scheme: dark)</code> permite adaptar estilos cuando el sistema operativo está en oscuro.

Tokens para tema claro y oscuro

Cambia variables, no componentes enteros.

Define un set mínimo de tokens: fondo, superficie, texto y acento. Sobre ellos construyes todo el sistema visual.

Después puedes activar tema oscuro con media query o atributo en <code>html</code>.

Preferencia del sistema

Soporte automático para usuarios que ya usan modo oscuro.

<code>@media (prefers-color-scheme: dark)</code> permite adaptar estilos cuando el sistema operativo está en oscuro.

Si ofreces toggle manual, prioriza el valor elegido por usuario sobre la preferencia automática.

CSS
44

Modo oscuro moderno: prefers-color-scheme y theming

Implementa dark mode robusto con tokens CSS, preferencia del sistema y override manual sin romper accesibilidad.

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

📘 Teoría

Tokens para tema claro y oscuro

Cambia variables, no componentes enteros.

1

Define un set mínimo de tokens: fondo, superficie, texto y acento. Sobre ellos construyes todo el sistema visual.

2

Después puedes activar tema oscuro con media query o atributo en html.

Base de tokens
:root {
  --bg: #f8fafc;
  --surface: #ffffff;
  --text: #0f172a;
  --accent: #2563eb;
  color-scheme: light;
}

:root[data-theme='dark'] {
  --bg: #0b1220;
  --surface: #111827;
  --text: #e2e8f0;
  --accent: #60a5fa;
  color-scheme: dark;
}

Preferencia del sistema

Soporte automático para usuarios que ya usan modo oscuro.

1

@media (prefers-color-scheme: dark) permite adaptar estilos cuando el sistema operativo está en oscuro.

2

Si ofreces toggle manual, prioriza el valor elegido por usuario sobre la preferencia automática.

Media query de preferencia
@media (prefers-color-scheme: dark) {
  :root:not([data-theme='light']) {
    --bg: #0b1220;
    --surface: #111827;
    --text: #e2e8f0;
  }
}

🧪 Aprende probando

Ejemplo Demo: tarjeta con tema El componente usa solo tokens y no depende del tema explícito.

🏁 Retos

Reto Reto: override manual Activa una paleta oscura con [data-theme='dark'].

🧰 Recursos

Enlaces útiles

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 .