造型垫选择角度材料

Mar*_*sta 43 css typescript angular-material angular

如何设置mat-select的面板组件的样式.从我得到的文档,我需要提供panelClass所以我这样做:

<mat-form-field>
  <mat-select placeholder="Search for"
    [(ngModel)]="searchClassVal"
    panelClass="my-select-panel-class"
    (change)="onSearchClassSelect($event)">
    <mat-option *ngFor="let class of searchClasses" [value]="class.value">{{class.name}}</mat-option>
  </mat-select>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)

我在开发人员工具中检查过这个类是否附加到DOM中的面板并附加了它.所以我将自定义scss类附加到此元素.现在,当我提供CSS时,它只是不起作用.我的scss例如如下所示:

.my-select-panel-class {
    width:20px;
    max-width:20px;
    background-color: red;
    font-size: 10px;
}
Run Code Online (Sandbox Code Playgroud)

面板的宽度始终等于widthselect元素的宽度.有时在选项中你有太长的字符串,我想让它更广泛.有什么方法可以做到这一点.我的组件中的风格甚至background-color无法正常工作.有人知道为什么这么奇怪吗?

我正在使用:Angular 4.4.5 @ angular/material:2.0.0-beta.12

Veg*_*ega 78

Angular Material mat-select-content用作选择列表内容的类名.对于它的造型,我建议四种选择.

1.使用:: ng-deep:

使用/ deep/shadow-penetcing descendant组合器将样式向下强制通过子组件树到所有子组件视图中./ deep/combinator适用于任何深度的嵌套组件,它适用于视图子节点和组件的内容子节点.仅对模拟视图封装使用/ deep /,>>>和:: ng-deep.模拟是默认和最常用的视图封装.有关更多信息,请参阅"控制视图封装"部分.不推荐使用阴影穿透后代组合器,并且正在从主要浏览器和工具中删除支持.因此,我们计划放弃Angular中的支持(对于/ deep /,>>>和:: ng-deep的所有3个).在此之前:: ng-deep应该是首选,以便与工具更广泛地兼容.

CSS:

::ng-deep .mat-select-content{
    width:2000px;
    background-color: red;
    font-size: 10px;   
}
Run Code Online (Sandbox Code Playgroud)

DEMO


2.使用ViewEncapsulation

...组件CSS样式封装在组件的视图中,不会影响应用程序的其余部分.要控制此封装如何在每个组件的基础上发生,您可以在组件元数据中设置视图封装模式.从以下模式中选择:....无意味着Angular不进行视图封装.Angular将CSS添加到全局样式中.前面讨论的范围规则,隔离和保护不适用.这与将组件的样式粘贴到HTML中基本相同.

没有值是您需要打破封装并从组件中设置材质样式.所以可以在组件的选择器上设置:

Typscript:

  import {ViewEncapsulation } from '@angular/core';
  ....
  @Component({
        ....
        encapsulation: ViewEncapsulation.None
 })  
Run Code Online (Sandbox Code Playgroud)

CSS

.mat-select-content{
    width:2000px;
    background-color: red;
    font-size: 10px;
}
Run Code Online (Sandbox Code Playgroud)

DEMO


3.在style.css中设置类样式

这次你必须'强迫'风格!important.

style.css文件

 .mat-select-content{
   width:2000px !important;
   background-color: red !important;
   font-size: 10px !important;
 } 
Run Code Online (Sandbox Code Playgroud)

DEMO


4.使用内联样式

<mat-option style="width:2000px; background-color: red; font-size: 10px;" ...>
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 不建议使用::: ng-deep:https://angular.io/guide/component-styles#deprecated-deep--and-ng-deep在与ViewEncapsulation混淆并使用样式之前尝试使用Angular组件中的输入.css。我尽量避免:: ng-deep,因为它已被弃用,可以随时将其删除。尽管Angular尚未提出替代方案... (3认同)

Lee*_*don 6

将您的类名称放在mat-form-field元素上。这适用于所有输入。

  • 这适用于输入样式,但如果您将样式范围限定为“mat-form-field”上的类,则无法设置“mat-options”覆盖层的样式。只是一个旁注。 (2认同)