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リンクを自動的に更新したり新しいウィンドウを開いたりする機能を実装する

>>: 

推薦する

Python Flask WeChat アプレットのログインプロセスとログイン API 実装コード

1. まずは効果を見てみましょうインターフェース要求によって返されるデータ: 2. 公式ログインフロ...

Dockerはコンテナを通じてイメージを生成し、詳細にDockerCommitを送信します

目次ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを...

HTMLでマスクレイヤーを実装する方法 HTMLでマスクレイヤーを使用する方法

Web ページでマスク レイヤーを使用すると、繰り返しの操作を防ぎ、読み込みを促進できます。また、ポ...

Linux での Tomcat8 のインストールとアンインストールに関する詳細なグラフィック チュートリアル

[ Tomcat8 の Linux インストール ] Tomcat をアンインストールする - まず...

1 時間で MySQL データベースを学ぶ (Zhang Guo)

目次1. データベースの概要1.1 開発の歴史2. MySQL の紹介2.1. MySQLの概要2....

MySQLのグローバルロックとテーブルロックに関する詳細な理解

序文ロックの範囲に応じて、MySQL のロックは、グローバル ロック、テーブル ロック、行ロックに大...

Docker コンテナ データ ボリュームの名前付きマウントと匿名マウントの問題

目次コンテナデータボリュームとはコンテナ データ ボリュームが必要なのはなぜですか?使用データボリュ...

webpackを使用してTypeScriptコードをパッケージ化およびコンパイルする方法を教えます

TypeScript バンドルwebpack 統合通常、実際の開発では、ビルド ツールを使用してコー...

MySQL が自動的に再起動する問題の解決方法

序文最近、テスト環境で MySQL データベースが自動的に再起動し続ける問題が発生しました。原因は、...

トークン生成と検証を実装するミニプログラム

目次プロセスデモミニプログラムバックエンドインターフェースプロセス各リクエストインターフェースは検証...

Zabbix で監視項目と集約されたグラフを設定するためのサンプルコード

1. ローカルマシンを監視するためにZabbixエージェントをインストールするエージェントソフトウェ...

js キャンバスはスライダー検証を実現します

この記事の例では、スライダー検証を実装するためのjsキャンバスの具体的なコードを参考までに共有してい...

MySQL Limitクエリのパフォーマンスを向上させる方法

MySQL データベース操作では、一部のクエリを実行するときにデータベース エンジンが完全なテーブル...

vue3を使用して人間と猫のコミュニケーションアプレットを実装する

目次序文プロジェクトを初期化するデザインコードの実装オンデマンドロードオーディオを再生録音長押しイベ...

MySQL 8.0.20 のインストールと設定の詳細なチュートリアル

この記事では、MySQL 8.0.20のインストールと設定方法についての詳細なチュートリアルを参考ま...