固定元素是相对于组件的,而不是Angular2中的window
Fixed element is relative to component, not window in Angular2
我有一个使用 Angular2-material 库进行样式设置的 angular2 应用程序。我正在尝试添加一个 FAB(浮动操作按钮)悬停在应用程序的右上角,但它正在将自身固定到其父组件,而不是 window。
应用层级如下:
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 是相对于组件而不是 window 定位的。我试过在详细信息组件上使用 encapsulation: ViewEncapsulation.None
,但这也不影响它。有没有办法保持 fab 在细节组件中定义,但它仍然相对于 window?
固定
寻找在链上应用 CSS 转换的东西。在我的例子中,我通过 Angular 动画应用了一个变换。显然变换中断 position:fixed。
我希望我现在能弄清楚如何完成这项工作。
我回答了一个非常相似的问题here。
要点:我通过相当繁重的解决方法解决了这个问题。我从主要内容中删除了 FAB,在我的模板中定义了一个辅助路由器出口(在 md-sidenav-layout 之外),为 FAB 创建了一个独立组件,并在服务中使用了一个 Observable 来将点击事件广播到主要组件.
另一个线程中的答案包含代码示例和一个有效的 plunker 示例。
在您的 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>
全球styles.css:
html, body, material-app, md-sidenav-container, .my-content {
margin: 0;
width: 100%;
height: 100%;
}
对我有用! ;)
我有一个使用 Angular2-material 库进行样式设置的 angular2 应用程序。我正在尝试添加一个 FAB(浮动操作按钮)悬停在应用程序的右上角,但它正在将自身固定到其父组件,而不是 window。
应用层级如下:
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 是相对于组件而不是 window 定位的。我试过在详细信息组件上使用 encapsulation: ViewEncapsulation.None
,但这也不影响它。有没有办法保持 fab 在细节组件中定义,但它仍然相对于 window?
寻找在链上应用 CSS 转换的东西。在我的例子中,我通过 Angular 动画应用了一个变换。显然变换中断 position:fixed。
我希望我现在能弄清楚如何完成这项工作。
我回答了一个非常相似的问题here。
要点:我通过相当繁重的解决方法解决了这个问题。我从主要内容中删除了 FAB,在我的模板中定义了一个辅助路由器出口(在 md-sidenav-layout 之外),为 FAB 创建了一个独立组件,并在服务中使用了一个 Observable 来将点击事件广播到主要组件.
另一个线程中的答案包含代码示例和一个有效的 plunker 示例。
在您的 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>
全球styles.css:
html, body, material-app, md-sidenav-container, .my-content {
margin: 0;
width: 100%;
height: 100%;
}
对我有用! ;)