Chromeで純粋なCSSを使用して視差スクロール効果を作成する方法
序章
最新のCSSは、多くの高度なユーザーインターフェイス(UI)機能を作成するために使用できる強力なツールです。 以前は、これらの機能はJavaScriptライブラリに依存していました。
このガイドでは、Webページにスクロール視差効果を作成するためにいくつかのCSS行を設定します。 placekitten.comの画像をプレースホルダーの背景画像として使用します。
チュートリアルを完了すると、純粋なCSSスクロール視差効果のあるWebページが作成されます。
警告:この記事では、ブラウザー間で機能しない実験的なCSSプロパティを使用しています。 このプロジェクトはテスト済みで、Chromeで動作します。 この手法は、Firefox、Safari、およびiOSでは、これらのブラウザーの最適化の一部が原因でうまく機能しません。
ステップ1—新しいプロジェクトを作成する
この手順では、コマンドラインを使用して新しいプロジェクトフォルダーとファイルを設定します。 開始するには、ターミナルを開き、新しいプロジェクトフォルダを作成します。
次のコマンドを入力して、プロジェクトフォルダーを作成します。
mkdir css-parallax
この場合、フォルダをcss-parallax
と呼びます。 次に、css-parallax
フォルダーに移動します。
cd css-parallax
次に、nano
コマンドを使用して、css-parallax
フォルダーにindex.html
ファイルを作成します。
nano index.html
プロジェクトのすべてのHTMLをこのファイルに入れます。
次のステップでは、Webページの構造の作成を開始します。
ステップ2—アプリケーション構造を設定する
このステップでは、プロジェクトの構造を作成するために必要なHTMLを追加します。
index.html
ファイル内に、次のコードを追加します。
css-parallax / index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>CSS Scrolling Parallax</title> </head> <body></body> </html>
これは、HTML
を使用するほとんどのWebページの基本構造です。
<body>
タグ内に次のコードを追加します。
[label css-parallax/index.html] <body> ... <main> <section class="section parallax bg1"> <h1>Cute Kitten</h1> </section> <section class="section static"> <h1>Boring</h1> </section> <section class="section parallax bg2"> <h1>Fluffy Kitten</h1> </section> </main> ... </body>
このコードは、3つの異なるセクションを作成します。 2つには背景画像があり、1つは静的な無地の背景になります。
次のいくつかの手順では、HTML
で追加したクラスを使用して、各セクションのスタイルを追加します。
ステップ3—CSSファイルの作成と初期CSSの追加
このステップでは、CSS
ファイルを作成します。 次に、Webサイトのスタイルを設定して視差効果を作成するために必要な初期CSSを追加します。
まず、nano
コマンドを使用して、css-parallax
フォルダーにstyles.css
ファイルを作成します。
nano styles.css
ここに、視差スクロール効果を作成するために必要なすべてのCSSを配置します。
次に、.wrapper
クラスから始めます。 styles.css
ファイル内に、次のコードを追加します。
[label css-parallax/styles.css] .wrapper { height: 100vh; overflow-x: hidden; overflow-y: auto; perspective: 2px; }
.wrapper
クラスは、ページ全体のパースペクティブとスクロールのプロパティを設定します。
エフェクトを機能させるには、ラッパーの高さを固定値に設定する必要があります。 100
に設定されたビューポートユニットvh
を使用して、画面のビューポートの全高を取得できます。
画像を拡大縮小すると、画面に水平スクロールバーが追加されるため、overflow-x: hidden;
を追加して無効にすることができます。 perspective
プロパティは、ビューポートから、CSS
で作成および変換する疑似要素までの距離をシミュレートします。
次のステップでは、CSSを追加してWebページのスタイルを設定します。
ステップ4—.section
クラスのスタイルを追加する
このステップでは、.section
クラスにスタイルを追加します。
styles.css
ファイル内で、ラッパークラスの下に次のコードを追加します。
css-parallax / styles.css
.wrapper { height: 100vh; overflow-x: hidden; perspective: 2px; } .section { position: relative; height: 100vh; display: flex; align-items: center; justify-content: center; color: white; text-shadow: 0 0 5px #000; }
.section
クラスは、メインセクションのサイズ、表示、およびテキストのプロパティを定義します。
relative
の位置を設定して、子.parallax::after
が親要素.section
に対して絶対的に配置されるようにします。
各セクションには、ビューポートの全高を占める100
のview-height(vh)
があります。 この値は、セクションごとに任意の高さに変更および設定できます。
最後に、残りのCSS
プロパティを使用して、各セクション内のテキストをフォーマットし、スタイルを追加します。 各セクションの中央にテキストを配置し、white
の色を追加します。
次に、疑似要素を追加してスタイルを設定し、HTML
の2つのセクションに視差効果を作成します。
ステップ5—.parallax
クラスのスタイルを追加する
このステップでは、スタイルを.parallax
クラスに追加します。
まず、スタイルを設定する.parallax
クラスに疑似要素を追加します。
注: MDN Webドキュメントにアクセスして、CSS疑似要素の詳細を確認できます。
.section
クラスの下に次のコードを追加します。
css-parallax / styles.css
... .section { position: relative; height: 100vh; display: flex; align-items: center; justify-content: center; color: white; text-shadow: 0 0 5px #000; } .parallax::after { content: " "; position: absolute; top: 0; right: 0; bottom: 0; left: 0; transform: translateZ(-1px) scale(1.5); background-size: 100%; z-index: -1; } ...
.parallax
クラスは、::after
疑似要素を背景画像に追加し、視差効果に必要な変換を提供します。
疑似要素は、クラス.parallax
を持つ要素の最後の子です。
コードの前半は、疑似要素を表示して配置します。 transform
プロパティは、疑似要素をz-index
のカメラから遠ざけるように移動し、ビューポート全体に拡大します。
疑似要素が遠くにあるため、移動が遅くなっているように見えます。
次のステップでは、背景画像と静的な背景スタイルを追加します。
ステップ6—各セクションの画像と背景を追加する
このステップでは、最後のCSS
プロパティを追加して、静的セクションの背景画像と背景色を追加します。
まず、.parallax::after
クラスの後に次のコードを使用して、.static
セクションに無地の背景色を追加します。
css-parallax / styles.css
... .parallax::after { content: " "; position: absolute; top: 0; right: 0; bottom: 0; left: 0; transform: translateZ(-1px) scale(1.5); background-size: 100%; z-index: -1; } .static { background: red; } ...
.static
クラスは、画像のない静的セクションに背景を追加します。
.parallax
クラスの2つのセクションにも、それぞれ異なる追加のクラスがあります。 .bg1
クラスと.bg2
クラスを使用して、子猫の背景画像を追加します。
次のコードを.static
クラスに追加します。
css-parallax / styles.css
... .static { background: red; } .bg1::after { background-image: url('https://placekitten.com/g/900/700'); } .bg2::after { background-image: url('https://placekitten.com/g/800/600'); } ...
.bg1, .bg2
クラスは、セクションごとにそれぞれの背景画像を追加します。
画像はplacekittenのウェブサイトからのものです。 プレースホルダーとして使用する子猫の写真を取得するためのサービスです。
視差スクロール効果のコードがすべて追加されたので、index.html
のstyles.css
ファイルにリンクできます。
ステップ7—ブラウザでstyles.css
をリンクしてindex.html
を開く
このステップでは、styles.css
ファイルをリンクし、ブラウザーでプロジェクトを開いて、視差スクロール効果を確認します。
まず、index.html
ファイルの<head>
タグに次のコードを追加します。
[label css-parallax/index.html] ... <head> <meta charset="UTF-8" /> <^> <link rel="stylesheet" href="styles.css" /> <^> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>CSS Parallax</title> </head> ...
これで、ブラウザでindex.html
ファイルを開くことができます。
これで、スクロール効果のある機能するWebページを設定できました。 このGitHubリポジトリをチェックして、完全なコードを確認してください。
結論
この記事では、index.html
およびstyles.css
ファイルを使用してプロジェクトを設定し、機能するWebページを作成しました。 Webページの構造を追加し、サイトのさまざまなセクションのスタイルを作成しました。
使用する画像や視差効果を遠ざけて、動きを遅くすることができます。 perspective
およびtransform
プロパティのピクセル量を変更する必要があります。 背景画像をまったくスクロールさせたくない場合は、perspective/translate/scale
の代わりにbackground-attachment: fixed;
を使用してください。