Skip to content

Mat menu height gets shrinked when scrolled out of view #18168

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
imrebudai opened this issue Jan 14, 2020 · 5 comments · Fixed by #21436
Closed

Mat menu height gets shrinked when scrolled out of view #18168

imrebudai opened this issue Jan 14, 2020 · 5 comments · Fixed by #21436
Assignees
Labels
area: material/menu P3 An issue that is relevant to core functions, but does not impede progress. Important, but not urgent

Comments

@imrebudai
Copy link

Bug, feature request, or proposal:

Bug

What is the expected behavior?

When an opened menu is scrolled out of the view, and it's scrolled back to the view, then it should have the original height.

What is the current behavior?

When an opened menu is scrolled out of the view, and it's scrolled back to the view, then it loses it's original height and gets shrinked to the height of one menu-item.

What are the steps to reproduce?

  1. Use the mat-menu with reposition scroll strategy (that's the default)
  2. Open mat-menu
  3. If it's opened above the menu trigger then scroll down, if it's opened below then scroll up until you scroll the menu out of the view

Stackblitz example:
I used the original mat-menu example from the angular.material.io and just slightly modified the html by adding some extra content to make it scrollable.

Just open the link and see the menu trigger on the middle of the page and do the reproduction steps. Furthermore see the attached gif below.

https://stackblitz.com/edit/angular-rnvofb-2d2zsm?file=src%2Fapp%2Fmenu-overview-example.html

mat menu scrolling issue

What is the use-case or motivation for changing an existing behavior?

To fix the issue mentioned above

Which versions of Angular, Material, OS, TypeScript, browsers are affected?

@angular/material ~8.2.2

Is there anything else we should know?

Tested it in chrome.
Possible solution can be: (only checked it in browser console, but it worked)
Call the withGrowAfterOpen(true) on the position builder when the related overlay config is retrieved for the overlay. This overlay config instantiated inside the _getOverlayConfig() function in the menu.trigger.ts.

So it would look like this:

private _getOverlayConfig(): OverlayConfig {
    return new OverlayConfig({
      positionStrategy: this._overlay.position()
          .flexibleConnectedTo(this._element)
          .withLockedPosition()
          .withGrowAfterOpen(true) // this is newly added
          .withTransformOriginOn('.mat-menu-panel, .mat-mdc-menu-panel'),
      backdropClass: this.menu.backdropClass || 'cdk-overlay-transparent-backdrop',
      scrollStrategy: this._scrollStrategy(),
      direction: this._dir
    });
  }

My current temporary solution is setting the min height for the connected position overlay element (with class "cdk-overlay-connected-position-bounding-box") to equal with it's height after opening, but it's quite a hack as I get this element from the DOM with getElementsByClassName.

@RandomNonameDude
Copy link

I also came across this issue and I'd appreciate the fix...

@mmalerba mmalerba added the needs triage This issue needs to be triaged by the team label May 20, 2020
@crisbeto crisbeto added area: material/menu P3 An issue that is relevant to core functions, but does not impede progress. Important, but not urgent and removed needs triage This issue needs to be triaged by the team labels May 28, 2020
@fomenkogregory
Copy link

fomenkogregory commented Nov 2, 2020

Any updates on this one? Or do you guys have found any workarounds?
Except of closing it on scroll of course...

@imrebudai1
Copy link

Any updates on this one? Or do you guys have found any workarounds?
Except of closing it on scroll of course...

For me it worked what I mentioned at the end of my report, see below as well.
If you set the min-height for the element equal with it's height after opening, then it can't shrink.

My current temporary solution is setting the min height for the connected position overlay element (with class "cdk-overlay-connected-position-bounding-box") to equal with it's height after opening, but it's quite a hack as I get this element from the DOM with getElementsByClassName.

@fomenkogregory
Copy link

Any updates on this one? Or do you guys have found any workarounds?
Except of closing it on scroll of course...

For me it worked what I mentioned at the end of my report, see below as well.
If you set the min-height for the element equal with it's height after opening, then it can't shrink.

My current temporary solution is setting the min height for the connected position overlay element (with class "cdk-overlay-connected-position-bounding-box") to equal with it's height after opening, but it's quite a hack as I get this element from the DOM with getElementsByClassName.

Ty, I have found temporary solution in another issue #13988. It has done the job for now.

@crisbeto crisbeto self-assigned this Dec 25, 2020
crisbeto added a commit to crisbeto/material2 that referenced this issue Dec 25, 2020
Currently the menu only shrinks if the users scrolls after it has been opened, but
if they scroll back to a place where there's enough place to fit the content, the menu
will stay collapsed.

These changes adjust the config so the menu can grow after it was opened.

Fixes angular#18168.
Fixes angular#13988.
annieyw pushed a commit that referenced this issue Jan 9, 2021
Currently the menu only shrinks if the users scrolls after it has been opened, but
if they scroll back to a place where there's enough place to fit the content, the menu
will stay collapsed.

These changes adjust the config so the menu can grow after it was opened.

Fixes #18168.
Fixes #13988.
annieyw pushed a commit that referenced this issue Jan 9, 2021
Currently the menu only shrinks if the users scrolls after it has been opened, but
if they scroll back to a place where there's enough place to fit the content, the menu
will stay collapsed.

These changes adjust the config so the menu can grow after it was opened.

Fixes #18168.
Fixes #13988.

(cherry picked from commit 83f2adc)
wagnermaciel pushed a commit to wagnermaciel/components that referenced this issue Jan 14, 2021
Currently the menu only shrinks if the users scrolls after it has been opened, but
if they scroll back to a place where there's enough place to fit the content, the menu
will stay collapsed.

These changes adjust the config so the menu can grow after it was opened.

Fixes angular#18168.
Fixes angular#13988.
@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Feb 9, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area: material/menu P3 An issue that is relevant to core functions, but does not impede progress. Important, but not urgent
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants