スクロール連動アニメーションの作り方:CSS vs JavaScript

2024-04-02

CSS スクロールタイムライン:スクロール連動アニメーションを簡単実装

概要

  • 動作環境: 主要なブラウザでサポートされています。
  • 利点:
    • コード量が少なく、記述がシンプル
    • スクロール量とアニメーションを直接結びつけ、直感的に操作可能
    • 高度なアニメーションも容易に実現
  • 欠点:
    • 一部の古いブラウザではサポートされていない

主な機能

  • スクロール位置とアニメーションの連動:
    • スクロールに応じて、要素の表示・非表示、位置、色、形状などの変化をアニメーションさせる
    • 複数のアニメーションを同時に実行し、複雑な動きを表現
  • アニメーションのタイミング制御:
    • スクロール開始時、終了時、特定の位置でのみアニメーションを実行
    • アニメーションの速度やイージングを調整
  • 複数タイムラインの管理:
    • 複数のスクロールタイムラインを定義し、個別にアニメーションを制御
    • タイムラインを組み合わせることで、より複雑なアニメーションを実現

基本的な使い方

  1. @scroll-timeline ルールでタイムラインを定義
    • タイムラインの名前と、スクロール方向(縦 or 横)を指定
  2. scroll-timeline プロパティでアニメーション対象を指定
    • タイムラインの名前と、アニメーションの開始位置・終了位置を指定
  3. アニメーションプロパティで具体的な動きを定義
    • opacity、transform、background-color など、アニメーションさせるプロパティと変化量を指定
  • スクロールタイムラインは、視覚的な訴求力向上、ユーザーエンゲージメント向上、操作性向上などに役立ちます。
  • 実装例やチュートリアルが多数公開されているので、参考にしながら学習を進めると効果的です。

CSS スクロールタイムラインは、スクロール連動アニメーションを簡単に実装できる便利な機能です。コード量が少なく、直感的に操作できるため、初心者にもおすすめです。



スクロールタイムライン サンプルコード

<div class="box"></div>
.box {
  width: 100px;
  height: 100px;
  background-color: red;
}

@scroll-timeline {
  name: "my-timeline";
}

.box {
  scroll-timeline: my-timeline;
  scroll-timeline-position: 0% 100%;
  
  animation: fade-in 2s ease-in-out;
}

@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

解説:

  • .box要素は、スクロール開始時に透明で、スクロール完了時に完全に表示されます。
  • アニメーションは fade-in キーフレームで定義されています。

スクロール位置に応じて要素の大きさを変化

<div class="box"></div>
.box {
  width: 100px;
  height: 100px;
  background-color: red;
}

@scroll-timeline {
  name: "my-timeline";
}

.box {
  scroll-timeline: my-timeline;
  scroll-timeline-position: 0% 100%;
  
  animation: grow 2s ease-in-out;
}

@keyframes grow {
  from {
    width: 50px;
    height: 50px;
  }
  to {
    width: 200px;
    height: 200px;
  }
}

解説:

  • .box要素は、スクロール開始時に50px x 50pxで、スクロール完了時に200px x 200pxに拡大されます。
  • アニメーションは grow キーフレームで定義されています。

スクロールに応じて要素の色を変更

<div class="box"></div>
.box {
  width: 100px;
  height: 100px;
}

@scroll-timeline {
  name: "my-timeline";
}

.box {
  scroll-timeline: my-timeline;
  scroll-timeline-position: 0% 100%;
  
  animation: color-change 2s ease-in-out;
}

@keyframes color-change {
  from {
    background-color: red;
  }
  to {
    background-color: blue;
  }
}

解説:

  • .box要素は、スクロール開始時に赤色で、スクロール完了時に青色になります。
  • アニメーションは color-change キーフレームで定義されています。

複数のアニメーションを組み合わせる

<div class="box"></div>
.box {
  width: 100px;
  height: 100px;
  background-color: red;
}

@scroll-timeline {
  name: "my-timeline";
}

.box {
  scroll-timeline: my-timeline;
  scroll-timeline-position: 0% 100%;
  
  animation: fade-in 2s ease-in-out, grow 2s ease-in-out;
}

@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@keyframes grow {
  from {
    width: 50px;
    height: 50px;
  }
  to {
    width: 200px;
    height: 200px;
  }
}

解説:

  • .box要素は、スクロール開始時に透明で50px x 50px、スクロール完了時に完全に表示されて200px x 200pxに拡大されます。
  • fade-ingrow アニメーションが同時に実行されます。

スクロール位置に応じて要素を移動

<div class="box"></div>
.box {
  width: 100px;


CSS スクロールタイムラインの代替方法

そこで、CSS スクロールタイムラインの代替方法として、以下の3つの方法を紹介します。

JavaScriptを使用する

従来の方法として、JavaScriptを使用してスクロール位置を取得し、それに応じてアニメーションを制御する方法があります。

メリット:

  • すべてのブラウザで動作する
  • 高度なアニメーションを実現できる

デメリット:

  • コード量が多くなる
  • スクロールイベントの処理など、複雑な処理が必要

ライブラリを使用する

スクロールアニメーションを簡単に実装できるライブラリが多数公開されています。

メリット:

  • コード量が少なく、簡単に実装できる
  • さまざまなアニメーション効果が用意されている

デメリット:

  • ライブラリの追加読み込みが必要
  • ライブラリに依存するため、自由度が低くなる

CSS変数とアニメーションタイミング関数を使用する

CSS変数と animation-timing-function を使用して、スクロール位置に応じて要素のスタイルを変化させる方法があります。

メリット:

  • コード量が比較的少ない
  • スクロールタイムラインよりも軽量

デメリット:

  • スクロールタイムラインほど機能が豊富ではない
  • 複雑なアニメーションには不向き

CSS スクロールタイムラインは、スクロール連動アニメーションを簡単に実装できる便利な機能ですが、ブラウザのサポート状況によっては代替方法が必要になります。

上記で紹介した3つの方法はそれぞれメリットとデメリットがあるので、目的に合った方法を選択することが重要です。




CSSでセピア色の世界へようこそ!画像や要素をレトロに変身させる魔法の方法

CSSの「Filter Effects」機能の一つである「sepia()」は、画像や要素をモノクロ化し、茶褐色(セピア色)のトーンを適用する関数です。古い写真のようなレトロな雰囲気を演出したい場合などに効果的に使用できます。構文n は、セピア色の強さを表す数値です。0.0の場合は元の画像の色合いが維持され、1.0になると完全にセピア色になります。



Flexbox や CSS Grid で実現!Miscellaneous 書き込みモードの代替方法

writing-modeプロパティには、horizontal-tb、vertical-rl、vertical-lrなど、いくつかの標準的な書き込みモードがあります。さらに、Miscellaneousと呼ばれる特殊な書き込みモードも存在します。


CSSグラデーションでsin関数を活用して円形グラデーションや波形グラデーションを作成する方法

sin関数は以下の構文で記述します。<angle> は角度を指定します。角度は度数法またはラジアン法で指定できます。例:sin関数はアニメーションのタイミング関数として使用できます。例えば、以下のようなコードは、要素を上下に波打たせるアニメーションを作成します。


CSS Miscellaneous: view-timeline-name 詳細解説

view-timeline-name は CSS の Miscellaneous モジュールで定義されるプロパティで、スクロールタイムラインの名前を指定します。スクロールタイムラインは、スクロールによってアニメーションを制御するために使用されます。


まとめ:text-overflow プロパティを使いこなして、見やすく機能的なWebサイトを作ろう!

text-overflow プロパティは、要素内に収まりきらなかったテキストをどのように表示するかを制御します。これは、長いタイトルや文章を扱う際に、見やすくするために役立ちます。値:ellipsis: 省略記号(…)を表示します。これがデフォルト値です。



CSSコンポジティングとブレンド:画像を重ねて表現を豊かに

コンポジティング:レイヤーの重ね合わせコンポジティングは、複数のレイヤーを重ねることで、奥行きや陰影などの効果を生み出す技術です。Photoshopなどの画像編集ソフトでいう「レイヤー」と似ていますが、CSSでは要素をレイヤーとして扱い、それぞれに位置や透明度などの設定を施せます。


CSS Miscellaneous: view-timeline-name 詳細解説

view-timeline-name は CSS の Miscellaneous モジュールで定義されるプロパティで、スクロールタイムラインの名前を指定します。スクロールタイムラインは、スクロールによってアニメーションを制御するために使用されます。


CSS Miscellaneous image.paint で画像をペイントツールのように操る

主な機能:画像の描画方法を指定: fill, stroke, marker など画像のサイズと位置を調整: scale, translate, rotate など画像の一部を切り取る: clip画像をぼかしたり、影をつけたりする: filter


CSS border-block-start-color プロパティを使いこなして、ワンランク上のデザインを目指そう!

border-block-start-color は、要素のブロック方向の開始側の境界線の色を設定するプロパティです。ブロック方向は、縦書きの場合は左から右、横書きの場合は上から下となります。詳細border-block-start-color は以下の要素に適用されます。


CSSの「font-language-override」で多言語環境のテキスト表示を最適化する

font-language-overrideは、フォントで使用される言語システムを指定し、lang属性で指定されたデフォルトの言語を上書きするCSSプロパティです。これは、デフォルトのフォント言語がコンテンツの言語と一致しない場合に、テキストが正しく表示されるようにするために使用できます。