sticky, scroll-margin-top, scrollIntoView

261 阅读1分钟
<!DOCTYPE html>
<html>
  <head>
    <style>
      * {
        box-sizing: border-box;
      }
      .container {
        display: grid;
        grid-template-rows: 80px 1fr;
        grid-template-columns: 240px 1fr;
        height: 400px;
        overflow: auto;
      }
      .head1,
      .head2 {
        position: sticky;
        top: 0;
        height: 80px;
        background-color: green;
        border: 1px solid red;
      }
      .head1 {
        z-index: 1;
      }
      .head1,
      .body1 {
        position: sticky;
        left: 0;
      }
      .item {
        height: 80px;
        /* overflow: hidden; */
        background-color: red;
        border: 1px solid green;
        scroll-margin-top: 80px;
      }
      .body2 {
        width: 1200px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="head1">1</div>
      <div class="head2">2</div>
      <div class="body1">
        <div class="item" id="target">0</div>
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
      </div>
      <div class="body2">
        <div class="item">0</div>
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
      </div>
    </div>
    <script>
      window.scroll = () => {
        window.current = document.getElementById('target');
        window.current.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
      };
    </script>
  </body>
</html>