Angular Material 2 Tabs with fixed (sticky) tab labels
Clash Royale CLAN TAG#URR8PPP
Angular Material 2 Tabs with fixed (sticky) tab labels
I have a layout using Angular Material 2 mat-sidenav
layout with a mat-tab layout in the mat-sidenav-content
section. I am trying to make the mat-tab-labels
sticky so they are always visible, and still allow the dynamic tab-content to scroll. I can get the labels to stay fixed by setting overflow: hidden
on the mat-sidenav-content
and then set overflow: scroll
on the mat-tab-body-wrapper
element, but I have to set a fixed height to get the tab-content
to scroll, but I have dynamic content so a fixed height isn't an option. Is there a way I can get my sticky labels and scrolling too without setting a fixed height?
mat-sidenav
mat-sidenav-content
mat-tab-labels
overflow: hidden
mat-sidenav-content
overflow: scroll
mat-tab-body-wrapper
tab-content
Below is a demo. Shrink the vertical height of your window until it covers part of the "Large content" div. It will not scroll. Then uncomment the mat-tab-group
css that sets a height and it will scroll as desired (but a fixed height).
mat-tab-group
https://stackblitz.com/edit/angular-rty6oe?file=app%2Fsidenav-fixed-example.css
UPDATE
Ok, @Dakota Maker's answer solved the immediate problem, and also reminded me of what I was originally trying to fix that brought me to the point of not being able to scroll. I updated my example app to reflect my real app better. I have a sub-header inside the sidenav-content area that sits above the mat-tab-group, and when scrolling it never gets to the bottom unless the window height is large enough because the header seems to have pushed the content down and off the screen. I can add a margin to the bottom of the content to compensate for the sub-header, but the sub-header area height can change.
If I should accept the answer to the original question and open a new question, please advise.
1 Answer
1
Set height:100%
one the mat-tab-groups
and you will be able to scroll and there won't be a big white block in the middle of the large content
height:100%
mat-tab-groups
EDIT TO ACCOMPANY OP's UPDATE:
You can add something like bottom:12px
to the .mat-tab-body-wrapper
to give it a fixed amount of space at the bottom. This will end up giving you some of the overflow at the top of the wrapper some overlap with where the tabs are at, but you should be able to work that out also adding in something like margin-top:12px
to the same block. Hope this helps out!
bottom:12px
.mat-tab-body-wrapper
margin-top:12px
Thanks for your help. Since the height is dynamic, I ended up creating a variable that would get updated with the current height of the sub-header when it changes and binding it to
margin-bottom
of the .mat-tab-body-wrapper
.– andyrue
Aug 9 at 12:17
margin-bottom
.mat-tab-body-wrapper
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
That solved the immediate problem, but please view my edit.
– andyrue
Aug 8 at 19:34