web-dev-qa-db-fra.com

Comment créer un thème de couleur personnalisé avec angular5 et angular

J'ai suivi la documentation angulaire/matérielle pour savoir comment créer un thème personnalisé, suivi d'autres blogs et vérifié diverses questions similaires sur le débordement de pile, mais je n'arrive pas à faire fonctionner cela. J'ai les styles.css, angular-cli.json, theme.scss et un autre fichier sass suivants où les couleurs de mon thème proviennent de super-styles.sass.

styles.css

...
@import 'assets/styles/theme.scss';
...

angular-cli.json

...
"styles": [
   "styles.css",
    "src/assets/styles/theme.scss"
],
...

theme.scss

@import '~@angular/material/theming';
@import "super-styles";

// Plus imports for other components in your app.

// Include the common styles for Angular Material. We include this here so that you only
// have to load a single css file for Angular Material in your app.
// Be sure that you only ever include this mixin once!
@include mat-core()

// Define the palettes for your theme using the Material Design palettes available in palette.scss
// (imported above). For each palette, you can optionally specify a default, lighter, and darker
// hue.
$candy-app-primary: mat-palette($darkblue, A400);
$candy-app-accent:  mat-palette($orange, A400);

// The warn palette is optional (defaults to red).
$candy-app-warn:    mat-palette($alert);

// Create the theme object (a Sass map containing all of the palettes).
$candy-app-theme: mat-light-theme($candy-app-primary, $candy-app-accent, $candy-app-warn);

// Include theme styles for core and each component used in your app.
// Alternatively, you can import and @include the theme mixins for each component
// that you are using.
@include angular-material-theme($candy-app-theme);

Super-styles.sass

...
$darkblue: #7faedd
$mediumblue: #85ceef
$lightblue: #c5e8f1
$yellow: #f4ef5f
$alert: #f37652
$orange: #fbb03c
...

Selon les tutoriels, je pense que cela devrait fonctionner, mais angular ne compile pas et j'obtiens une erreur.

ERREUR dans ./node_modules/css-loader?{"sourceMap":false,"importLoaders":1}!./node_modules/postcss-loader?{"ident":"postcss"}!./src/assets/styles/ Échec de la construction du module theme.scss: mot inconnu (23: 1)

21 | $ candy-app-theme: mat-light-theme ($ candy-app-primary, $ candy-app-accent, $ candy-app-warn); 22 |

23 | // Inclut des styles de thème pour le noyau et chaque composant utilisé dans votre application. | ^ 24 | // Alternativement, vous pouvez importer et @inclure les mixins de thèmes pour chaque composant 25 | // que vous utilisez.

Toute aide sur la façon de créer un thème personnalisé et de l'utiliser dans mon angular serait très utile. Merci!

14
Dan

Afin d'utiliser une palette hexadécimale personnalisée pour un Angular - Matériau, vous devrez définir les différentes nuances ainsi que les couleurs de contraste pour la palette, même si vous ne voulez qu'une seule couleur. Je suggérer d'utiliser au moins 3 couleurs (clair, normal, foncé) afin qu'il fonctionne parfaitement avec les animations intégrées de Material:

// below defines your custom color to build a theme palette from
$my-blue: (
  50: #7fdddd,
  100: #7faedd,
  200: #7f7fdd,
  300: #7faedd,
  400: #7faedd,
  500: #7faedd,
  600: #7faedd,
  700: #7faedd,
  800: #7faedd,
  900: #7faedd,
  A100: #7faedd,
  A200: #7faedd,
  A400: #7faedd,
  A700: #7faedd,
  contrast: (
    50: white,
    100: white,
    200: white,
    300: white,
    400: white,
    500: white,
    600: white,
    700: white,
    800: white,
    900: white,
    A100: white,
    A200: white,
    A400: white,
    A700: white,
  )
);
// below creates a primary palette with three shades of blue
$my-primary: mat-palette($my-blue, 100, 50, 200);
32
Z. Bagley