我在Angular组件中使用了Material 2 <md-input-container>
。我想覆盖其中一个类,例如Angular Material中定义的.mat-input-wrapper
。但我想只覆盖该组件,并且覆盖不应影响页面中的其他组件。
答案 0 :(得分:13)
正如@Dylan指出的那样,你必须使用/deep/
来改变子compoenets中的CSS。这是我一直在寻找的答案:
:host /deep/ md-input-container .mat-input-wrapper
答案 1 :(得分:1)
没有必要用<div class="someCssClassName">
包裹。相反,要设置Angular Material元素的样式,如卡片的标题..
<mat-card>
<mat-card-title>
{{title}}
</mat-card-title>
</mat-card>
CSS:
mat-card mat-card-title {
color: red;
}
将这个应用于另一个孩子&#39;像<mat-card-content>
mat-card mat-card-content,
mat-card mat-card-title {
color: red;
}
使用VS Code,将鼠标悬停在CSS编辑器中将显示此CSS将如何呈现的详细信息。在此示例中,<mat-card>...<mat-card-title>
当然,如果您在单个组件中多次使用该卡,则需要使用CSS类名进行区分,将class="card-style-1"
添加到元素本身,例如<mat-card class="card-style-1"
CSS:
mat-card.card-style-1 mat-card-content,
mat-card.card-style-1 mat-card-title {
color: red;
}
替代方法是创建特定于不同卡片使用的单个组件,根据需要设置每个组件的样式。
答案 2 :(得分:1)
如果您使用的是SCSS,请尝试::ng-deep
::ng-deep {
.sample {
// style
color: green;
}
}
答案 3 :(得分:1)
::ng-deep
的问题在于,它会将样式应用于所有页面和所有组件。这意味着它是一种肮脏的方法。执行此操作的更好方法是使用自定义类包装并设置 styles.scss/styles.css
示例:
正如问题中所问。要覆盖 .mat-input-wrapper
,请使用自定义类包装您的元素,例如:
<md-input-container class='big-input'>
。然后在
styles.scss:
.big-input .mat-input-wrapper {
height : 200px;
}
如有必要,添加 !important
。
答案 4 :(得分:0)
首选解决方案可能是在您自己的Material主题样式表中定义样式。不推荐使用/ deep /(Angular V 4.3):https://angular.io/guide/component-styles#special-selectors
现在可以使用:: ng-deep作为定义自己的主题样式表的替代方法。
但是,使用:: ng-deep在使用材质图标覆盖默认字体系列时会再次影响使用材质图标(因为材质图标也是字体系列)
答案 5 :(得分:0)
我为SCSS建议的最简单方法是:
您可以复制属性的类名,并在style.scss中覆盖它,以便它起作用。
在新的SCSS文件中创建@mixin并覆盖您想要的所有属性。 然后将此@mixin导入style.scss中。这是更清洁的方法。
编辑:更简单明了的方法来仅覆盖特定组件的默认CSS:
打开index.html
并为body
分配一个唯一的属性,就像我添加的override
<body override>
<app-root>
<loading-screen></loading-screen>
</app-root>
</body>
假设您要覆盖具有选择器<md-input-container>
的{{1}}组件的Employee
css属性。
打开app-employee
并创建如下所示的覆盖CSS。
style.css
运行并享受?