gpt4 book ai didi

angular - 粘性工具栏 Material 2 和 sidenav

转载 作者:行者123 更新时间:2023-12-02 23:57:00 25 4
gpt4 key购买 nike

最近开始学习 Material 2并跑到问题。我的方法是像 Youtube 网站一样做一个 sidenav。左侧有一个汉堡菜单,可展开/折叠侧面菜单。代码:

<md-toolbar class="fixed-header">
<button class="app-icon-button" (click)="start.toggle()">
<i class="material-icons app-toolbar-menu">menu</i>
</button>
</md-toolbar>

<md-sidenav-container>
<md-sidenav #start class="app-sidebar" mode="side">test</md-sidenav>

<div class="text">
{{ text }}
</div>
</md-sidenav-container>

现在似乎我实现了布局,但定位不是固定,如果我滚动工具栏移动并且sidenav内容也移动。

编辑:

在 Angular Material 文档中,我后来找到了我一直在寻找的示例:

https://stackblitz.com/angular/rmjxrpxdgmx?file=app%2Fsidenav-responsive-example.html

如果链接将被删除,代码如下:

HTML 文件:

<div class="example-container" [class.example-is-mobile]="mobileQuery.matches" *ngIf="shouldRun">
<mat-toolbar color="primary" class="example-toolbar">
<button mat-icon-button (click)="snav.toggle()"><mat-icon>menu</mat-icon></button>
<h1 class="example-app-name">Responsive App</h1>
</mat-toolbar>

<mat-sidenav-container class="example-sidenav-container"
[style.marginTop.px]="mobileQuery.matches ? 56 : 0">
<mat-sidenav #snav [mode]="mobileQuery.matches ? 'over' : 'side'"
[fixedInViewport]="mobileQuery.matches" fixedTopGap="56">
<mat-nav-list>
<a mat-list-item routerLink="." *ngFor="let nav of fillerNav">{{nav}}</a>
</mat-nav-list>
</mat-sidenav>

<mat-sidenav-content>
<p *ngFor="let content of fillerContent">{{content}}</p>
</mat-sidenav-content>
</mat-sidenav-container>
</div>

TS 文件:

import {MediaMatcher} from '@angular/cdk/layout';
import {ChangeDetectorRef, Component, OnDestroy} from '@angular/core';

/** @title Responsive sidenav */
@Component({
selector: 'sidenav-responsive-example',
templateUrl: 'sidenav-responsive-example.html',
styleUrls: ['sidenav-responsive-example.css'],
})
export class SidenavResponsiveExample implements OnDestroy {
mobileQuery: MediaQueryList;

fillerNav = Array.from({length: 50}, (_, i) => `Nav Item ${i + 1}`);

fillerContent = Array.from({length: 50}, () =>
`Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`);

private _mobileQueryListener: () => void;

constructor(changeDetectorRef: ChangeDetectorRef, media: MediaMatcher) {
this.mobileQuery = media.matchMedia('(max-width: 600px)');
this._mobileQueryListener = () => changeDetectorRef.detectChanges();
this.mobileQuery.addListener(this._mobileQueryListener);
}

ngOnDestroy(): void {
this.mobileQuery.removeListener(this._mobileQueryListener);
}
}

CSS 文件:

.example-container {
display: flex;
flex-direction: column;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}

.example-is-mobile .example-toolbar {
position: fixed;
/* Make sure the toolbar will stay on top of the content as it scrolls past. */
z-index: 2;
}

h1.example-app-name {
margin-left: 8px;
}

.example-sidenav-container {
/* When the sidenav is not fixed, stretch the sidenav container to fill the available space. This
causes `<mat-sidenav-content>` to act as our scrolling element for desktop layouts. */
flex: 1;
}

.example-is-mobile .example-sidenav-container {
/* When the sidenav is fixed, don't constrain the height of the sidenav container. This allows the
`<body>` to be our scrolling element for mobile layouts. */
flex: 1 0 auto;
}

最佳答案

要将工具栏保持在顶部,请使用position:fixedz-index:999。为了将 sidenav 保持在可滚动区域之外,需要将其放在 md-sidenav-container

之外

感谢您创建了 plnkr 演示,它对快速找到解决方案有很大帮助。这是修改后的demo .

app.component.html:

<md-toolbar class="fixed-header">
<button class="app-icon-button" (click)="start.toggle()">
<i class="material-icons app-toolbar-menu">menu</i>
</button>
</md-toolbar>

<md-sidenav-container >
<div class="text" style="min-height: 99vh">
{{ text }}
</div>
</md-sidenav-container>

<md-sidenav #start class="app-sidebar side-nav-style" mode="side" >
test
</md-sidenav>

app.component.css:

.fixed-header {
top: 0;
position: fixed;
z-index:999;

}

.text {
width: 5px;
}

.side-nav-style{
background-color: grey;
width: 6em;
margin-top:62px;
position: fixed
}

请告诉我这是否是您正在寻找的内容。

关于angular - 粘性工具栏 Material 2 和 sidenav,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44498363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com