您可以通过创建自己的前景映射并将其合并到初始化主题之前创建的主题中来更改默认主题颜色。以下是方法:
像往常一样构建主题对象。
像往常一样构建主题对象。
@import '@angular/material/theming.scss';
@include mat-core();
// Choose colors
$my-app-primary: mat-palette($mat-blue-grey);
$my-app-accent: mat-palette($mat-light-green);
$my-app-warn: mat-palette($mat-red);
// Build theme object (its practically a map object)
$my-app-theme: mat-light-theme($my-app-primary, $my-app-accent, $my-app-warn);
使用自定义函数构建前景色映射,该函数返回前景图作为在@angular/material/_theming.scss
中定义的$mat-light-theme-foreground
函数。
您可以操纵地图并仅定义您想要的字段,并将其余字段保留为默认值。
@function my-mat-light-theme-foreground($color) {
@return (
base: $color,
divider: $black-12-opacity,
dividers: $black-12-opacity,
disabled: rgba($color, 0.38),
disabled-button: rgba($color, 0.38),
disabled-text: rgba($color, 0.38),
hint-text: rgba($color, 0.38),
secondary-text: rgba($color, 0.54),
icon: rgba($color, 0.54),
icons: rgba($color, 0.54),
text: rgba($color, 0.87),
slider-min: rgba($color, 0.87),
slider-off: rgba($color, 0.26),
slider-off-active: rgba($color, 0.38),
);
};
// You can put any color here. I've chosen mat-color($my-app-primary, 700)
$my-foreground: my-mat-light-theme-foreground(mat-color($my-app-primary, 700));
将先前创建的主题与仅有前景地图合并,并初始化您的自定义主题。
注意:由于SCSS中的所有地图都是不可变的,map-merge()
返回新的地图实例,不会直接修改地图 - 因此我们需要另一个变量$my-app-theme-custom
来保存结果主题。
$my-app-theme-custom: map-merge($my-app-theme, (foreground: $my-foreground));
// Include your custom theme.
@include angular-material-theme($my-app-theme-custom);
注意: 我正在使用 Angular Material v2.0.0-beta.8
编辑于2020年10月: - 我已经向地图添加了属性slider-min
,因为一些人在评论中报告说它已经在后来的版本中添加到前景地图中了。
$color
在opacity($color)
中必须是颜色”的错误-上述的my-mat-light-theme-foreground($color)
函数缺少slider-min
属性。 - Lewis Campbell