【CSS】overscroll-behavior プロパティでスクロール制御

どうも、くまだです。

CSSのoverscroll-behavior プロパティに関するメモ。

overscroll-behavior プロパティ

overscroll-behavior プロパティとは、スクロールコンテナを限界までスクロールした場合の挙動を制御するプロパティです。

例えば、モーダルのコンテンツを画面下までスクロールしたあともスクロールすると、背景のコンテンツも連動してスクロールしてしまいます。

overscroll-behaviorを使うと、画面下までスクロールしたあと、背景のコンテンツはスクロールに連動しなくなります。

  <div class="container">
    <section class="section "></section>
    <section class="section "></section>
    <section class="section "></section>
    <section class="section "></section>

    <div class="modal">
      <div class="modal-content">
        <p>コンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ</p>
        <p>コンテンツコンテンツコンテンツコンテンツコンテンツ</p>
      </div>
    </div>
  </div>
.modal {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
}

.modal-content {
    height: 50vh;
    overflow-y: auto;
    overscroll-behavior: contain;
    background-color: #fff;
    font-size: 24px;
    overflow-y: auto;
}

.section {
    width: 100%;
    height: 500px;
}

.section:nth-child(odd) {
    background-color: #f0f0f0;
}
.section:nth-child(even) {
    background-color: orange;
}

See the Pen overscroll-behavior by kuma0605 (@kuma0605) on CodePen.

 overscroll-behavior: contain;を外すと、モーダルを下までスクロールし続けると背景のセクションもスクロールできてしまうのが確認できます。

containは、要素内でオーバースクロールを完結させて、外側に伝播させないようにできます。

ここまで読んでくださりありがとうございました。

この記事を書いた人