135
87

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PC・スマホ両対応】CSSだけでモーダルの背景をスクロールさせない新しい方法(つっかえ棒式モーダル背景固定法)

Last updated at Posted at 2022-07-16

スクロールチェーンを防ぐための「overscroll-behavior: contain」を応用した方法をご紹介します。
名付けて「つっかえ棒式モーダル背景固定法」です。

ソースコードはこちら
https://github.com/gorimatyan/css-modal-nonscroll

目次

1.対象読者
2.モーダルの構成
3.つっかえ棒で簡単解決
4.まとめ
5.追記

1. 対象読者

↓ モーダルの後ろがスクロールされてしまう人
1657935999499.gif

2. モーダルの構成

1657939434485.jpg

/* index.html */
<main id="container">
    <div class="modalWrapper">
        <div class="modal">
            <header>ヘッダー</header>
            <p>今日も頑張ろう</p>
        </div>
    </div>
</main>

3. つっかえ棒で簡単解決

結論

1657941451735.jpg

手順

①つっかえ棒を設置する

modalの下にdiv要素を一つ書きます。

/* index.html */
<main id="container">
    <div class="modalWrapper">
        <div class="modal">
            <header>ヘッダー</header>
            <p>今日も頑張ろう</p>
        </div>
+       <div class="nonScroll"></div>
    </div>
</main>

このnonScrollとやらが図にある黄色の「つっかえ棒」です。

②CSSを書く

modalWrapperとnonScrollにCSSを設定するだけでモーダルの背景がスクロールされなくなります。

.modalWrapper {
    display: flex;
    overscroll-behavior: contain;
    overflow-y: scroll;
}
.nonScroll {
    height:calc(100vh + 1px) ;
    width: 1px;
    background-color: transparent;
}

なぜスクロールされなくなる?
まずモーダルと背景が二層 (z-index) になっていると考えてください。

モーダル全体を囲むmodalWrapperに「overscroll-behavior」と「overflow-y」を設定することで、手前にあるモーダル全体がスクロールの対象になります。
よって、モーダル全体(modalWrapper)に覆われている背景はスクロールされなくなるという理屈です。

まとめ

あなたの作っているモーダルに対して
モーダルを構成する親要素に.modalWrapperのCSSを当てる
その子要素にdiv.nonScrollを配置し上記のCSSを当てる

実際に見てみたいという方はワタクシのGitHub貼っときますので覗いちゃってください。
https://github.com/gorimatyan/css-modal-nonscroll

追記

Twitterにてatomsphere5様が改良したものを載せております!
改良前:HTMLにdiv.nonScrollを追加
→ 改良後:疑似クラスで作成することで完全にCSSのみで実装可能に

下記ツイートのリンクからコードサンドボックスでデモが見られるので是非ご確認ください!!

135
87
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
135
87

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?