La manera más sencilla de agregar modo oscuro a nuestro sitio web es por medio de un atributo extra en el elemento <html>.
El primer paso es agregarlo con el valor del tema por defecto:
Alternativa
Alternativamente podemos usar una clase:
Debemos tener en cuenta que los scripts deben cambiar respectivamente para manipular clases en lugar de data-attributes.
Esto nos ayudará a tener un lugar para guardar el tema actual y poder cambiar su valor mediante JavaScript.
Sobre las preferencias del usuario
Hoy en día podemos obtener el tema preferido del usuario mediante una media query llamada prefers-color-scheme:
De esta podemos conseguir el valor inicial y hacer el cambio correspondiente si el usuario cambia el tema mediante su sistema operativo.
Sobre la interfaz de usuario
También debemos agregar una manera de que el usuario pueda elegir dentro de la página. Para ello vamos a agregar un botón y un script:
Visualización
Ahora que tenemos la funcionalidad básica podemos agregar los estilos:
Visualización
Y cambiar cualquier otro elemento utilizando los selectores necesarios:
Visualización
Sobre la extensibilidad
De esta manera podemos crear diferentes temas. Por ejemplo, si queremos agregar un tema llamado dark-blue sólo tenemos que agregar los estilos correspondientes:
Y crear la interfaz de usuario necesaria. Si es que tenemos más de dos temas lo mejor sería usar un <select> en lugar de un <button>:
También tenemos que asegurarnos de que al cargar la página la opción por defecto sea correcta. Podemos hacerlo de la siguiente manera:
Visualización
Sobre la preservación del tema
Todavía nos falta manejar algunos casos:
Cuando el usuario tiene un tema en nuestra página distinto al de su navegador/sistema operativo.
Cuando hay más de dos temas disponibles y el usuario elige uno diferente al claro u oscuro.
Para ello podemos guardar la preferencia del usuario en localStorage: