'Change the mat-autocomplete width?

It seems like the <mat-autocomplete> width is always the width of the input we're typing in. Is there no way to make it larger? I have a very small input and can't read the dropdown items. I'm also limited in form space so can't make the input larger.

<mat-form-field style="width: 100px;">
  <input matInput [matAutocomplete]="auto">
  <mat-autocomplete style="width: 500px;" #auto="matAutocomplete">
    <mat-option *ngFor="let item of items" [value]="item">
    </mat-option>
  </mat-autocomplete>
</mat-form-field>


Solution 1:[1]

In the document for MatAutocomplete there is a property for exactly what you need:

@Input() panelWidth: string | number

Specify the width of the autocomplete panel. Can be any CSS sizing value, otherwise it will match the width of its host.

By using this property you are not in the risk of meddling with anything else inherited from cdk-overlay-pane.

For further customization you might find this property useful as well:

@Input('class') classList: string

Takes classes set on the host mat-autocomplete element and applies them to the panel inside the overlay container to allow for easy styling.

Solution 2:[2]

mat-autocomplete styles are inherited from cdk-overlay-pane. In order to change width use below CSS.

::ng-deep .cdk-overlay-pane {
    /* Do you changes here */
      min-width:450px;
}

You can refer here for full example: https://stackblitz.com/edit/angular-vzetqy

Solution 3:[3]

Just add the panelWidth property to the mat-autocomplete

<mat-autocomplete [panelWidth]="300">

Solution 4:[4]

I solved it with (dynamic):

 [panelWidth]="'auto'"

Following is also possible:

panelWidth="auto"

Solution 5:[5]

Apart from what Athan Soulis says, I've found out by sheer coincidence that panelWidth also accepts value "fit", which does exactly what most of us is aiming for (make it as wide as needed). Not sure it's "any CSS sizing value", but it works.

Solution 6:[6]

Angular provides configuration options for autocomplete named MAT_AUTOCOMPLETE_DEFAULT_OPTIONS

Documentation: https://material.angular.io/components/autocomplete/api#MatAutocompleteDefaultOptions

One of the field of that class is overlayPanelClass: string, that allow to set custom class to style cdk-overlay-pane for autocomplete.

  1. Inject options in component that you need, through providers: [] in component declaration

providers: [
        {
            provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,
            useValue: { overlayPanelClass: 'autocomplete-overlay' },
        },
    ]
  1. Define your class in styles.scss

.autocomplete-overlay {
    width: unset !important;
}
  1. Set fit-content width for container, in which you display options of autocomplete, I use simplebar, so in my case it .simple-bar-content class

.wrapper-for-simplebar {
    height: 100%;

    ::ng-deep.simplebar-content {
        width: fit-content;
    }
}

If you need to set fixed width use [panelWidth] = "'150px'"

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Thanos Soulis
Solution 2 Sai charan Bolisetty
Solution 3 ChadNC
Solution 4
Solution 5 Tom Kokoska
Solution 6 dennnisimo