Español

Explore el poder de las media queries y las propiedades personalizadas de CSS para crear temas claros y oscuros automáticos que se adaptan a las preferencias del usuario, mejorando la accesibilidad y el atractivo visual para una audiencia global.

Función Light-Dark de CSS: Adaptación Automática de Temas para una Web Global

En el mundo globalmente conectado de hoy, los sitios web necesitan ser accesibles y visualmente atractivos para usuarios de diversos orígenes y preferencias. Una de las formas más efectivas de lograr esto es a través de la adaptación automática de temas, ofreciendo específicamente temas claros y oscuros que se ajustan según la configuración del sistema del usuario. Esta publicación de blog lo guiará a través de la implementación de esta funcionalidad utilizando media queries y propiedades personalizadas de CSS, asegurando una experiencia de navegación fluida y cómoda para su audiencia internacional.

¿Por Qué Implementar Temas Claros y Oscuros Automáticos?

Hay varias razones convincentes para incorporar la adaptación automática de temas en sus proyectos web:

Cómo Implementar la Adaptación Automática de Temas con CSS

El núcleo de la adaptación automática de temas reside en la media query prefers-color-scheme. Esta media query de CSS le permite detectar el esquema de color preferido del usuario (claro u oscuro) y aplicar los estilos correspondientes.

Paso 1: Definir Propiedades Personalizadas (Variables de CSS)

Comience por definir propiedades personalizadas (variables de CSS) para almacenar los valores de color para sus temas claro y oscuro. Esto facilita el cambio entre temas simplemente actualizando los valores de las variables.


:root {
  --background-color: #ffffff; /* Fondo del tema claro */
  --text-color: #000000; /* Texto del tema claro */
  --link-color: #007bff; /* Enlace del tema claro */
  --button-background-color: #f0f0f0;
  --button-text-color: #000;
}

@media (prefers-color-scheme: dark) {
  :root {
    --background-color: #121212; /* Fondo del tema oscuro */
    --text-color: #ffffff; /* Texto del tema oscuro */
    --link-color: #66b3ff; /* Enlace del tema oscuro */
    --button-background-color: #333;
    --button-text-color: #fff;
  }
}

En este ejemplo, definimos variables para el color de fondo, color de texto, color de enlace y colores de botón. El selector :root aplica estas variables a todo el documento. La media query @media (prefers-color-scheme: dark) luego anula estas variables con valores del tema oscuro cuando el usuario ha configurado su sistema en modo oscuro.

Paso 2: Aplicar Propiedades Personalizadas a sus Estilos

A continuación, aplique estas propiedades personalizadas a sus estilos CSS para controlar la apariencia de los elementos de su sitio web.


body {
  background-color: var(--background-color);
  color: var(--text-color);
  transition: background-color 0.3s, color 0.3s; /* Transición suave */
}

a {
  color: var(--link-color);
}

button {
  background-color: var(--button-background-color);
  color: var(--button-text-color);
  border: none;
  padding: 10px 20px;
  cursor: pointer;
}

Aquí, estamos usando la función var() para acceder a los valores de nuestras propiedades personalizadas. También hemos agregado una propiedad transition al elemento body para crear una transición suave entre los temas.

Paso 3: Pruebas y Refinamiento

Pruebe exhaustivamente su implementación en diferentes navegadores y sistemas operativos. Los navegadores modernos como Chrome, Firefox, Safari y Edge son totalmente compatibles con la media query prefers-color-scheme. Puede cambiar entre los modos claro y oscuro en la configuración de su sistema operativo para ver los cambios reflejados en su sitio web.

Técnicas y Consideraciones Avanzadas

Proporcionar un Interruptor de Tema Manual

Aunque la adaptación automática de temas es un excelente punto de partida, algunos usuarios pueden preferir anular manualmente la configuración de su sistema. Puede proporcionar un interruptor de tema manual usando JavaScript y el almacenamiento local.

HTML:



JavaScript:


const themeToggle = document.getElementById('theme-toggle');
const body = document.body;

let currentTheme = localStorage.getItem('theme') || 'auto'; // Por defecto, 'auto'

function setTheme(theme) {
  if (theme === 'dark') {
    body.classList.add('dark-theme');
    body.classList.remove('light-theme');
  } else if (theme === 'light') {
    body.classList.add('light-theme');
    body.classList.remove('dark-theme');
  } else {
    body.classList.remove('light-theme', 'dark-theme');
  }
  localStorage.setItem('theme', theme);
  currentTheme = theme;
}

// Aplicar el tema inicial al cargar la página
if (currentTheme === 'dark') {
  setTheme('dark');
} else if (currentTheme === 'light') {
  setTheme('light');
} else {
  //Si está en 'auto', permitir que prefers-color-scheme decida
}


themeToggle.addEventListener('click', () => {
    if (currentTheme === 'auto'){
        setTheme('light');
    } else if (currentTheme === 'light') {
        setTheme('dark');
    } else {
        setTheme('auto');
    }
});

CSS: Añada el siguiente CSS junto con el CSS anterior. Observe la anulación manual:


body.light-theme {
  --background-color: #ffffff; /* Fondo del tema claro */
  --text-color: #000000; /* Texto del tema claro */
  --link-color: #007bff; /* Enlace del tema claro */
  --button-background-color: #f0f0f0;
  --button-text-color: #000;
}

body.dark-theme {
  --background-color: #121212; /* Fondo del tema oscuro */
  --text-color: #ffffff; /* Texto del tema oscuro */
  --link-color: #66b3ff; /* Enlace del tema oscuro */
  --button-background-color: #333;
  --button-text-color: #fff;
}

Este fragmento de código añade un botón que permite a los usuarios alternar entre los temas claro, oscuro y automático. El tema seleccionado se almacena en el almacenamiento local para que persista entre cargas de página.

Manejo de Imágenes y SVGs

Algunas imágenes y SVGs pueden no verse bien tanto en temas claros como oscuros. Puede usar media queries de CSS para mostrar condicionalmente diferentes versiones de estos activos.


img.light-mode {
  display: block;
}

img.dark-mode {
  display: none;
}

@media (prefers-color-scheme: dark) {
  img.light-mode {
    display: none;
  }

  img.dark-mode {
    display: block;
  }
}

Este fragmento de código muestra una imagen (con la clase light-mode) en modo claro y una imagen diferente (con la clase dark-mode) en modo oscuro.

Consideraciones sobre la Paleta de Colores para Audiencias Internacionales

Al elegir paletas de colores para sus temas claro y oscuro, tenga en cuenta las asociaciones culturales y las consideraciones de accesibilidad. Aquí hay algunas pautas generales:

Consideraciones de Rendimiento

Aunque la implementación de la adaptación automática de temas es relativamente sencilla, es importante considerar el impacto potencial en el rendimiento. Evite usar selectores CSS o animaciones demasiado complejos que puedan ralentizar la renderización. Además, asegúrese de que sus propiedades personalizadas estén definidas de manera eficiente para minimizar la sobrecarga de la búsqueda de variables.

Aquí hay algunas mejores prácticas para optimizar el rendimiento:

Mejores Prácticas de Accesibilidad

Asegúrese de que sus temas claro y oscuro cumplan con las pautas de accesibilidad, como las WCAG (Pautas de Accesibilidad al Contenido Web). Esto incluye proporcionar suficiente contraste de color, usar HTML semántico y asegurarse de que todos los elementos interactivos sean accesibles por teclado.

Aquí hay algunas mejores prácticas de accesibilidad específicas a seguir:

Ejemplos en Diferentes Regiones

Considere estos ejemplos de cómo los temas claros y oscuros pueden adaptarse a audiencias globales diversas:

Conclusión

La implementación de temas claros y oscuros automáticos es un paso crucial hacia la creación de una experiencia web más accesible y fácil de usar para una audiencia global. Al aprovechar las media queries y las propiedades personalizadas de CSS, puede adaptar fácilmente la apariencia de su sitio web para que coincida con las preferencias del usuario, reducir la fatiga visual y mejorar la accesibilidad para los usuarios con discapacidades visuales. Recuerde considerar las asociaciones culturales, las pautas de accesibilidad y las consideraciones de rendimiento para garantizar una experiencia de navegación fluida e inclusiva para todos.

Al adoptar estas técnicas, demuestra un compromiso con los principios modernos de diseño web y atiende las diversas necesidades de su audiencia internacional, haciendo de su sitio web un espacio acogedor y cómodo para todos.