Continuando la discusión de Estilizando Discourse con variables: Muestra y cuenta:
Aprecio totalmente el esfuerzo por mejorar la experiencia de tematización de Discourse. Sin embargo, no estoy completamente convencido de que el enfoque de añadir muchas variables CSS como se comparte en el tema anterior sea la solución óptima. Quería compartir algunas ideas sobre por qué.
He estado experimentando con este enfoque yo mismo a través de la Plantilla de Tema Canvas, que esencialmente proporciona una colección de variables ajustables para construir temas base:
:root {
/* Layout */
--d-max-width: 1110px;
--canvas-nav-space: 0.75rem;
--canvas-content-padding: 1.5rem;
--canvas-topic-list-padding: 0.8em;
/* Base Styles */
--canvas-background: var(--secondary);
--canvas-surface: var(--secondary);
--canvas-border: 1px solid var(--primary-500);
--canvas-border-light: 1px solid var(--primary-200);
/* Border Radius */
--d-border-radius: 2px;
--d-border-radius-large: 2px;
--d-button-border-radius: 2px;
--d-input-border-radius: var(--d-button-border-radius);
--d-nav-pill-border-radius: var(--d-button-border-radius);
/* Button Styles */
--canvas-button-padding: 0.5em 0.65em;
--canvas-button-primary-padding: 0.5em 0.65em;
/* Header */
--canvas-header-height: 4rem;
--canvas-header-background: var(--header_background);
--canvas-header-border: none;
--canvas-header-shadow: var(--shadow-header);
/* Sidebar */
--d-sidebar-width: 17em;
--d-sidebar-background: var(--secondary);
--canvas-sidebar-border: 1px solid var(--primary-low);
--canvas-sidebar-scrollbar: var(--scrollbarWidth);
--d-sidebar-row-height: 2.2em;
--d-sidebar-highlight-background: var(--primary-low);
/* Y varias más... */
}
Si bien esto funciona razonablemente bien para ajustes simples, me he encontrado con varias limitaciones al intentar escalar este enfoque:
Sobrecarga Cognitiva y Descubrimiento
Una lista extensa de variables requiere esencialmente una tabla de consulta. Esto se siente desconectado de cómo trabajarías típicamente en un framework basado en componentes, donde realmente esperarías estilizar componentes. Y tal vez sea solo yo, pero siento que cambia el modelo mental de “Quiero estilizar este componente” a “Necesito encontrar el nombre de variable correcto”.
Falta de Lógica de Cascada
La implementación actual asigna valores codificados directamente a las variables sin establecer una jerarquía de cascada adecuada:
--d-sidebar-link-color: var(--primary-high);
--d-nav-background-color--active: transparent;
--table-border-width: 1px;
Esto significa que no hay herencia de variables más generales como --link-color o --border-width. Si quiero hacer cambios sistemáticos, necesito actualizar múltiples variables específicas en lugar de cambiar un valor fundamental.
Brecha Diseño-Desarrollo
Creo que el enfoque crea fricción al trabajar entre herramientas de diseño (como Figma) y la implementación. Los sistemas de diseño suelen utilizar variables semánticas que no se mapean uno a uno con estas variables tan específicas de la implementación.
Un enfoque alternativo que abraza la arquitectura de componentes
Creo que podríamos lograr el mismo objetivo de forma más natural combinando variables semánticas básicas con una segmentación de componentes fiable. En lugar de tener una larga lista de variables específicas, ¿qué pasaría si pudiéramos contar con clases de componentes únicas y con nombres consistentes en todo Discourse? Cosas como .d-sidebar, .d-topic-list, .d-header.
Luego, combínalo con un conjunto más pequeño de variables fundamentales que realmente cascada de la manera en que CSS está destinado a funcionar:
/* Establece la base del diseño */
:root {
--d-border-width: 2px;
--d-surface-color: #3498db;
--d-space-1: 1rem;
}
/* Sobrescribe a nivel de componente cuando necesites hacerlo */
.d-topic-list,
.d-sidebar {
--d-border-width: 1px;
}
Para mí, esto se parece más a cómo funciona CSS de forma natural. Establezco mis estilos globales, luego los refino donde es necesario. Cuando quiero cambiar el aspecto de los bordes en toda la aplicación, cambio una variable. Cuando quiero que la barra lateral sea diferente, apunto específicamente a la barra lateral.

