Temas

    Con sólo unas pocas líneas de código, los usuarios pueden cambiar fácilmente la temática de sus componentes. Al estar desarrollado a través de SASS, el uso de la API es de baja dificultad y ofrece un rediseño de un componente, de varios componentes o de toda la suite.

    The Essence of a Theme

    Dado que IgniteUI para Angular basa sus diseños de componentes en las Directrices de diseño de materiales, intentamos acercarnos lo más posible a los colores, tamaños y apariencia general de nuestros componentes a los creados por Google.

    Nuestro enfoque de la tematización se basa en varios conceptos simples.

    paletas

    El primer concepto es el de paletas de colores. Como en toda herramienta visual, los colores son la principal diferencia entre una aplicación y otra. Las Pautas de diseño de materiales prescriben paletas de colores predefinidas que varían en tono y luminosidad para un color base. Hay una buena razón para ello. Realmente quieren garantizar una buena combinación de colores y contraste entre los colores de fondo y los colores del texto de primer plano. Esto es genial, pero limitante al mismo tiempo. Si quisieras tener tu propia paleta personalizada que coincida con tu marca, no tendrías suerte. Reconocemos que esto es un problema, por lo que inventamos un algoritmo que generaría paletas similares a las de Material a partir de los colores base que usted proporcione. Aún más, también generamos colores de texto de contraste para cada tono de la paleta.

    Temas

    El segundo concepto es el de temas. Las paletas no servirían de mucho si no fueran utilizadas por un tema. Entonces tenemos temas para cada componente, y uno global, que le da estilo a toda la aplicación y a cada componente que contiene. Simplemente pasa tu paleta generada al tema global, nosotros nos encargamos del resto. Por supuesto, puedes diseñar cada componente individualmente a tu gusto. Veremos más de cerca cómo hacerlo más adelante en este artículo.

    Tipografía

    El último concepto gira en torno a la tipografía. Aunque tenemos una opción de tipo de letra predeterminada, realmente queremos brindarle el poder de diseñar su aplicación en todos los sentidos. La tipografía es una parte muy importante de eso. Proporcionamos un método para cambiar la familia de fuentes, los tamaños y pesos de los títulos, subtítulos y textos de párrafos en su aplicación.

    La tematización requiere Sass.

    Generating Color Palettes

    Nuestra biblioteca de temas está basada en Sass. Si usó la CLI de Ignite UI para arrancar su aplicación, puede especificar el estilo en la configuración de angular.json​ ​a scss, la CLI se encargará de compilar los estilos de Sass por usted. Si no ha utilizado Ignite UI CLI, debe configurar su creador para compilar estilos de Sass por usted.

    Nuestras paletas aceptan argumentos para primary, secondary, surface, info, success,, warn y error colores. El color primario es el que será el color más prominente en toda la aplicación. El color secundario es el que se utiliza en los elementos que se pueden accionar, como botones, interruptores, controles deslizantes, etc. El color de la superficie se utiliza para el color de fondo de algunos de los componentes. Los únicos argumentos necesarios son los unos para,y primary​ ​secondary​ ​surface colores. De forma predeterminada, los valores son for info, success, warn, y error a un conjunto predefinido de nuestra elección.

    Para comenzar con nuestra primera paleta de colores, cree un archivo scss que será el archivo base para su tema global. Llamaré al mío "my-app-theme.scss".

    @use "igniteui-angular/theming" as *;
    
    // IMPORTANT: Prior to Ignite UI for Angular version 13 use:
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    
    $company-color: #2ab759; // Some green shade I like
    $secondary-color: #f96a88; // Watermelon pink
    $surface-color: #e5e5e5; // Light gray
    
    $my-color-palette: palette(
      $primary: $company-color,
      $secondary: $secondary-color,
      $surface: $surface-color
    );
    scss

    ¡Ahora tenemos una paleta que contiene exactamente 216 colores! Vaya, espera, ¿qué? ¿Cómo sucedió eso? ¿Proporcionaste 3 y obtuviste 216? ¿De dónde salieron los otros 213 colores? Detengámonos aquí para explicar lo que acaba de suceder, ya que es bastante importante. Cuando proporcionó primary, secondary y surface colores, los tomamos y generamos tonos y colores de acento para cada uno. Básicamente, secondary ahora en tu paleta tienes 3 subpaletas para primary y surface colores. Cada subpaleta contiene 13 variaciones de color adicionales basadas en el color original. 5 de los 13 colores son tonos más claros del color original y 4 son más oscuros. Los 4 colores restantes son versiones de "acento" más exageradas del color original. Con el color original que hace un total de 14 colores en cada paleta.

    Con tantos colores en cada subpaleta te estarás preguntando, ¿cómo diablos sabré cuál es cuál, verdad? Es bastante simple, en realidad. Cada uno de los colores de la subpaleta tiene un número. Asignamos el número 500 al color original. Los tonos más claros comienzan desde 50 y van hasta 400. Los tonos más oscuros comienzan desde 600 y van hasta 900. Los colores de énfasis tienen nombres A100 de cadena, A200, A400, y A700, respectivamente. Está bien, pero ahora son solo 42 de 216. No te preocupes, hay otra subpaleta que te damos. Uno que consiste en 'colores' grises, llamados grays. Es igual que las otras dos subpaletas de colores, pero no incluye ninguna variación de acento. Bien, ahora estamos hasta 42 + 10 para un total de 52 colores. Todavía está muy lejos de los 216. ¿De dónde vienen los otros 164 colores? Resolvamos el rompecabezas final. Recuerde que también puede tener 4 colores adicionales para info, success, warn y error. Así que eso deja otros 56 colores sin contabilizar. Recuerde que el recuento de las secondary​ ​info​ ​surface​ ​grays​ ​primary​ ​success​ ​warn​ ​error paletas y subpaletas fue exactamente 108, que es la mitad de los 216 colores. La mitad restante de los colores son los colores de texto de contraste para cada variante de color, todos tienen-contrast como sufijo en su nombre de variable y son blancos o negros.

    ¿Entiendo? ¡Bien! Pero, ¿cómo se accede a cualquiera de los colores de la paleta?

    Obtener colores de subpaleta

    Proporcionamos una función que es fácil de recordar y usar color. Se necesitan tres argumentos -palette, color, y variant;

    $my-primary-600: color($my-color-palette, "primary", 600);
    $my-primary-A700: color($my-color-palette, "secondary", "A700");
    $my-warning-color: color($my-color-palette, "warn");
    // sample usage
    
    .my-awesome-class {
      background: $my-primary-600;
      border-color: $my-primary-A700;
    }
    
    .warning-bg {
      background: $my-warning-color;
    }
    scss

    Obtener colores de texto de contraste

    De manera similar a cómo obtenemos colores de subpaletas, hay una manera de obtener el color de texto de contraste para cada uno de los colores de las subpaletas.

    $my-primary-800: color($my-palette, "primary", 600);
    $my-primary-800-text: contrast-color($my-palette, "primary", 600);
    // sample usage
    
    .my-awesome-article {
      background: $my-primary-800;
      color: $my-primary-800-text;
    }
    scss

    Generating a Theme

    Si ha incluido el archivo "igniteui-angular.css" en el proyecto de su aplicación, ahora es un buen momento para eliminarlo. Usaremos nuestro propio archivo "my-app-theme.scss" para generar nuestro propio tema.

    Comencemos desde nuestro primer ejemplo en esta página. Esta vez, sin embargo, vamos a incluir dos mezclas core y theme; Por ahora core no acepta ningún argumento. theme, sin embargo, sí acepta algunos -$palette, $schema, $exclude, $roundness, $elevation,. $elevations Por ahora, solo hablaremos del $palette argumento.

    Incluir core antes que theme es esencial. El mixin core proporciona todas las definiciones básicas necesarias para que theme funcione.

    // Import the IgniteUI themes library first
    @use "igniteui-angular/theming" as *;
    
    // IMPORTANT: Prior to Ignite UI for Angular version 13 use:
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    
    $company-color: #2ab759; // Some green shade I like
    $secondary-color: #f96a88; // Watermelon pink
    $surface-color: #e5e5e5; // Light gray
    
    $my-color-palette: palette(
      $primary: $company-color,
      $secondary: $secondary-color,
      $surface: $surface-color
    );
    
    // IMPORTANT: Make sure you always include core first!
    @include core();
    // Pass the color palette we generated to the theme mixin
    @include theme($my-color-palette);
    scss

    Eso es todo. Su aplicación ahora utilizará los colores de su paleta recién generada.

    En su estado actual, la definición de tipografía personalizada se limita a cambiar la font family de la aplicación. Actualizaremos esta funcionalidad en versiones posteriores. Nuestra intención es proporcionar una forma sólida de personalizar la tipografía en su aplicación.

    Para personalizar la tipografía utilice el mixin typography. Se necesita exactamente un argumento: config.

    Incluir typography después core es fundamental. Esto está sujeto a cambios en futuras versiones.

    // Import the IgniteUI themes library first
    @use "igniteui-angular/theming" as *;
    
    // IMPORTANT: Prior to Ignite UI for Angular version 13 use:
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    
    // IMPORTANT: Make sure you always include core first!
    @include core();
    // Include typography before theme
    @include typography(
      $config: (
        font-family: "Comic Sans MS",
      )
    );
    @include theme($default-palette);
    scss