【问题标题】:Angular flex layout challenge角弹性布局挑战
【发布时间】:2019-05-31 16:58:57
【问题描述】:

我有一个使用 angular flex 和 Angular flex-layout 的 Angular 应用程序 (v6.1)。我正在使用 angular v6.1 来利用片段滚动功能。我的页面有一个工具栏、带有页面内片段链接的侧面导航和一个中心内容(见下图)。我的要求是固定工具栏和左侧导航,而仅中心内容应该滚动。以下是我的 app.component.html。使用这个 html,整个页面滚动,而不仅仅是中心内容。我怎样才能实现所需的行为?

app.component.html

<div  fxLayout="column">
  <div fxFlex="20%" fxFlexFill style="background-color: rgb(48, 138, 133); ">
      <mat-toolbar color="primary">
        <mat-toolbar-row fxLayoutGap="10px">
          <a type="button" href="#one">Menu item #1</a>
          <a type="button" href="#two">Menu item #2</a>
        </mat-toolbar-row>
      </mat-toolbar>
  </div>
  <div fxFlex="80%">
    <div fxLayout="row" style="background-color: cadetblue">
      <div fxFlex="20%" fxLayout="column" style="background-color: chocolate">
        <a mat-button routerLink="./" routerLinkActive="active" fragment="one">Nav Link #1</a>
        <a mat-button routerLink="./" routerLinkActive="active" fragment="two">Nav Link #2</a>
        <a mat-button routerLink="./" routerLinkActive="active" fragment="three">Nav Link #3</a>
        <a mat-button routerLink="./" routerLinkActive="active" fragment="four">Nav Link #4</a>
        <a mat-button routerLink="./" routerLinkActive="active" fragment="five">Nav Link #5</a>
      </div>
      <div fxLayout="column" fxLayoutGap="100px" fxFlex="100%"
        style="background-color: chartreuse;">
        <p id="one">para 1</p>
        <p id="two">para 2</p>
        <p id="three">para 3</p>
        <p id="four">para 4</p>
        <p id="five">para 5</p>
        <p id="six">para 6</p>
        <p id="seven">para 7</p>
        <p id="eight">para content 8</p>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

    标签: html css angular angular-material angular-flex-layout


    【解决方案1】:

    满足您要求的最佳方法之一是 通过将 sidenav 和工具栏创建为单独的组件并在 body 中渲染子组件(绿色区域) 就像

    <header role="mast-head">
       <div class="container-fluid">
          //Your header will come here 
       </div>
    </header>
    <div class="side bar">
       <ul>
          <li routerLinkActive="active" [routerLink]="['/homepage/h']"><a href="javascript:"><img src="" alt="" />Dashboard</a></li>
          <li routerLinkActive="active" [routerLink]="['/homepage/dst']"><a href="javascript:"><img src="" alt="" />A</a></li>
          <li routerLinkActive="active" [routerLink]="['/homepage/j']"><a href="javascript:"><img src="" alt="" />B </a></li>
       </ul>
    </div>
    <div class="body">
       <router-outlet >     
       </router-outlet>
    </div>
    

    【讨论】:

    • 感谢您的回答。但是如何使中心内容单独滚动?
    • 是的,您可以通过样式来做到这一点:只需将其用于您的标题: style=" position: sticky ; top: 0px; " 和您的侧栏: style=" top: 0px; width: 100px;位置:固定;"对于要滚动的正文,请使用:style =“overflow:scroll;”只需创建一个 plunker,以便我可以为您提供相同的帮助
    • 正如我上面提到的,我正在使用 angular flex-layout 库。因此,我对在样式属性中使用宽度参数犹豫不决。检查是否可以使用 angular flex-layout 实现这一点
    【解决方案2】:

    好的。要完成这项工作,您需要做一些事情。

    首先,您需要确保您的身体高度为 100%。否则,每当一个元素被赋予 100% 的高度时,它就不会知道“100% 是什么”,只会随心所欲地增长。

    接下来您需要在几个地方添加此样式:height: 100%; overflow: auto。这表示“元素填充它的父元素,如果内容变得更大,则使内容可滚动”。具体来说,将这些样式添加到两个内部列中。

    stackblitz with result

    【讨论】:

    • 示例中的导航链接不起作用。然而,上面描述的解决方案对我来说就像一个魅力!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多