angular-material侧边导航sticky-top定位实现?

想实现类似 material官网(https://v13.material.angular.io/)的布局

原先的angualr代码

examples.component.html


<style>
  
  .box-wrapper {
    height: calc(100vh - 50px);
    overflow: auto;
  }

  mat-drawer-content {
    min-height: calc(100vh - (50px + 120px));
  }

  .top-nav {
    height: 50px;
    background-color: red;
    color: #FFF;
  }

  .header {
    height: 120px;
    background-color: blue;
    color: #FFF;
  }

  .sticky-box {
    position: sticky;
    top: 0;
    z-index: 1000;
  }

  .content {
    height: 150vh;
  }

</style>

<div class="top-nav">
  <h1>Top-Nav</h1>
</div>

<div class="box-wrapper">
  <div class="header">
    <h1>Header</h1>
  </div>

  <mat-drawer-container class="sticky-box">

    <!-- 真正需要sticky定位的元素 -->
    <mat-drawer mode="side" opened>
      <h1>Drawer content</h1>
    </mat-drawer>

    <mat-drawer-content>
      <h1>Main content</h1>
    </mat-drawer-content>
  </mat-drawer-container>

  <div class="content"></div>
</div>

需求是 让Drawer content这块内容能直接粘贴定位到Top-Nav下, 如下图

image.png

应该如何才能实现这样的布局? 之前找过很多方法, 用原生html + css 实现过, 但是没有办法用在angular-material里

以下是普通html实现的代码

test.html

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title></title>
</head>

<body>

    <style>
        @import url(https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css);

        .top-navbar {
            height: 70px;
            background-color: rgb(250, 200, 200);
        }

        .app-container {
            height: calc(100vh - 70px);
            background-color: rgb(200, 250, 200);

        }

        .info {
            height: 175px;
            background-color: rgb(200, 200, 250);
        }

        .router {
            width: 100%;
            min-height: 150vh;
            background-color: rgb(120, 50, 250);
        }

        /* ----- 核心代码 ----- */

        .app-container {
            overflow: auto;
        }

        .main {
            display: flex;
        }

        .sticky-box {
            position: sticky;
            top: 0;
        }
    </style>

    <div class="box-wrapper">
        <div class="top-navbar">
            <h1>Part1</h1>
        </div>
        <div class="app-container">
            <div class="info">
                <h1>Part2</h1>
            </div>
            <main class="main">
                <div class="side-navbar">
                    <div class="sticky-box">
                        <h1>Part3</h1>
                    </div>
                </div>
                <div class="router">
                    <h1>Part4</h1>
                </div>
            </main>
        </div>
    </div>
</body>

</html>

但是这段代码不知道怎么才能用在angular-material组件里
试过很多次都达不到预期的效果
求助!!

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题