カテゴリ: CSS 更新日: 2026/03/24

スクロール連動アニメーションの基本!初心者でもわかるCSSとJSの実装ガイド

スクロール連動アニメーションの基本的な考え方(JS補足あり)
スクロール連動アニメーションの基本的な考え方(JS補足あり)

先生と生徒の会話形式で理解しよう

生徒

「画面を下にスクロールしたときに、ふわっと画像が出てくるサイトってどうやって作るんですか?」

先生

「それはスクロール連動アニメーションという技術です。画面の中に特定の要素が入ってきたことを検知して動かしているんですよ。」

生徒

「難しそうですが、初心者の私でもできますか?」

先生

「基本的な考え方は、旗振り当番のようなものです。準備の仕方からゆっくり解説しますね!」

1. スクロール連動アニメーションとはどのようなものか

1. スクロール連動アニメーションとはどのようなものか
1. スクロール連動アニメーションとはどのようなものか

スクロール連動アニメーションとは、ウェブサイトを閲覧している人が画面を上下に動かしたときに、その動きに合わせて画像や文章がアニメーションを開始する仕組みのことです。通常のアニメーションはページを開いた瞬間に始まってしまいますが、これを使うと「その場所までたどり着いたとき」にだけ動きを見せることができます。

例えば、長い縦長のページを読んでいるときに、ずっと下のほうにある画像が、ページを開いた瞬間に勝手に動き終わっていたら勿体ないですよね。読んでいる人の視線がその場所に届いた瞬間に動かすことで、飽きさせない演出が可能になります。これを専門用語でスクロールトリガーと呼ぶこともあります。トリガーとは「引き金」という意味で、スクロールが動きのきっかけになることを指します。

最近のオシャレな企業サイトや採用サイトでは、この技術が必ずと言っていいほど使われています。プログラミング未経験の方でも、仕組みさえ理解してしまえば、それほど高い壁ではありません。まずは、動きのきっかけをどうやって作るのかという土台から学んでいきましょう。

2. 画面内に入ったことを判断する監視員の役割

2. 画面内に入ったことを判断する監視員の役割
2. 画面内に入ったことを判断する監視員の役割

スクロール連動アニメーションを実現するためには、画面の中に特定の要素が入ってきたかどうかをずっと見張っている「監視員」が必要です。この監視員の役割を果たすのが、JavaScriptというプログラミング言語の「インターセクションオブザーバー」という機能です。少し名前は長いですが、日本語で言えば「交差監視」という意味になります。

イメージとしては、校門の前に立っている先生のようなものです。生徒(画像や文字)が校門(画面の表示エリア)を通過した瞬間に、「はい、今通ったから動き始めていいよ!」と合図を送ります。この合図があって初めて、アニメーションが実行される仕組みになっています。

この監視員は非常に優秀で、パソコンの動作を重くすることなく、静かに見守ってくれます。昔のプログラミング手法では、スクロールするたびに計算を行っていたためパソコンが大変でしたが、今の技術を使えば初心者でもスマートに、かつ軽い動作でアニメーションを実装できるのです。

3. 動きをつける準備としてクラスという名札を使う

3. 動きをつける準備としてクラスという名札を使う
3. 動きをつける準備としてクラスという名札を使う

アニメーションを動かす具体的な手順として、まずは要素に「名札」をつける作業をします。これを「クラス名」と呼びます。例えば、まだ動いていない状態の要素には「まだ動かないで」という印をつけておき、画面に入ってきた瞬間に「動いていいよ」という新しい名札に貼り替えます。

具体的には、CSSというデザインを指定する言葉を使って、「active(アクティブ)」という名前のクラスがついたときだけアニメーションが実行されるように設定しておきます。JavaScriptという監視員は、画面内に入った要素を見つけたら、その要素に「active」という名札をペタッと貼るだけの仕事をします。

名札が貼られた瞬間に、あらかじめ用意しておいたCSSのアニメーションが発動します。このように、JavaScriptで「きっかけ」を作り、CSSで「実際の動き」を担当するという分業体制を整えるのが、最も一般的で簡単な作り方です。


<style>
	.scroll-target {
	    opacity: 0;
	    transform: translateY(30px);
	    transition: opacity 1s, transform 1s;
	    padding: 20px;
	    background-color: #f8f9fa;
	    border: 1px solid #dee2e6;
	    margin: 50px 0;
	}

	/* 名札が貼られたときの状態 */
	.scroll-target.active {
	    opacity: 1;
	    transform: translateY(0);
	}
</style>

<div class="scroll-target active">
	<p>この要素は、activeという名札がつくとふわっと浮き上がります。</p>
</div>
ブラウザ表示

4. 監視員を動かすJavaScriptの書き方

4. 監視員を動かすJavaScriptの書き方
4. 監視員を動かすJavaScriptの書き方

さて、ここからは少しだけプログラミングらしい記述が出てきます。監視員であるインターセクションオブザーバーを呼び出すコードです。といっても、最初は意味を完璧に理解する必要はありません。おまじないのようなものだと思ってください。このコードは「対象のものが画面に少しでも見えたら、activeというクラスを足してね」という指示を出しています。

この仕組みを使うことで、一つ一つの画像に対して個別に指示を出さなくても、同じクラス名をつけておくだけで、監視員が次々と順番に見つけて処理してくれます。プログラミングの便利なところは、一度ルールを決めてしまえば、あとはコンピューターが自動で働いてくれる点にあります。

下記のコードでは、画面の下から現れた瞬間に反応するように設定しています。これを少し改造するだけで、画面の真ん中まで来たら反応させるといった細かい調整もできるようになります。まずは基本の形をコピーして動かしてみることが、最初の一歩になります。


<style>
	.box {
	    width: 100%;
	    height: 100px;
	    background-color: #0d6efd;
	    color: white;
	    display: flex;
	    align-items: center;
	    justify-content: center;
	    opacity: 0;
	    transform: scale(0.8);
	    transition: all 0.8s ease-out;
	    margin-bottom: 20px;
	}

	.box.show {
	    opacity: 1;
	    transform: scale(1);
	}
</style>

<div class="box js-scroll">スクロールで見えてくると大きくなります</div>
<div class="box js-scroll">次々に反応します</div>

<script>
	const targets = document.querySelectorAll(".js-scroll");
	const observer = new IntersectionObserver((entries) => {
	    entries.forEach(entry => {
	        if (entry.isIntersecting) {
	            entry.target.classList.add("show");
	        }
	    });
	});

	targets.forEach(target => {
	    observer.observe(target);
	});
</script>
ブラウザ表示

5. 横からスライドしてくるアニメーションの実装

5. 横からスライドしてくるアニメーションの実装
5. 横からスライドしてくるアニメーションの実装

次は応用編として、要素が横からシュッとスライドしてくる動きを作ってみましょう。これも基本は同じです。最初の状態で、画面の外(左側や右側)にわざと追い出しておき、監視員が合図を出した瞬間に元の位置に戻るように指定します。これだけで、非常に動きのあるダイナミックなサイトになります。

「transform(トランスフォーム)」という命令の中で「translateX(トランスレート・エックス)」という言葉を使うと、横方向の移動距離を決めることができます。マイナスの数字を入れれば左側に、プラスの数字を入れれば右側に移動します。最初は見えないように隠しておき、表示された瞬間にその数字を0に戻してあげれば、まるでどこからか飛んできたような演出になります。

このとき、「transition(トランジション)」という命令で、何秒かけて移動するかを指定するのを忘れないようにしましょう。これがないと、アニメーションにならずに一瞬で移動してしまいます。1秒くらいかけてゆっくり動かすのが、もっとも美しく見える目安です。


<style>
	.slide-left {
	    opacity: 0;
	    transform: translateX(-100px);
	    transition: all 1s;
	}

	.slide-left.active {
	    opacity: 1;
	    transform: translateX(0);
	}
</style>

<div class="slide-left active">
	<img src="/img/sample150-100.jpg" alt="サンプル画像" class="img-thumbnail">
	<p>左から右へ滑り込むような動きです。</p>
</div>
ブラウザ表示

6. 複数要素を順番に時間差で表示させるコツ

6. 複数要素を順番に時間差で表示させるコツ
6. 複数要素を順番に時間差で表示させるコツ

三つの画像が並んでいるときに、バラバラと一斉に動くのではなく、左から右へ「トントントン」とリズム良く現れる演出はとても心地よいものです。これを実現するには、CSSの「transition-delay(トランジション・ディレイ)」という機能を使います。これは「命令が出てから実際に動き出すまでの待ち時間」を決めるものです。

一つ目の画像は待ち時間なし、二つ目は0.2秒待つ、三つ目は0.4秒待つ、というふうに少しずつズラして設定します。監視員からの合図(activeクラスの付与)は同時であっても、それぞれの画像が自分の番を待ってから動き出すため、流れるような連鎖反応が生まれます。

このテクニックをマスターすると、サイト全体のクオリティが一気にプロレベルに引き上がります。ユーザーの視線も自然と動きに沿って誘導されるため、重要な情報を順番に見せたいときに非常に強力な武器となります。数字を少し変えるだけで雰囲気が変わるので、いろいろ試してみるのが楽しい工程です。


<style>
	.stagger-item {
	    opacity: 0;
	    transform: translateY(20px);
	    transition: all 0.5s;
	    display: inline-block;
	    margin: 10px;
	}

	.stagger-item.active {
	    opacity: 1;
	    transform: translateY(0);
	}

	/* 待ち時間を個別に変える */
	.item1 { transition-delay: 0.2s; }
	.item2 { transition-delay: 0.4s; }
	.item3 { transition-delay: 0.6s; }
</style>

<div class="text-center">
	<div class="stagger-item item1 active">カード1</div>
	<div class="stagger-item item2 active">カード2</div>
	<div class="stagger-item item3 active">カード3</div>
</div>
ブラウザ表示

7. 一度だけ動かすのか何度も動かすのかの設定

7. 一度だけ動かすのか何度も動かすのかの設定
7. 一度だけ動かすのか何度も動かすのかの設定

スクロールアニメーションを実装する際に悩むのが、「一度下にスクロールして表示されたあと、また上に戻って再度スクロールしたときに、もう一度動かすべきか?」という点です。これはサイトの目的によって使い分けます。

もし一度だけ動かせば十分という場合は、監視員が合図を出したあとに監視を辞めるようにコードを書きます。逆に、何度でも動かしたい場合は、画面から消えたときに一度「名札(クラス)」を剥がすような命令を加えます。そうすることで、再度画面に入ってきたときにまた新しく名札が貼られ、アニメーションが再始動します。

初心者のうちは、まずは「一度だけ動く」設定から始めるのが簡単でおすすめです。あまり何度も画面がチカチカ動くと、読んでいる人が疲れてしまうこともあるからです。シンプルイズベストの精神で、まずは確実に動くものを作ってみましょう。

8. 背景色がスクロールで変わる演出の考え方

8. 背景色がスクロールで変わる演出の考え方
8. 背景色がスクロールで変わる演出の考え方

画像や文字だけでなく、背景の色がスクロールに応じて変化するサイトも素敵ですよね。これも基本の考え方は同じです。特定のセクション(区切り)が画面内に入ってきたら、ページ全体の背景色を塗り替える命令を出します。

背景色が変わることで、サイトのテーマが切り替わったことを視覚的に伝えることができます。例えば、最初は明るい白系の背景で清潔感を出し、実績紹介のセクションに来たら重厚感のある黒系の背景に変えるといった演出です。これもJavaScriptの監視員が、「今、実績のセクションに到着しました!」と知らせてくれるおかげで実現できるのです。

色を変えるときは、一瞬でパチッと変えるのではなく、「transition」を使って1秒から2秒くらいかけてじわっと変えるのがコツです。そうすることで、目に優しく高級感のある色の変化を楽しむことができます。

9. 実装する際の注意点とスマホでの動作確認

9. 実装する際の注意点とスマホでの動作確認
9. 実装する際の注意点とスマホでの動作確認

最後に、スクロールアニメーションを自作するときの注意点をお伝えします。一番大切なのは「やりすぎないこと」です。すべての文字にアニメーションをつけてしまうと、スクロールするたびに画面中が動き回り、肝心の文章が読みづらくなってしまいます。アクセントとして、大事なところに絞って使うのがプロの技です。

また、パソコンでは綺麗に動いていても、スマートフォンで見ると動きがカクカクしたり、意図しない場所で動き出したりすることがあります。指でスクロールするスマホは、マウスで操作するパソコンよりも動きが速くなりがちです。そのため、スマホでも実際に触ってみて、心地よいタイミングで動いているかを確認することが非常に重要です。

プログラミング未経験の方は、まず自分の手元のスマホで自分の作ったサイトが動く感動を味わってみてください。それが一番の上達への近道になります。もし動かなくても、英単語のスペルを一文字間違えているだけ、ということがほとんどです。焦らずゆっくり見直してみましょう。

2026年最新 スキルアップ・実践セミナー

【60分集中】Flexboxを完全攻略!最新CSS3で「崩れない・迷わない」モダンUI構築セミナー

「魅せる力」をコードで実現。CSS3でモダンWebデザインのプロトタイピングを。

本講座では、単に色を変えるだけではなく、「ユーザーを迷わせないUIデザイン」「崩れないレイアウト設計」の本質を学びます。最新のCSS3とモダンなレイアウト手法を通じて、プロの現場で通用する「美しさと機能性を両立した実装力」を最短距離で習得します。

具体的なワークショップ内容と環境

【つくるもの】
HTMLで作成した骨組みに対し、商用サイトでも採用される「スタイリッシュなカード型UI」や「レスポンシブなナビゲーション」を構築します。色の選定基準や余白(ホワイトスペース)の黄金比など、デザインの理論をコードに落とし込む工程を体験してください。

【開発環境】
フロントエンド開発の標準であるVisual Studio Code (VS Code)を継続使用。CSSの記述を効率化するプラグインや、ブラウザのデベロッパーツール(検証機能)を駆使して、リアルタイムでデザインを微調整するプロのワークフローを再現します。

この60分で得られる3つの技術資産

1. 現代のデファクトスタンダード「Flexbox」

要素の横並びや中央揃えを自由自在に操り、どんなデバイスでも崩れないレスポンシブな配置術を完全理解します。

2. メンテナンス性を高めるCSS設計の基礎

後から修正しやすい「壊れにくいコード」の書き方を伝授。プロの現場で必須となる命名規則の考え方を学びます。

3. パフォーマンスと美しさの両立

画像の最適化や軽量な装飾技法など、ページの表示速度を落とさずに高級感のある演出を行うテクニックを習得します。

※本講座は、HTMLの基礎を終えた後のステップアップ講座です。Webデザイナー、UIデザイナー、フロントエンドエンジニアへの道を切り開く「魅せる技術」を、モクモク独自のパーソナル指導で着実に定着させます。

【60分集中】Flexboxを完全攻略!最新CSS3で「崩れない・迷わない」モダンUI構築セミナー

リラックスしながら、学ぶことが大切です。しっかりと基礎を理解しましょう!

各回少人数・マンツーマン形式で徹底サポート

このセミナーの詳細・お申し込みはこちら
カテゴリの一覧へ
新着記事
New1
CSS
スクロール連動アニメーションの基本!初心者でもわかるCSSとJSの実装ガイド
New2
HTML
HTMLのformタグの書き方を完全ガイド!actionとmethod属性の意味を初心者向けにやさしく解説
New3
CSS
CSSで外部ライブラリ使用時のマージン・パディングをリセットする方法を初心者向けに解説
New4
CSS
CSSで要素を消す方法を完全ガイド!display:noneとvisibility:hiddenの違い
人気記事
No.1
Java&Spring記事人気No1
Bootstrap
Bootstrap 5ボタン入門:.btn・.btn-primaryの種類とサイズ・形を初心者向けに完全解説
No.2
Java&Spring記事人気No2
Bootstrap
Bootstrap Iconsのライセンスと商用利用の注意点【著作権と表記を初心者向けに解説】
No.3
Java&Spring記事人気No3
CSS
CSSでGoogle Fontsを使う方法を完全ガイド!初心者でもできるフォントの変更
No.4
Java&Spring記事人気No4
CSS
CSSでテキストの折り返しを完全解説!初心者でもわかる基本と注意点
No.5
Java&Spring記事人気No5
CSS
CSSのレイアウト基本パターンを完全ガイド!初心者でもわかる2カラム・3カラムの作り方
No.6
Java&Spring記事人気No6
CSS
CSSで要素のサイズを自動調整!autoとfit-contentの使い方
No.7
Java&Spring記事人気No7
CSS
CSSの文字色と背景色をやさしく解説!初心者でもわかる基本の設定方法
No.8
Java&Spring記事人気No8
CSS
CSSグリッドレイアウト完全入門!display: grid の基本と使い方を初心者向けにやさしく解説