【发布时间】:2018-09-18 22:43:38
【问题描述】:
我创建了一个“自定义”主题,(使用 https://material.angular.io/guide/theming 的主题文档,这很糟糕),如下所示:
@import '~@angular/material/theming';
@include mat-core();
$ip-primary: mat-palette($mat-indigo);
$ip-accent: mat-palette($mat-pink, A200, A100, A400);
$ip-theme: mat-light-theme($ip-primary, $ip-accent);
$ip-theme-dark: mat-dark-theme($ip-primary, $ip-accent);
.indigo-pink {
@include angular-material-theme($ip-theme);
}
.indigo-pink-dark {
@include angular-material-theme($ip-theme-dark);
}
我的 index.html 包含这个:
<body class="mat-app-background mat-typography">
<app-root></app-root>
</body>
在 app-root 组件的容器中,我使用以下代码在自定义类名(indigo-pink 和 indigo-pink-dark)之间切换:
<div [ngClass]="appTheme">
我还使用以下方法将 CDK 覆盖容器类设置为我的自定义类名称:
setContainerClass(className: string): void {
const containerClassToKeep = 'cdk-overlay-container';
const overlayClassList = this.overlayContainer.getContainerElement().classList;
const existingClasses = Array.from(overlayClassList);
existingClasses.forEach(classToken => {
if (classToken !== containerClassToKeep) {
overlayClassList.remove(classToken);
}
});
overlayClassList.add(className);
}
主要问题是当我切换到深色主题时,我确实看到 indigo-pink-dark 类名被正确添加到我的应用程序组件容器中,但只有一些样式发生变化(例如,顶部的工具栏变暗,并且材料组件) - 页面主体保持白色。主题指南(和其他博客文章)说使用 mat-app-background 应该可以解决这个确切的问题。
此外,如果我尝试手动更新正文的背景颜色,例如使用
.indigo-pink-dark {
@include angular-material-theme($ip-theme-dark);
body & {
background-color: #000;
}
}
然后这个“背景颜色”只是覆盖了整个页面,你看不到页面上的任何元素。这与 CDK 覆盖有关,因为如果我删除将类名添加到覆盖的部分,它会起作用 - 页面的背景 确实 设置正确,但随后覆盖没有得到正确的样式。
【问题讨论】:
-
从我到现在所面临的情况(这与您的问题相似),我发现的最佳解决方案是使用 sidenav :
mat-sidenav-content从 drak 主题中获取背景颜色。如果不想用,也可以用材质卡上色。只需制作一张遍布全身的卡片,然后移除边框半径(如果必须的话,还可以使用填充)。 -
谢谢,是的,我也看到了这个推荐,但如果可能的话,我想避免将整个网站变成一个组件 :)
标签: angular angular-material angular-cdk