CSSアニメーションの作り方【初心者向け】

CSSアニメーションの作り方を初心者向けに解説。transitionとanimation(@keyframes)の違いと使い方をコード例付きで紹介。JSなしで動きをつけよう。中高生向け。無料。

2026年4月16日

CSS アニメーションとは?

「ボタンをふわっと光らせたい」「要素をスライドして表示したい」——そんな動きをJavaScriptなしで実現できるのが CSSアニメーション です。

CSSアニメーションの作り方を覚えると、ページに動きをつけてより魅力的なデザインが作れます。

CSSのアニメーションには主に2種類あります。transition(トランジション)animation(アニメーション)です。

transition:状態が変わるときの動き

transition(トランジション)は、CSSの値が変わるときに「じわっと変化する」効果をつけます。ホバー(マウスを乗せる)と組み合わせてよく使います。

基本の書き方

.btn {
  background-color: #0d9488;
  color: white;
  padding: 12px 24px;
  border-radius: 8px;
  transition: background-color 0.3s ease; /* 変化するプロパティ・時間・イージング */
}

.btn:hover {
  background-color: #0f766e; /* ホバー時に色が変わる */
}

transition の値は プロパティ名 時間 イージング の順で書きます。

イージング 動きの特徴
ease最初ゆっくり→速く→最後ゆっくり(デフォルト)
linear一定速度
ease-in最初ゆっくり→速く
ease-out速く→最後ゆっくり

複数のプロパティをまとめて指定

.card {
  transform: scale(1);
  box-shadow: none;
  transition: all 0.3s ease; /* すべてのプロパティに適用 */
}

.card:hover {
  transform: scale(1.05); /* 少し大きくなる */
  box-shadow: 0 8px 24px rgba(0,0,0,0.15);
}

📖 詳しくはCSSセレクターの使い方で解説しています。

💡 CSSトランジションでtransitionの詳細を学べます。

animation:繰り返す動き

animation@keyframes(キーフレーム) を使うと、ホバーに関係なく自動で繰り返すアニメーションが作れます。

@keyframesの書き方

/* アニメーションの動きを定義する */
@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* 要素にアニメーションを適用する */
.box {
  animation: fadeIn 0.6s ease forwards;
}

from/toの代わりにパーセントで細かく指定することもできます。

@keyframes bounce {
  0%   { transform: translateY(0); }
  50%  { transform: translateY(-20px); }
  100% { transform: translateY(0); }
}

0%がfrom、100%がtoと同じ意味です。途中の動きを細かく制御したいときはパーセント指定を使いましょう。3段階以上の動きを作るときに便利です。

animationプロパティの値

.spinner {
  animation: spin 1s linear infinite; /* 名前 時間 イージング 繰り返し */
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

infinite を指定すると無限に繰り返します。ローディングアイコンなどに使えます。

👉 hoverで動きをつける方法も参考にしてください。

ハンズオン:アニメーションを試してみよう

上のコードをHTMLファイルにコピーしてブラウザで開いてみましょう。ボタンにマウスを乗せると大きくなり、カードはページ読み込み時にふわっと現れます。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>CSSアニメーション練習</title>
    <style>
      /* ホバーで大きくなるボタン */
      .btn {
        padding: 12px 32px;
        background-color: #0d9488;
        color: white;
        border: none;
        border-radius: 8px;
        cursor: pointer;
        transition: transform 0.2s ease, box-shadow 0.2s ease;
      }
      .btn:hover {
        transform: scale(1.08);
        box-shadow: 0 6px 20px rgba(13,148,136,0.4);
      }

      /* フェードインするカード */
      @keyframes fadeUp {
        from { opacity: 0; transform: translateY(30px); }
        to   { opacity: 1; transform: translateY(0); }
      }
      .card {
        background-color: #f0f9ff;
        padding: 24px;
        border-radius: 12px;
        margin-top: 24px;
        animation: fadeUp 0.6s ease forwards;
      }
    </style>
  </head>
  <body>
    <button class="swp-btn swp-btn--primary">ホバーしてみよう</button>
    <div class="card">
      <h2>フェードインしました!</h2>
      <p>ページを読み込むと、このカードがふわっと現れます。</p>
    </div>
  </body>
</html>

🔥 displayプロパティ完全解説で実践してみましょう。

🔗 CSS入門ガイドで基礎から復習できます。

📖 レスポンシブデザインの作り方でアニメーションのスマホ対応を学べます。

animationとtransitionの違い

transitionは「状態が変わったとき(hoverなど)だけ動く」のに対し、animationは「自動で繰り返し動かせる」点が違います。ホバー効果にはtransition、ローディングや注目アニメーションにはanimationを使い分けましょう。

迷ったときの判断基準はシンプルです。「ユーザーの操作がきっかけか?」を考えます。クリックやホバーで動くならtransition。ページ読み込み時や自動で動くならanimationです。

パフォーマンスの注意点

transform と opacity を優先する

アニメーションさせるプロパティは transformopacity を優先しましょう。これらはGPUで処理されるため、なめらかに動きます。widthmargin をアニメーションさせると、再レイアウトが発生してカクつきの原因になります。

will-change の使い方

will-change: transform; を指定すると、ブラウザが事前に最適化を行います。ただし多用するとメモリを消費するので、アニメーションする要素だけに使いましょう。

💡 CSS入門ガイドで基礎を確認できます。

よくある間違い

  • animation-fill-modeの指定忘れ:アニメーション終了後に要素が元の状態に戻ってしまうことがあります。forwardsを指定すると、アニメーション終了時の状態を保持できます。フェードインした要素が一瞬で消えるときは、この指定を確認しましょう。
  • GPUレイヤーの作りすぎ:will-changeやtransformを多くの要素に指定すると、GPUメモリを大量に消費します。スマホでは特に影響が大きいです。アニメーションする要素だけに絞って指定しましょう。
  • Flexboxレイアウト内でのアニメーションFlexboxで並べた要素をアニメーションさせるとき、widthやheightを変化させるとレイアウト全体が再計算されます。transformを使えば、他の要素に影響を与えずにアニメーションできます。

アクセシビリティ配慮

prefers-reduced-motion メディアクエリ

動きが苦手なユーザー(めまいや酔いを感じる人)のために、アニメーションを減らす設定を尊重しましょう。

@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

🔗 Webアクセシビリティで詳しく学べます。

📖 最初のCSSで基礎を固めてからアニメーションに挑戦しましょう。

まとめ

  • transition:状態が変わるときにじわっと変化させる(ホバーと組み合わせる)
  • animation + @keyframes:自動で繰り返すアニメーションを作る
  • easelinearease-out などのイージングで動きの印象が変わる
  • transform: scale() で拡大縮小、translateY() で上下移動できる
  • infinite で無限ループ、forwards でアニメーション終了後の状態を保持

CSSアニメーションを使いこなすと、ページの印象が大きく変わります。レッスンでさらに詳しく学んでみましょう。

✨ @keyframesの動きをリアルタイムで確認しよう!

duration・timing-function・fill-modeをスライダーで変えながら、5種のアニメーションを即座に再生・停止できる無料ツールです。

CSS Animation ビジュアライザー →

🎨 CSSをレッスンで学ぼう!

このサイトのCSSコースでは、アニメーションを含む実践的なデザインをブラウザだけで学べます。無料・登録不要です。

CSSコースを見る →
目次

コースで実際に手を動かして学ぼう

レッスンではコードを書きながら基礎が身につきます

HTMLコースを始める →

この記事に出てくる用語

📣 この記事が役に立ったら

Xでシェア

💬 引用する場合はこちらをご利用ください:

CSSアニメーションの作り方を初心者向けに解説。transitionとanimation(@keyframes)の違いと使い方をコード例付きで紹介。JSなしで動きをつけよう。中高生向け。無料。

出典: https://start-web-programming.com/blog/css-animation/