【问题标题】:Can't get angular-material md-sidenav to be 100% height无法获得 angular-material md-sidenav 的 100% 高度
【发布时间】:2016-09-17 00:29:18
【问题描述】:

我正在使用带有 sidenav 的 angular2-material 制作一个新的 angular2 应用程序。而且我这辈子都无法让sidenav的高度达到100%。我试图让一个菜单滑出,占据整个屏幕的高度。无论用户滚动到哪里,我都希望它以相同的方式打开。

这是我的模板:

<md-sidenav-layout class="demo-sidenav-layout">
  <md-sidenav #start mode="over">

    <a [routerLink]="['/login']" class="btn btn-primary">Log in</a>
    <br>
  </md-sidenav>
    <md-toolbar color="primary">

      <button md-button (click)="start.toggle()">Open Side Drawer</button>
      <span>Spellbook</span>

      <span class="demo-fill-remaining">

      </span>

    </md-toolbar>
  <div class="demo-sidenav-content">

    <router-outlet></router-outlet>
  </div>
</md-sidenav-layout>

这是我的 CSS:

.demo-sidenav-layout {
  //border: 3px solid black;
  min-height:100%;
  md-sidenav {
    padding: 10px;
    background: gainsboro;
    min-height: 100%;
  }
}

.demo-sidenav-content {
  padding: 15px;
  min-height:100%;
}

.demo-toolbar {
  padding: 6px;

  .demo-toolbar-icon {
    padding: 0 14px 0 14px;
  }

  .demo-fill-remaining {
    flex: 1 1 auto;
  }

}

我还将html 设置为height:100%body 设置为min-height:100%

【问题讨论】:

    标签: css angular angular-material


    【解决方案1】:

    使用全屏

    <md-sidenav-layout fullscreen>
    
      <md-sidenav #start mode="over">
        <a [routerLink]="['/login']" class="btn btn-primary">Log in</a>
        <br>
      </md-sidenav>
    
      <md-toolbar color="primary">
        <button md-button (click)="start.toggle()">Open Side Drawer</button>
        <span>Spellbook</span>
        <span class="demo-fill-remaining"></span>
      </md-toolbar>
    
      <div class="demo-sidenav-content">
        <router-outlet></router-outlet>
      </div>
    
    </md-sidenav-layout>
    

    【讨论】:

    • 使用全屏不会让移动浏览器中的地址栏在滚动时折叠
    • md-sidenav-layout 已弃用。这不再有效
    • 显然md-sidenav-container 是新名称。来源:github.com/angular/material2/pull/2183
    • md-sidenav-container 是新名称,全屏仍在使用新名称。
    • 这个答案已经过时了。正如 Kumars 的回答所示,fixedInViewport="true" 是现在要走的路(使用 Angular Material 6 检查)
    【解决方案2】:

    根据Issue : Angular Material 2 - not rendering in full screen 的评论,fullscreen 属性将被删除...

    试试这个:

    mat-sidenav-container {
       position: fixed;
       height: 100%;
       min-height: 100%;
       width: 100%;
       min-width: 100%;
    }
    

    【讨论】:

    • 在最新版本中应该是 .mat-sidenav-container
    • 正如@YesMan85 所说,新版本是md-sidenav-container 或.mat-sidenav-container。无论哪种方式,请记住使用 position: fixed !important;如果你不喜欢在你的 CSS 中使用 !important,你可以使用“md-sidenav-container.mat-sidenav-container”来避免它。
    • 我已经阅读了一些关于 fullscreen 被删除的声明,但它在 beta.7 上对我有用,并且似乎在 beta.12 中存在。有人确认弃用了吗?
    • 现在是 mat-sidenav-container。如果您在容器之外有组件,这会很好,因为全屏覆盖了其他组件。
    • 这会破坏导航时滚动到顶部的功能。
    【解决方案3】:

    在最新版本的 material.angular 中,您可以使用 mat-sidenav 上的属性 fixedInViewport。

    见下文。

    <mat-sidenav #start mode="over" fixedInViewport="true"> ... </mat-sidenav>
    

    【讨论】:

    • 我刚试过这个,它把左边的导航按钮移到了顶部,宽到了 100%
    【解决方案4】:
      .demo-sidenav-layout {
          position:fixed;
          //border: 3px solid black;
          min-height:100vh;
          md-sidenav {
            padding: 10px;
            background: gainsboro;
            min-height: 100%;
          }
        }
    

    将高度设为 100vh 而不是 100%....尽管您可以将宽度设为 100%,但您不能一次简单地将高度设为 100%,因为通常您可以向下滚动到无穷大。 使用

    position:absolute;
    

    然后使用

    height : 100%;
    

    【讨论】:

      【解决方案5】:

      您还可以将mad-sidenav-contentmin-height 设置为100vh,如下所示:

      &lt;mat-sidenav-content class="sidenav__content--height"&gt; .... &lt;/mat-sidenav-content&gt;

      地点:

      .sidenav__content--height{
        min-height: 100vh;
      }
      

      【讨论】:

      • 如果您的侧边栏上方有一个topbar,请将其更改为min-height: calc(100vh - 60px);,假设您的顶栏为 60 像素高。
      【解决方案6】:

      我最终在 sidenav 本身上设置了position:fixed,这正是我想要的。

      .demo-sidenav-layout {
        position:fixed;
        //border: 3px solid black;
        min-height:100%;
        md-sidenav {
          padding: 10px;
          background: gainsboro;
          min-height: 100%;
        }
      }
      
      .demo-sidenav-content {
        padding: 15px;
        min-height:100%;
      }
      
      .demo-toolbar {
        padding: 6px;
      
        .demo-toolbar-icon {
          padding: 0 14px 0 14px;
        }
      
        .demo-fill-remaining {
          flex: 1 1 auto;
        }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2017-07-14
        • 2019-11-08
        • 2016-08-03
        • 2016-08-12
        • 2017-09-30
        • 2016-10-26
        • 2020-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多