【问题标题】:Fixed element is relative to component, not window in Angular2固定元素相对于组件,而不是Angular2中的窗口
【发布时间】:2017-04-20 12:57:13
【问题描述】:

我有一个 angular2 应用程序,它使用 Angular2-material 库进行样式设置。我正在尝试添加一个 FAB(浮动操作按钮)以悬停在应用程序的右上角,但它会将自身固定到其父组件,而不是窗口。

应用的层次结构如下:

app.component
|-detail.component

在 app.component 模板中,我在布局指令的主体中使用带有 router-outlet 的 md-sidenav-layout 指令:

<md-sidenav-layout>
  <md-sidenav #sideNav (open)="closeStartButton.focus()">
    <router-outlet name="navMenu"></router-outlet>
    <br>
    <button md-button #closeStartButton (click)="sideNav.close()">Close</button>
  </md-sidenav>
  <md-toolbar color="primary">
    <button md-icon-button (click)="sideNav.toggle()">
      <md-icon class="md-24">menu</md-icon>
    </button>
    <span>{{title}}</span>
  </md-toolbar>
  <div role="main">
    <router-outlet></router-outlet>
  </div>
</md-sidenav-layout>

在详细组件模板中,我在模板顶部有以下内容:

<button md-mini-fab class="fab" (click)="toggleAdd()">
  <i class="material-icons">add</i>
</button>

以及该组件的 css:

.fab {
  display: block;
  position: fixed;
  right: 2rem;
  bottom: 2rem;
  z-index: 10;
}

但是,当我导航到详细信息页面时,.fab 是相对于组件而不是窗口定位的。我试过在细节组件上使用encapsulation: ViewEncapsulation.None,但这也不影响它。有没有办法将 fab 定义在 detail 组件中,但它仍然相对于窗口是固定的?

【问题讨论】:

    标签: css angular angular2-material


    【解决方案1】:

    寻找应用 CSS 转换的东西。在我的例子中,我通过 Angular 动画应用了变换。显然变换中断位置:固定。 Why does `transform` break `position: fixed`?

    我希望我现在可以弄清楚如何进行这项工作。

    【讨论】:

      【解决方案2】:

      在您的 app.component.html 中添加以下代码:

      <md-sidenav-container>
          <md-sidenav mode="side" opened="true">Drawer content</md-sidenav>
          <div class="my-content">Main content</div>
      </md-sidenav-container>
      

      全局样式.css:

      html, body, material-app, md-sidenav-container, .my-content {
          margin: 0;
          width: 100%;
          height: 100%;
      }
      

      它对我有用! ;)

      【讨论】:

      【解决方案3】:

      我回答了一个非常相似的问题here

      要点:我用一个相当繁重的解决方法解决了这个问题。我从主要内容中删除了 FAB,在我的模板中定义了一个辅助路由器出口(在 md-sidenav-layout 之外),为 FAB 创建了一个独立组件,并在服务中使用 Observable 将点击事件广播到主要组件.

      另一个线程中的答案包含代码示例和一个有效的 plunker 示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-18
        相关资源
        最近更新 更多