我正在尝试使用多个复选框来自定义Mat-select。 由于某些原因,面板的最小宽度错误,如下所示:
,我不知道它的最小宽度在哪里计算。 我也尝试添加panelClass并覆盖此类的最小宽度, 例如:
<mat-select #multipleSelect (selectionChange)="selectItem($event.value)" panelClass="multiple-panel" multiple>
&.multiple-panel {
min-width: 200px !important;
}
但是当打开下拉菜单时,它以原始宽度打开(如图所示),并在几毫秒后“跳转”到面板类上定义的自定义最小宽度。
我发现很难选择垫子样式。有人知道如何解决这个问题吗?
答案 0 :(得分:4)
您可以通过设置面板类(如您所述)来设置mat-select
对话框的样式。
请遵循此演示:https://stackblitz.com/edit/angular-matselect-style?file=src/styles.css
以查看样式化的mat-select
组件。
原因:
cdk-overlay-pane
容器内创建一个cdk-overlay-container
,因此,在mat-select
的情况下,它提供的最小宽度为180px被我们的小组班级稍稍延迟了。mat-select
组件的演示,因为我已经提供了2个组件,并且可以修改任何CSS属性。::ng-deep
或:host >>>
使用样式,如果找不到运气,请style.css
中。
更新1:
尝试使用css animations
和opacity
来顺利打开mat-select
选项。
.panel-class-applied-on-mat-select {
animation-name: opacityDelay !important;
animation-duration: 0.3s !important;
}
@keyframes opacityDelay {
0% {opacity: 0;}
25% {opacity: 0;}
50% {opacity: 0;}
75% {opacity: 0;}
100% {opacity: 1;}
}
答案 1 :(得分:1)
您需要在组件装饰器处将viewEncapsulation更改为none,然后添加以下CSS来消除过渡效果。请查看angular docs https://angular.io/guide/component-styles#view-encapsulation中的viewencapsulation。
@Component({
selector: 'app-selector',
templateUrl: './template.html',
styleUrls: ['./template.css'],
encapsulation: ViewEncapsulation.None
})
//CSS
.cdk-overlay-connected-position-bounding-box .cdk-overlay-pane .mat-select-panel.ng-animating {
display: none;
}
答案 2 :(得分:0)
我使用了另一种方法。 只需将这段代码添加到全局样式即可。
.mat-select-panel {
// some your code
&.ng-animating {
visibility: hidden;
}
}
答案 3 :(得分:0)
尝试这种方式:在代码中为您的垫选择定义面板类,然后在全局/应用样式文件中添加:
.panel-class-name .mat-select-panel {
// add your styling here
}
为我添加一些特定于材料组件的特定于组件的样式对我来说很有用。