ツール一覧 / AI活用ノート / CSSアニメーションをコピペする前の注意|重さ・スマホ・酔い対策

CSSアニメーションをコピペする前の注意|重さ・スマホ・酔い対策

2026-10-11Web制作読了 約10分

コピペしたCSSアニメーションで「重い」「スマホで横にはみ出す」「動きで酔う人がいる」が起きたときの直し方をまとめました。prefers-reduced-motionをどこに何行足せばいいか、端末での確かめ方、AIへの指示文の例まで載せています。

CSSアニメーションをコピペする前の注意|重さ・スマホ・酔い対策

結論: 貼ったアニメーションは、公開前に3か所を見ればほとんど片づきます。

  • 重い・カクつくなら → 動かすのを transform と opacity だけにする
  • スマホで崩れるなら → はみ出し・ホバー・100vh の3か所を見る
  • 何も困っていなくても → prefers-reduced-motion のブロックを1つ足す(動きで酔う人への配慮)

納品前日のLPに、ネットで拾ったフェードインを貼る。PCでは滑らか。ところがスマホで開くと、画面が横にずるっと動く。

ここ、本当によく起きます。

コピペ素材の紹介記事は多いのに、貼ったあとの話はあまり見かけません。そこで、MDN・web.dev・W3Cの公式資料から点検ポイントを拾ってまとめました。

この記事の目次
  1. 貼ったCSSアニメーションが重い・カクつくのはなぜ?
  2. スマホで横にはみ出す・ホバーが効かないときはどこを直す?
  3. prefers-reduced-motionはどこに何行足せばいい?
  4. 「動きを減らす」設定は自分の端末でどう確かめる?
  5. LPに広告っぽい動きを入れるなら「5秒」と「1秒に3回」に注意
  6. AIにCSSアニメーションを書き直してもらうときの指示文は?
  7. よくある質問
  8. この記事のまとめ

貼ったCSSアニメーションが重い・カクつくのはなぜ?

原因はたいてい「何を動かしているか」。CSSだけで書いてあっても、軽いとは限りません。

動かしたい要素 transform / opacity width / top / box-shadow 軽い 毎回 描き直し

web.devは、動かすものを opacity と transform に絞るよう勧めています。この2つは、ブラウザが「重ね合わせ」の工程だけで処理できるからです。

幅・位置・影を動かすと話が変わります。毎フレーム、配置の計算と描き直しが走ります。

やりたいこと 避けたい書き方 置き換え
横からスライドイン left / margin-left を動かす transform: translateX()
ふわっと拡大 width / height を動かす transform: scale()
フェードイン visibility を切り替えるだけ opacity
影がふわっと濃くなる box-shadow を動かす よく使われる手法として、影付きの疑似要素を重ね、その opacity だけを動かす方法があります

← 表は横にスクロールできます →

transform は周りの要素を押しのけません。なので、表示のずれの指標(CLS)も悪化しにくい。web.devの目標値は0.1未満です。

will-change は「付ければ速くなる」ものではありません。MDNは「既存の性能問題を扱うための最終解決手段」としていて、付けすぎると逆に重くなります。

個人的には、コピペ素材に最初から will-change が書いてあったら、いったん消して様子を見るのが手堅いと思います。

スマホで横にはみ出す・ホバーが効かないときはどこを直す?

スマホの崩れは、ほぼ次の3つのどれかです。

症状 原因 足す数行
画面が横にずれる・横スクロールできる 画面外から入ってくる要素の初期位置がはみ出している 親に overflow-x: clip;
ホバー演出が出ない/タップ後に出っぱなし タッチ端末はホバーが苦手 @media (hover: hover) { … } で囲む
全画面のファーストビューの下が隠れる アドレスバーの分だけ 100vh が大きい height: 100svh; を追記

← 表は横にスクロールできます →

/* 1. スライドインのはみ出し対策(セクション単位で) */
.section { overflow-x: clip; }

/* 2. ホバーはホバーできる端末だけ */
@media (hover: hover) {
  .btn:hover { transform: translateY(-2px); }
}

/* 3. 全画面のファーストビュー */
.hero {
  height: 100vh;  /* 古いブラウザ向け */
  height: 100svh; /* アドレスバーが出ていても収まる */
}

prefers-reduced-motionはどこに何行足せばいい?

拡大縮小する橙の円と、動きを止めた穏やかな円の対比

貼った素材のすぐ下に @media (prefers-reduced-motion: reduce) を1つ足し、animation と transition の両方を止めます。

通常:拡大縮小 動きを減らす 止める animation: none 置き換える 透明度だけ変える

prefers-reduced-motion は、OSの「動きを減らす」設定をCSSから読み取る仕組みです。MDNによると、2020年1月からすべての主要ブラウザで使えます。

内耳が敏感な人は、大きな拡大縮小や視差スクロールで、めまいや吐き気が出ることがあります。そのための設定です。

あなたの状況に合わせて、次の3段階から選んでください。

あなたの状況 使う段階
貼った素材をとりあえず止めたい 段階1
これから新しく組む 段階2
JSやGIFで動かしている 段階3

← 表は横にスクロールできます →

段階1:止める(いちばん少ない追加)

@media (prefers-reduced-motion: reduce) {
  .fade-in,
  .slide-in {
    animation: none;
    transition: none;
    opacity: 1;      /* ← これを忘れると消えたままになる */
    transform: none;
  }
}

ここが一番の落とし穴です。フェードイン素材の多くは、最初が opacity: 0 になっています。

animation: none だけだと、要素が透明なまま表示されません。最後の状態(opacity: 1)も必ずセットで書きます。

段階2:動かないのを基本にする

.slide-in { opacity: 1; }

@media (prefers-reduced-motion: no-preference) {
  .slide-in { animation: slideIn .6s ease-out both; }
}

web.devも紹介している書き方で、「動いてもいいと分かった人にだけ動きを付ける」形です。新しく組むなら、個人的にはこちらを勧めます。止め忘れが起きない作りだからです。

段階3:JSやGIFで動かしている場合

const mq = window.matchMedia('(prefers-reduced-motion: reduce)');
if (!mq.matches) { /* ここでだけアニメーションを開始 */ }
mq.addEventListener('change', () => { /* 設定が変わったら止める・再開する */ });

MDNの例は「止める」ではなく「置き換える」形です。拡大縮小を、透明度だけの変化に差し替えています。上書き用のルールは、元のルールより後ろに書いてください。

ライブラリには、最初から対応しているものもあります。Animate.cssは公式サイトで prefers-reduced-motion 対応済みだと明記しています。

Animate.cssの公式トップページ
Animate.cssの公式トップページ(animate.style・2026-10-11時点の画面)

同じ公式サイトには、ベストプラクティスとして次の3点が載っています。ライブラリを使わない人も、そのまま点検項目にできます。

「動きを減らす」設定は自分の端末でどう確かめる?

ノートPCとスマホで表示を確かめる人と虫眼鏡、切り替えスイッチ

一番手軽なのはChromeの開発者ツール。OSの設定を変えずに、ブラウザの中だけで切り替えられます。

環境 設定の場所
Chrome(開発者ツール) レンダリング タブ →「CSS メディア特性 prefers-reduced-motion をエミュレートする」→ prefers-reduced-motion:reduce
Windows 11 設定 > アクセシビリティ > 視覚効果 > アニメーション効果
Windows 10 設定 > 簡単操作 > ディスプレイ > アニメーションを表示する
macOS Sequoia まで システム設定 > アクセシビリティ > 表示 > 動きの抑制
macOS Tahoe 以降 システム設定 > アクセシビリティ > 動き > 動きの抑制
iPhone 設定 > アクセシビリティ > 動作 > 視差効果を減らす
Android 9以上 設定 > ユーザー補助 > アニメーションの削除
Firefox about:config に数値型の ui.prefersReducedMotion を追加して 1

← 表は横にスクロールできます →

Chrome開発者ツールでCSSメディア機能をエミュレートする方法の公式ページ
Chrome開発者ツールでCSSメディア機能をエミュレートする方法の公式ページ(developer.chrome.com・2026-10-11時点の画面)

地味に便利なのが、同じレンダリングタブの「ペイントの点滅」。描き直しが起きた範囲が光るので、最初の章の「重い動き」もここで見つかります。

LPに広告っぽい動きを入れるなら「5秒」と「1秒に3回」に注意

流れ続ける演出と点滅するボタンは、アクセシビリティの国際基準(WCAG)でいちばん基本のレベルに当たります。

5秒を超えて自動で動く → 止める手段を付ける ×3 1秒に3回を超えて点滅 → 入れない
WCAG 2.2の基準 レベル 中身(やさしく言うと)
2.2.2 一時停止、停止、非表示 A 自動で始まり、5秒を超えて続き、ほかの内容と一緒に出る動きには、止める手段を付ける
2.3.1 3回の閃光、又は閾値以下 A どの1秒間でも、3回を超えて光るものを入れない
2.3.3 インタラクションによるアニメーション AAA 操作で起きる動きを、オフにできるようにする

← 表は横にスクロールできます →

prefers-reduced-motion 対応は、W3Cが2.3.3(いちばん上のAAA)の手段として挙げているものです。「やらないと違反」という種類の話ではありません。

気をつけたいのは、むしろレベルAの2つです。流れ続けるロゴのマーキーや、ピカピカ光るCTAボタンが当たりやすい。広告のノリをLPに持ち込むなら、ここだけは先に見ておくと安心です。

AIにCSSアニメーションを書き直してもらうときの指示文は?

貼る、AIに頼む、確かめる、公開するの4段階を並べた流れ図

3つの条件をまとめて渡すのが早いです。下の文をそのまま使えます。

素材を貼る AIで書き直し 端末で確認 公開
次のCSSアニメーションを書き直してください。
1. 動かすプロパティは transform と opacity だけにする
2. スマホで横にはみ出さないよう、親要素に overflow-x: clip を付ける。
   :hover の演出は @media (hover: hover) で囲む
3. @media (prefers-reduced-motion: reduce) を追加し、animation と transition を止める。
   止めたときは最後の状態(opacity: 1 など)で表示されるようにする
変更した理由を1行ずつ添えてください。

送るときは、この指示文のすぐ下に、書き直したいCSSをそのまま続けて貼ります。

3つ目の「最後の状態で表示」は、書かないとAIも抜かしがちです。出てきたコードは、前の章の表の環境で一度切り替えて確かめてから使ってください。

よくある質問

Q. コピペしたのに、自分の端末だけ動きません。 最初に見るのは2点です。@keyframes の名前と animation-name が一致しているか。HTMLにクラスが付いているか。それでも動かないなら、OSの「動きを減らす」がオンかもしれません。Animate.cssのように、ライブラリ側で止めている場合があります。

Q. 全部のアニメーションを止めないといけませんか? 基本は「止める」より「置き換える」です。MDNの例も、拡大縮小を透明度の変化に差し替えています。優先して抑えたいのは、大きな拡大縮小・画面を横切る移動・視差スクロールの3つです。

Q. コピペ素材やライブラリを、クライアント案件で使ってもいいですか? 配布元ごとにライセンスが違います。たとえばAnimate.cssはHippocratic License(2026-10-11時点のフッター表記はHippocratic-2.1)です。案件に入れる前に、配布元の条文に一度目を通しておくと安心です。

この記事のまとめ

今日やることは1つだけ。 Chromeの開発者ツールで prefers-reduced-motion:reduce に切り替えて、自分のLPを上から下までスクロールしてみてください。消えたままの要素があれば、そこが最初に直す場所です。

この記事は、Webサイトの動く部品集 AETHER Motion の制作チームが書いています。

出典

  1. prefers-reduced-motion - CSSMDN Web Docs / 2026-10-11参照
  2. prefers-reduced-motion: 動きが少ないほうがよい場合もありますweb.dev(Google) / 2026-10-11参照
  3. 高性能な CSS アニメーションを作成する方法web.dev(Google) / 2026-10-11参照
  4. Cumulative Layout Shift(CLS)web.dev(Google) / 2026-10-11参照
  5. will-changeMDN Web Docs / 2026-10-11参照
  6. hover メディア特性MDN Web Docs / 2026-10-11参照
  7. overflowMDN Web Docs / 2026-10-11参照
  8. <length>(ビューポート単位)MDN Web Docs / 2026-10-11参照
  9. CSS メディア機能をエミュレートするChrome for Developers / 2026-10-11参照
  10. Understanding SC 2.3.3: Animation from InteractionsW3C / 2026-10-11参照
  11. Understanding SC 2.2.2: Pause, Stop, HideW3C / 2026-10-11参照
  12. Understanding SC 2.3.1: Three Flashes or Below ThresholdW3C / 2026-10-11参照
  13. iPhoneで画面の動きを減らすApple / 2026-10-11参照
  14. Animate.cssAnimate.css / 2026-10-11参照