我正在使用Angular CDK的叠加模块。我只是找不到添加位置的方法:绝对覆盖?该模块将收到与所连接的元素位置匹配的top
和left
位置,但叠加层将不会收到position: absolute
。由于ViewEncapsulation,我无法添加绝对位置。我真的很难找到解决方案。
问题:
如何使用cdkOverlayOrigin
和cdkConnectedOverlayOrigin
模块:
import { OverlayModule } from '@angular/cdk/overlay';
@NgModule({
imports: [
OverlayModule,
],
declarations: [ MenuComponent ],
})
export class MenuModule {
}
组件:
@Component({
selector: 'app-menu',
templateUrl: './menu.component.html',
styleUrls: [ './menu.component.scss' ],
})
export class MenuComponent {
}
模板:
<div style="margin: 0 auto; width: 30%">
<h1 cdkOverlayOrigin
#checkListTrigger="cdkOverlayOrigin"
(click)="checkListOpen = !checkListOpen"
style="background: blue">Overlay Origin</h1>
<ng-template
cdkConnectedOverlay
[cdkConnectedOverlayOrigin]="checkListTrigger"
[cdkConnectedOverlayOpen]="checkListOpen">
<ng-container>
<p>Why you no positioned on h1 element</p>
</ng-container>
</ng-template>
</div>
答案 0 :(得分:5)
生成的叠加容器的绝对定位在.cdk-overlay-pane
类中定义,该类是角度材质主题的一部分。您可能忘记包含主题了吗?
如果是这样,请将以下行添加到style.css文件中(假设您使用Angular CLI项目)。
@import "~@angular/material/prebuilt-themes/indigo-pink.css";
答案 1 :(得分:2)
API documentation中对此进行了描述。您可以为叠加层窗格指定面板类。
以下是一些代码:
const overlay = overlay.create({
panelClass: 'pos-absolute'
});
.pos-absolute {
position: absolute;
}