esquemas
Los esquemas son una forma sencilla y declarativa de enumerar todas las propiedades que utiliza un tema componente.
Descripción general
Los esquemas son como recetas. Son mapas Sass simples, similares a JSON, que nos permiten definir todas las propiedades que podría usar un tema. Esas propiedades pueden ser colores, niveles de elevación, redondez, etc. Cualquier cosa que consuma un tema puede describirse como un schema
y luego pasarse al tema global o componente. Un esquema de componente puede ampliar un esquema de componente existente y anular sus propiedades.
Los esquemas deben usarse cuando desee cambiar las propiedades del tema predeterminado de un componente de una manera que no resulte en la duplicación de reglas de estilo CSS o variables CSS.
Echemos un vistazo al esquema de Material Avatar ligero:
$_light-avatar: extend(
$_square-shape-avatar,
(
background: (
color: ('gray', 400)
),
color: (
color: ('gray', 800)
),
)
);
Como puede ver en el ejemplo anterior, el esquema del componente define las propiedades que consume el tema Avatar. Simplemente prescribe los colores que debe usar el avatar, sin hacer referencia a un mapa de paleta de colores concreto.
Tomemos como ejemplo la propiedad background
. Le dice al tema del avatar cuál debería ser el fondo predeterminado.
Al background
se le puede asignar cualquier valor, es decir, un valor que se puede asignar a la propiedad background-color
de CSS. También puedes asignar un mapa al background
, como en el ejemplo anterior. Cuando asigna un mapa a la propiedad background
, el mapa debe contener funciones como nombres de claves (por ejemplo, color
) y argumentos para las funciones como valores para dichas claves. Hacemos esto para poder resolver los valores más adelante, cuando se esté creando el tema del avatar. Mira, como no conocemos la paleta que un usuario podría pasar al tema de avatar, deberíamos poder resolverlo más adelante, solo cuando conozcamos la paleta.
También podemos agregar otras funciones y argumentos al mapa background
como pares clave-valor. Por ejemplo, es posible que deseemos ejecutar el resultado resuelto de color: ('gray', 400)
a través de la función to-opaque
que tenemos, para resolver el valor HEX para la variante de color 400
de la paleta gray
, que generalmente se representa en rgba. .
Veamos cómo cambiará el esquema cuando hagamos esta adición:
$_light-avatar: (
icon-background: (
color: ('gray', 400),
to-opaque: #fff
),
...
);
El resultado de la llamada a la función de color
se pasará automáticamente como primer argumento a la función to-opaque
. Dado que to-opaque
acepta un segundo argumento para el color de fondo, lo proporcionamos como valor. Si la función no acepta ningún argumento adicional, debe asignar una lista vacía ()
como valor.
Extending Schemas
Como vio en el ejemplo anterior. Los esquemas son mapas simples y, como tales, pueden ampliarse anulando algunas de sus propiedades. Es posible que desee ampliar el esquema de avatar del material cambiando únicamente su propiedad background
, sin tener que copiar todas las demás propiedades manualmente. Esto se hace fácilmente utilizando la función extend
que proporcionamos.
$my-avatar-schema: extend($_light-avatar, (
background: limegreen
));
Ahora el valor de $my-avatar-schema
contendrá todas las propiedades de $_light-avatar
, pero el valor de background
será limegreen
.
Predefined Schemas
Proporcionamos esquemas de luz y oscuridad predefinidos que utilizamos en nuestros ajustes preestablecidos de temas:
- Esquemas de luz
- $ esquema-material-ligero
- $ esquema-fluido-luz
- $esquema-bootstrap-luz
- $esquema-índigo-claro
- Esquemas oscuros
- $esquema-de-material-oscuro
- $ esquema-fluido-oscuro
- $ esquema-bootstrap-oscuro
- $esquema-índigo-oscuro
Usamos los esquemas claros y oscuros de acuerdo con las paletas claras y oscuras para crear los temas componentes. Por ejemplo, usar el $light-material-schema
junto con la $light-material-palette
nos ayudará a crear todos los temas de los componentes de material ligero. Y viceversa: usar el $dark-material-schema
junto con la $dark-material-palette
nos dará los temas del componente de material oscuro.
Consuming Schemas
Hasta ahora hemos mostrado qué es un esquema de componente y cómo puedes crear uno, pero no hemos hablado sobre cómo puedes usar esquemas en tu proyecto Sass.
Los esquemas de componentes individuales se agrupan en un mapa de esquema global para todos los componentes que tenemos. Entonces, el esquema $_light-avatar
es parte del $light-material-schema
global. El $light-material-schema
asigna esquemas de componentes a nombres de componentes. El $light-material-schema
se parece a esto:
$light-material-schema: (
igx-avatar: $_light-avatar,
igx-badge: $_light-badge,
...
);
Hacemos esto para poder pasar todo el $light-material-schema
al theme
mixin. Entonces, por ejemplo, si quisiéramos modificar el $light-material-schema
reemplazando el esquema del componente predeterminado que usa el componente avatar, podríamos hacer:
$my-light-schema: extend($light-material-schema, (
igx-avatar: $my-avatar-schema
));
Ahora podemos pasar todo eso al mixin de temas global:
// styles.scss
@include theme(
$schema: $my-light-schema,
$palette: $default-palette
);
Los avatares en su tema global ahora tendrán el color verde lima como fondo.
Algunos esquemas de componentes, como el esquema de botones, tienen definiciones de propiedades para la redondez. Esto significa que puede cambiar la redondez predeterminada de todos los botones.
Finalmente, veamos cómo los temas de componentes individuales pueden usar el esquema que creamos anteriormente.
$my-avatar-theme: avatar-theme(
$schema: $my-avatar-schema
);
Conclusions
Aunque los esquemas requieren un conocimiento más profundo de nuestra biblioteca de temas en comparación con las funciones de temas y mixins, nos permiten declarar temas de componentes sin aumentar el tamaño del CSS producido. Otro beneficio de usar esquemas es lo reutilizables y extensibles que son, ya que son mapas Sass simples. Puede mezclar y combinar esquemas de componentes para crear esquemas de temas globales.
Usamos esquemas internamente para crear variaciones que dan como resultado diferentes temas preempaquetados para Material, Bootstrap, Fluent e Indigo.
API Overview
- Esquema de avatar
- Esquema de componentes ligeros
- Esquema de componentes oscuros
- Tema global
- Tema de avatar
Additional Resources
Nuestra comunidad es activa y siempre da la bienvenida a nuevas ideas.