Skip to main content

Herencia de temas

Un tema puede heredar de otro y redefinir solo lo que cambia. Es la forma recomendada de crear variantes: en lugar de duplicar todo el tema base, declaras un tema hijo que apunta al padre y sobrescribe unas pocas variables o archivos.

Declarar el tema padre

En el tema.config del hijo, el atributo temaBase nombra al padre:

<?xml version="1.0" encoding="utf-8"?>
<Tema temaBase="Compacto"
titulo="Compacto Azul"
descripcion="'Compacto Azul' tema predeterminado"
autor="Crono"
version="1.1">
<Vars>
<Var nombre="primario" tipo="Color">#054484</Var>
<Var nombre="primary" tipo="Color">$primario</Var>
<Var nombre="body-bg" tipo="Color">white</Var>
<Var nombre="body-color" tipo="Color">black</Var>
<!-- solo lo que cambia respecto de Compacto -->
</Vars>
</Tema>

La cadena de herencia puede tener varios niveles (un hijo puede heredar de otro tema que a su vez hereda).

Sobrescribir variables

Basta con declarar un <Var> con el mismo nombre que en el padre; el valor del hijo gana. El resto de variables se heredan tal cual. El ejemplo de Compacto Azul es exactamente esto: hereda de Compacto y solo redefine el color primario, los fondos, algunos colores de la barra lateral y de la grilla de datos. Todo lo demás (radios, tipografías, botones, tamaños) viene del padre.

Sobrescribir archivos (SCSS y vistas)

Cuando cambiar variables no basta, el hijo puede sobrescribir archivos colocándolos en la misma ruta relativa que en el padre:

  • SCSS: crear un parcial con el mismo nombre en el wwwroot/ del hijo reemplaza al del padre. Así puedes rehacer, por ejemplo, _menu.scss sin tocar el resto del tema.
  • Vistas Razor: copiar una vista en la misma ruta dentro de Views/ del hijo la reemplaza para ese tema.
  • Recursos estáticos: cualquier archivo de wwwroot (imágenes, fuentes, JS) se puede sobrescribir de la misma manera.

Resolución de archivos

Al resolver un archivo (una vista, un parcial, un recurso estático), el sistema busca primero en el tema activo, luego en su tema base, y así hacia arriba por la cadena de herencia, cayendo finalmente en los archivos del propio proyecto web y de los módulos. La primera coincidencia gana. Ese orden de búsqueda es lo que hace que un tema hijo pueda cambiar solo lo justo y apoyarse en el padre para todo lo demás.

tip

Mantén los temas hijos lo más pequeños posible: cuantas menos variables y archivos sobrescriban, más fácil será heredar mejoras del tema base cuando este se actualice.