Я работаю над проектом, который должен быть темным во время выполнения.Поэтому я создал систему тем, которая объединяет переменную SCSS и переменные CSS.Вот как это выглядит.
:root {
--primary-color: 196;
}
// Primary
$primary-100: hsl(var(--primary-color), 90%, 98%);
$primary-400: hsl(var(--primary-color), 90%, 65%);
$primary-main: hsl(var(--primary-color), 90%, 50%);
$primary-700: hsl(var(--primary-color), 90%, 30%);
$primary-900: hsl(var(--primary-color), 90%, 10%);
Хотя это прекрасно работает с моими пользовательскими компонентами, мне трудно заставить его работать с системой темы дизайна материалов.
Я думал, чтоЯ создам тему, как описано в документации по материалам Angular, и вместо статических цветов я буду использовать переменные SCSS.Вот так выглядит мой файл theme.scss.
@import '~@angular/material/theming';
@import 'var.scss';
@include mat-core();
$shop-primary: (
50: $primary-100,
100: $primary-100,
200: $primary-200,
300: $primary-300,
400: $primary-400,
// ..... all other colors
contrast: (
50: $black-87-opacity,
100: $black-87-opacity,
200: $black-87-opacity,
// ..... all other colors
)
);
$shop-app-primary: mat-palette($shop-primary);
$shop-app-accent: mat-palette($shop-primary);
$shop-app-warn: mat-palette($shop-primary);
$shop-app-theme: mat-light-theme($shop-app-primary, $shop-app-accent, $shop-app-warn);
@include angular-material-theme($shop-app-theme);
И я получаю сообщение об ошибке:
Argument `$color` of `rgba($color, $alpha)` must be a color
Предположительно, потому что миксин Angular Material ожидает color
, а неhsl()
значение.
Итак, мой вопрос: как мне создать собственную тему материала с переменными CSS времени выполнения?