CSS 完全な視差スクロール効果

CSS 完全な視差スクロール効果

1. 何ですか

視差スクロールとは、複数の背景レイヤーを異なる速度で動かすことで、3次元のモーション効果を生み出し、優れた視覚体験をもたらすことを指します。

ウェブページは、背景レイヤー、コンテンツレイヤー、フローティングレイヤーに分けられます。

マウスホイールをスクロールすると、各レイヤーが異なる速度で移動し、視覚的な違いの効果を生み出します。

2. 実装

CSS を使用してパララックス スクロール効果を実現する方法はいくつかあります。

  • 背景添付
  • 変換:3D を変換

背景添付

この機能は、背景画像を固定するか、ページの残りの部分と一緒にスクロールするかを設定するものです。

値は次のとおりです。

  • scroll: デフォルト値。背景画像はページの残りの部分がスクロールするにつれて移動します。
  • 修正: ページの残りの部分がスクロールしても背景画像が動かない
  • 継承: 親要素のbackground-attachment属性の値を継承します

スクロール パララックスを実現するには、背景がビューポートに対して固定されるように、background-attachment プロパティを fixed に設定する必要があります。要素にスクロール機構があっても、背景は要素の内容に合わせてスクロールしません。

つまり、背景は初期位置に固定されます。

コア CSS コードは次のとおりです。

セクション {
    高さ:100vh;
}

.g-img {
    背景画像: url(...);
    背景添付: 固定;
    背景サイズ: カバー;
    背景の位置: 中央 中央;
}

全体的な例は次のとおりです。

<スタイル>
div {
            高さ:100vh;
            背景: rgba(0, 0, 0, .7);
            色: #fff;
            行の高さ: 100vh;
            テキスト配置: 中央;
            フォントサイズ: 20vh;
        }

        .a-img1 {
            背景画像: url(https://images.pexels.com/photos/1097491/pexels-photo-1097491.jpeg);
            背景添付: 固定;
            背景サイズ: カバー;
            背景の位置: 中央 中央;
        }

        .a-img2 {
            背景画像: url(https://images.pexels.com/photos/2437299/pexels-photo-2437299.jpeg);
            背景添付: 固定;
            背景サイズ: カバー;
            背景の位置: 中央 中央;
        }

        .a-img3 {
            背景画像: url(https://images.pexels.com/photos/1005417/pexels-photo-1005417.jpeg);
            背景添付: 固定;
            背景サイズ: カバー;
            背景の位置: 中央 中央;
        }
</スタイル>
 <div class="a-text">1</div>
    <div class="a-img1">2</div>
    <div class="a-text">3</div>
    <div class="a-img2">4</div>
    <div class="a-text">5</div>
    <div class="a-img3">6</div>
    <div class="a-text">7</div>

変換:3D を変換

同様に、まずは transform と perspective という 2 つの概念を見てみましょう。

  • transform: 平行移動、回転、拡大縮小など、要素 (2D/3D) を変換できる CSS3 属性。
  • perspective: CSS3属性。要素が3D変換を伴う場合、perspectiveは私たちの目に見える3D立体効果、つまり空間感覚を定義することができます。

3Dパース図は以下のようになります。

例えば:

<スタイル>
    html{
        オーバーフロー: 非表示;
        高さ: 100%
    }

    体 {
        /* 視差要素の親には 3D パースペクティブが必要です */
        パースペクティブ: 1px;
        変換スタイル: 3D を保持します。
         高さ: 100%;
        overflow-y: スクロール;
        オーバーフロー-x:非表示;
    }
    #アプリ{
        幅:100vw;
        高さ:200vh;
        背景:スカイブルー;
        パディング上部:100px;
    }
    。1つ{
        幅:500ピクセル;
        高さ:200px;
        背景:#409eff;
        変換: translateZ(0px);
        下部マージン: 50px;
    }
    。二{
        幅:500ピクセル;
        高さ:200px;
        背景:#67c23a;
        変換: translateZ(-1px);
        下部マージン: 150px;
    }
    。三つ{
        幅:500ピクセル;
        高さ:200px;
        背景:#e6a23c;
        変換: translateZ(-2px);
        下部マージン: 150px;
    }
</スタイル>
<div id="アプリ">
    <div class="one">1</div>
    <div class="two">2</div>
    <div class="three">3</div>
</div>

この方法で視覚的な違いを実現する原理は次のとおりです。

  • コンテナーが transform-style: preserve-3d および perspective: xpx に設定されている場合、このコンテナー内の子要素は 3D 空間に配置されます。
  • サブ要素は異なる transform: translateZ() を設定します。このとき、3D Z 軸方向における異なる要素と画面 (私たちの目) の間の距離は異なります。
  • スクロール バーをスクロールする場合、子要素の transform: translateZ() が異なるため、画面 (人間の目) に対するスクロール translateY の上下の距離も異なり、スクロール パララックスの効果が得られます。

上記は、CSS を使用してパララックス スクロール効果を実現する方法の詳細です。CSS パララックス スクロール効果の詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

<<:  HTMLはa要素hrefのURLリンクを自動的に更新したり新しいウィンドウを開いたりする機能を実装する

>>: 

推薦する

この記事では、Vue 3.0 レスポンシブの使い方を説明します。

目次ユースケースリアクティブAPI関連プロセス反応的なcreateReactiveObjectはレス...

Kali Linux システムのバージョンを確認する方法

1. Kali Linuxシステムのバージョンを確認するコマンド: cat /etc/issue 2...

Linux で固定 IP を設定する方法 (テスト済みで効果的)

まず、仮想マシンを開きます xshell5 を開いて仮想マシンに接続します (より便利です。Linu...

Vueブラウザが監視を再開するための具体的な手順

序文ページを共有するときに、ブラウザの戻るボタンをクリックしてプロジェクトのホームページに戻り、訪問...

Vue 仮想 DOM クイックスタート

目次仮想DOM仮想DOMとは何か仮想DOMの役割Vue の仮想 DOM vノードvNodeとはvNo...

MySQL 4G メモリ サーバー構成の最適化

会社のウェブサイトのアクセス数が増えてくると(1日10万PV以上)、当然MySQLがボトルネックにな...

dockerにmysqlをインストールした後にNavicatが接続できない問題に対する完璧な解決策

1. Dockerがイメージをプルするdocker pull mysql (デフォルトで最新バージョ...

Firefoxでリンクをクリックしたときに点線の枠線を削除する方法

今日、ブラウザの互換性の問題にいくつか遭遇しました。そのうちの 1 つは奇妙に感じました。Firef...

Ember.js と Vue.js の詳細な比較

目次概要フレームワークを選択する理由は何ですか? js のエンバーEmber.js と Vue.js...

データベースのデフォルトパスを変更した後にmysqlが起動できない問題の解決策

序文mysql がデフォルトのデータベース パスを変更したため、サービスを開始できませんでした。ログ...

MySQL マルチテーブル結合入門チュートリアル

接続は、実際の外部キー(人工的に作成された 2 つのテーブル間の対応関係を指します。対照的に、FOR...

CSSでプロセスナビゲーション効果を実現する(3つの方法)

CSS によりプロセスナビゲーション効果を実現します。具体的な内容は以下のとおりです。 ::tip...

シンプルなドラッグ効果を実現するjs

この記事では、簡単なドラッグ効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...

Linux で TCP 接続の最大数をテストする方法

序文TCP サーバの最大同時接続数に関して、「ポート番号の上限が 65535 であるため、TCP サ...

Vueリストデータを削除した後、ページを自動的に更新する方法と更新方法の詳細な説明

問題の説明:フロントエンドがデータの一部を削除したり、新しいデータを追加したりすると、バックエンドの...