I'm trying to customize mat-select with multiple checkboxes. for some reason the panel get wrong min-width as below:
and I don't know where its calculating this min-width. also I tried to add panelClass and override the min-width from this class, for example:
<mat-select #multipleSelect (selectionChange)="selectItem($event.value)" panelClass="multiple-panel" multiple>
&.multiple-panel {
min-width: 200px !important;
}
but when opening the dropdown its open with the original width (like in the pic) and after few millisecond"jump" to the custom min-width defined on the panel class.
I find the mat-select very hard to style. anybody knows how to solve this problem?
You can style your mat-select
dialog box by giving a panel class (as you mentioned).
Please follow this demo : https://stackblitz.com/edit/angular-matselect-style?file=src/styles.css
to see the styled mat-select
components.
Reason :
cdk-overlay-pane
inside the cdk-overlay-container
container, So in case of mat-select
it provides a min-width of 180px, which is overridden by our panel class in the slight delay.mat-select
component, as i have provided 2 components and you can modify any css properties.::ng-deep
or :host >>>
, if not finding any luck,style.css
.
Update 1 :
Tried css animations
, and opacity
for making smooth opening of the mat-select
options.
.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;}
}
Updated StackBlitz Demo
I used another approach. Just added this piece of code to global style.
.mat-select-panel {
// some your code
&.ng-animating {
visibility: hidden;
}
}
You can try this solution on
DEMO StackBlitz.
Hack with opacity did not fix jumping width when select is closing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With