【问题标题】:Angular how to set navbar fixed?Angular如何设置导航栏固定?
【发布时间】:2021-04-05 10:19:01
【问题描述】:

我已使用此命令 ng generate @angular/material:material-nav --name=home 创建了一个导航栏,并且我希望在向下滚动时将导航栏固定在顶部。

我用我的 mat-sidenav-content 尝试了position: fixed;,但没有成功。你们知道我该怎么做吗?

navbar.component.html

<mat-sidenav-container class="sidenav-container">
  <mat-sidenav #drawer class="sidenav" fixedInViewport="false"
      [attr.role]="(isHandset$ | async) ? 'dialog' : 'navigation'"
      [mode]="(isHandset$ | async) ? 'over' : 'side'"
      [opened]="(isHandset$ | async) === false">
    <mat-toolbar>Menu</mat-toolbar>
    <mat-nav-list>
      <a mat-list-item href="#">Link 1</a>
      <a mat-list-item href="#">Link 2</a>
      <a mat-list-item href="#">Link 3</a>
    </mat-nav-list>
  </mat-sidenav>
  <mat-sidenav-content>
    <mat-toolbar color="primary">
      <button
        type="button"
        aria-label="Toggle sidenav"
        mat-icon-button
        (click)="drawer.toggle()"
        *ngIf="isHandset$ | async">
        <mat-icon aria-label="Side nav toggle icon">menu</mat-icon>
      </button>
      <span>checkout</span>
    </mat-toolbar>
    <!-- Add Content Here -->
  </mat-sidenav-content>
</mat-sidenav-container>

navbar.component.ts

  isHandset$: Observable<boolean> = this.breakpointObserver.observe(Breakpoints.Handset)
    .pipe(
      map(result => result.matches),
      shareReplay()
    );

  constructor(private breakpointObserver: BreakpointObserver) {}

谢谢!

【问题讨论】:

    标签: css angular navbar


    【解决方案1】:

    尝试将fixedInViewportfalse 更改为true

    【讨论】:

    • 如果我理解文档,fixedInViewport 用于 sidenav 而不是整个容器。
    • 感谢您的评论,但遗憾的是,如果我将其更改为 true,我的 sidenav 将保持打开状态。我会继续努力的。
    【解决方案2】:

    如果您在 sidenav 上方有内容,您可以使用 position sticky:

    <mat-sidenav-container class="sidenav-container" style="position:sticky; top: 0">
    ....
    </mat-sidenav-container>
    

    但不幸的是,并非所有浏览器都支持它 (https://caniuse.com/css-sticky)。

    第二种方式,你可以使用位置固定(在这种情况下它上面应该没有元素):

    <mat-sidenav-container class="sidenav-container" style="position:fixed; width: 100%; top: 0">
    ....
    </mat-sidenav-container>
    

    【讨论】:

    • 谢谢!但可悲的是,如果我使用位置粘性,它会在我的页面上导致第二个滚动条,我不知道如何解决这个问题。
    • 你可以使用溢出:隐藏不必要的元素滚动
    猜你喜欢
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    相关资源
    最近更新 更多