创建自定义主题以覆盖使用Angular Material - Angular 4构建的表单控件

时间:2017-08-03 03:59:48

标签: angular material-design angular-material2

我已经完成了关于构建自定义主题&的material.angular.io文档。我试图创建一个自定义主题,用于覆盖表单控件,如Md输入文本框,文本区域,md-select,复选框,radiobutton控件,使用custom_theme.scss文件,该文件具有覆盖这些输入控件的样式。

.mat-select-trigger {
    font-size: 12px;
    min-width: 200px;
}

类似于其他表单控件覆盖颜色,字体样式带有靛蓝粉红色的预制主题,但似乎我的样式没有得到应用。

我已将我的主题加载到.angular-cli.json文件中,如下所示:

  "styles": [
        "styles.css",
        "custom-theme.scss"
  ]

&安培; angular material 2.0.0-beta.8的预建主题放在styles.css ..

@import "~@angular/material/prebuilt-themes/indigo-pink.css";

我没有看到任何精心制作的文档或教程,可以覆盖Material预建主题中定义的表单控件样式。

我是否需要删除styles.css中indigo-pink预建主题的引用,方法是将预先构建的主题样式复制到custom-theme.scss并根据我的需要覆盖?或者你可以建议任何其他选择吗?

2 个答案:

答案 0 :(得分:0)

您的问题是样式封装,AFAIK不是错误。

来自Angular documentation

  

组件CSS样式被封装到组件的视图中   不会影响应用程序的其余部分。

基本上,您在custom-theme.scss中包含的更改永远不会到达视图。您可以在组件上将视图封装设置为NONE:

import {Component, OnInit, ViewEncapsulation} from '@angular/core';

...

@Component({
    ...
    encapsulation: ViewEncapsulation.None
})

这应该允许更改到达视图。有关详细信息,请参阅此thread

答案 1 :(得分:0)

我想说这不是封装的问题,更多的是角度材料主题配置。

为了更改特定角度组件的主题,您需要使用Angular Material Mixin配置选项,并声明您希望它们用于自定义主题。

这里是Angular Material的一个很好的文档列表,我从Angular 5.1中发现了相关的文档。(以及Angular Material的第一个稳定版本,v5.0)

https://blog.thoughtram.io/angular/2017/05/23/custom-themes-with-angular-material.html

https://medium.com/@tomastrajan/the-complete-guide-to-angular-material-themes-4d165a9d24d1

然后在这里发布一个帖子,使用Angular Material(> 5.0)将动态主题添加到您的应用中。

Angular 2 Material Dynamic Themes