Angular Material cdk-container 和主站点已修复 header z-index 覆盖

Angular Material cdk-container and main site fixed header z-index override

我在 angular material 中有 fixed header 的站点,在 1100 中有 z-index

虽然我的站点中有一些 mat-menu 与 header 和 z-index:1200 重叠并且有 class cdk-overlay-container(angular 物资class) 这是默认行为。

为了覆盖它,我只是将 cdk-overlay-container z-index 减少到 1000 以便它落后于 fixed header 并且一切对我来说都很好。

问题

但是当我打开我的 material 对话框时,它使用相同的 cdk-overlay-container 和相同的 z-index 它显示我的固定 header 在该覆盖层之上,因为它的高 z-index,所以知道如何通过向 cdk-overlay-container 添加不同的 class 来实现上述场景,以便我的 mat-menu 落后于 fixed header 但我的 mat-dialog 在上面所有内容。

屏幕截图

正常情况 https://www.screencast.com/t/XhB2szH3gZe

问题场景 https://www.screencast.com/t/fYrMYFEOd

我有一个 type-script 的解决方案(当对话框显示 header 的 z-index 较低时)但我需要一些纯粹的 CSS 解决方案。

谢谢!

我自己想通了

只需覆盖 cdk-overlay-container

z-index

在你的style.scss

.cdk-overlay-container{
  z-index:999; //lower then fixed header z-index so it goes behind it
}

并在您的组件中 dialog.scss

.cdk-overlay-container{
   z-index:2000 !important; //higher then fixed header z-index so it comes above
}

干杯!

我对全屏 CDK 覆盖容器和 material 对话框也有类似的问题,它们应该高于任何东西。问题是,如果您使用提供的 material 元素,例如对话框、工具提示、菜单,它们都可以与覆盖 CDK 一起使用。然后,最重要的是,您可能拥有使用 CDK 的自定义覆盖服务。在我的例子中,创建了两个 cdk-container-overlay div。 z-index 默认为 1000,当同时需要两个覆盖时,最新的实例重叠。

有些人会大喊这不是 Angular 方式,但就我而言,我最终在 material 对话框的配置中添加了一个 backdropClass。然后,我只是 select 对话框背景的 parentNode 并根据需要手动添加 z-index。

public openFeedbackDialog(): void {
    this.dialog.open(FeedbackFormComponent, {
        width: '450px',
        maxHeight: '450px',
        minHeight: '200px',
        backdropClass: 'feedbackBackdrop',
        hasBackdrop: true
    })
    window.document.querySelector<any>('.feedbackBackdrop').parentNode.style.zIndex = "1001"
}

您可以使用自定义 OverlayContainer class 来解决问题。您可以找到实施示例 here.