Español

Explore la regla @when de CSS, una potente función que permite la aplicación de estilos condicionales según el soporte del navegador, el tamaño de la ventana y más. Aprenda con ejemplos prácticos.

Regla @when de CSS: Dominando la Aplicación de Estilos Condicionales

El mundo de CSS está en constante evolución, ofreciendo a los desarrolladores formas más potentes y flexibles de estilizar páginas web. Una de estas características que está ganando terreno es la regla @when, también conocida como el Módulo de Reglas Condicionales de CSS Nivel 1. Esta regla le permite aplicar estilos CSS condicionalmente, basándose en el cumplimiento de condiciones específicas. Es una herramienta poderosa para el diseño responsivo, la detección de características y la creación de hojas de estilo más robustas y adaptables.

¿Qué es la Regla @when de CSS?

La regla @when es una at-rule condicional en CSS que le permite definir estilos que solo se aplican si ciertas condiciones son verdaderas. Piense en ella como una declaración if para su CSS. A diferencia de las media queries, que se centran principalmente en las características de la ventana gráfica (tamaño de la pantalla, orientación, etc.), @when proporciona una forma más general y extensible de manejar el estilo condicional. Amplía las at-rules condicionales existentes como @supports y @media.

Ventajas Clave de Usar @when

Sintaxis de la Regla @when

La sintaxis básica de la regla @when es la siguiente:
@when <condition> {
  /* Reglas CSS a aplicar cuando la condición es verdadera */
}

La <condition> puede ser cualquier expresión booleana válida que se evalúe como verdadera o falsa. Esta expresión a menudo involucra:

Ejemplos Prácticos de @when en Acción

Exploremos algunos ejemplos prácticos para ilustrar el poder y la versatilidad de la regla @when.

1. Diseño Responsivo con @when y Media Queries

El caso de uso más común para @when es el diseño responsivo, donde se ajustan los estilos según el tamaño de la pantalla. Aunque las media queries pueden lograr esto por sí solas, @when proporciona un enfoque más estructurado y legible, especialmente al tratar con condiciones complejas.

@when (min-width: 768px) and (max-width: 1023px) {
  body {
    font-size: 18px;
    line-height: 1.6;
  }
  .container {
    width: 720px;
    margin: 0 auto;
  }
}

En este ejemplo, los estilos dentro del bloque @when se aplican solo cuando el ancho de la pantalla está entre 768px y 1023px (tamaño típico de una tableta). Esto proporciona una forma clara y concisa de definir estilos para rangos de ventana gráfica específicos.

Nota de Internacionalización: El diseño responsivo es fundamental para una audiencia global. Considere los diferentes tamaños de pantalla en distintas regiones. Por ejemplo, el uso de móviles es mayor en algunos países, lo que hace que el diseño "mobile-first" sea aún más crucial.

2. Detección de Características con @when y @supports

@when se puede combinar con @supports para aplicar estilos solo cuando una característica CSS específica es soportada por el navegador. Esto le permite mejorar progresivamente su sitio web, proporcionando una mejor experiencia para los usuarios con navegadores modernos mientras se mantiene la compatibilidad con los más antiguos.

@when supports(display: grid) {
  .container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    grid-gap: 20px;
  }
}

@when not supports(display: grid) {
  .container {
    /* Estilos de respaldo para navegadores que no soportan grid */
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
  }
  .item {
    width: calc(50% - 10px); /* Ajustar el ancho para navegadores más antiguos */
  }
}

Aquí, usamos @supports para verificar si el navegador soporta CSS Grid Layout. Si es así, aplicamos estilos basados en grid al .container. Si no, proporcionamos estilos de respaldo usando flexbox para asegurar que se logre un diseño similar en navegadores más antiguos.

Nota de Accesibilidad Global: La detección de características es importante para la accesibilidad. Los navegadores más antiguos pueden carecer de soporte para nuevos atributos ARIA o elementos semánticos de HTML5. Proporcione respaldos apropiados para asegurar que el contenido permanezca accesible.

3. Combinando Media Queries y Feature Queries

El verdadero poder de @when proviene de su capacidad para combinar media queries y feature queries para crear reglas de estilo condicionales más complejas y matizadas.

@when (min-width: 768px) and supports(backdrop-filter: blur(10px)) {
  .modal {
    background-color: rgba(255, 255, 255, 0.8);
    backdrop-filter: blur(10px);
  }
}

En este ejemplo, el elemento .modal solo tendrá un fondo desenfocado cuando el ancho de la pantalla sea de al menos 768px y el navegador soporte la propiedad backdrop-filter. Esto le permite crear efectos visualmente atractivos en navegadores modernos mientras evita posibles problemas de rendimiento o fallos de renderizado en los más antiguos.

4. Estilo Basado en Propiedades Personalizadas (Variables CSS)

@when también se puede usar en conjunto con Propiedades Personalizadas de CSS (también conocidas como variables CSS) para crear estilos dinámicos y basados en el estado. Puede usar JavaScript para actualizar el valor de una propiedad personalizada y luego usar @when para aplicar diferentes estilos basados en ese valor.

Primero, defina una propiedad personalizada:

:root {
  --theme-color: #007bff; /* Color de tema predeterminado */
  --is-dark-mode: false;
}

Luego, use @when para aplicar estilos basados en el valor de la propiedad personalizada:

@when var(--is-dark-mode) = true {
  body {
    background-color: #333;
    color: #fff;
  }
  a {
    color: #ccc;
  }
}

Finalmente, use JavaScript para alternar el valor de la propiedad personalizada --is-dark-mode:

document.getElementById('darkModeToggle').addEventListener('click', function() {
  document.documentElement.style.setProperty('--is-dark-mode', this.checked);
});

Esto permite a los usuarios cambiar entre temas claro y oscuro, con el CSS actualizándose dinámicamente según el valor de la propiedad personalizada. Tenga en cuenta que la comparación directa de variables CSS en @when podría no ser universalmente soportada en todos los navegadores. En su lugar, podría necesitar usar una solución alternativa con una media query que verifique un valor no nulo:

@when ( --is-dark-mode > 0 ) { ... }

Sin embargo, asegúrese de que la propiedad personalizada tenga un valor numérico para que esto funcione correctamente.

Nota de Accesibilidad: Proporcionar temas alternativos (p. ej., modo oscuro) es crucial para la accesibilidad. Los usuarios con discapacidades visuales pueden beneficiarse de temas de alto contraste. Asegúrese de que su cambio de tema sea accesible mediante el teclado y los lectores de pantalla.

5. Estilo Basado en Atributos de Datos

También puede usar @when con atributos de datos para estilizar elementos según sus valores de datos. Esto puede ser útil para crear interfaces dinámicas donde los elementos cambian de apariencia según la interacción del usuario o las actualizaciones de datos.

Por ejemplo, digamos que tiene una lista de tareas y cada tarea tiene un atributo data-status que indica su estado (p. ej., "todo", "in-progress", "completed"). Puede usar @when para estilizar cada tarea de manera diferente según su estado.

[data-status="todo"] {
  /* Estilos predeterminados para tareas pendientes */
  color: #333;
}

@when attribute(data-status string equals "in-progress") {
  [data-status="in-progress"] {
    color: orange;
    font-style: italic;
  }
}

@when attribute(data-status string equals "completed") {
  [data-status="completed"] {
    color: green;
    text-decoration: line-through;
  }
}

Nota: el soporte para la condición de prueba attribute() puede ser limitado o no estar completamente implementado en todos los navegadores actualmente. Siempre realice pruebas exhaustivas.

Compatibilidad de Navegadores y Polyfills

A finales de 2024, el soporte de los navegadores para la regla @when todavía está evolucionando. Aunque muchos navegadores modernos soportan la funcionalidad principal, es posible que algunos navegadores más antiguos no lo hagan. Por lo tanto, es crucial verificar las tablas de compatibilidad y usar respaldos o polyfills apropiados cuando sea necesario.

Siempre consulte recursos como Can I use... para verificar el estado actual de soporte de navegadores para @when y características relacionadas.

Mejores Prácticas para Usar @when

Conclusión

La regla @when es una adición poderosa a la caja de herramientas de CSS, que ofrece a los desarrolladores una forma más flexible y expresiva de aplicar estilos condicionalmente. Al combinarla con media queries, feature queries y Propiedades Personalizadas de CSS, puede crear hojas de estilo más robustas, adaptables y mantenibles. Aunque el soporte de los navegadores aún está evolucionando, @when es una característica que vale la pena explorar e incorporar en su flujo de trabajo de desarrollo web moderno.

A medida que la web continúa evolucionando, dominar características como @when será esencial para crear experiencias atractivas, accesibles y de alto rendimiento para usuarios de todo el mundo. Abrace el poder del estilo condicional y desbloquee nuevas posibilidades en su desarrollo CSS.