CSSアニメーション・transition見本集|コピペで動きをつける10パターン

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

サイトに少しだけ動きをつけたいと思ったことはありませんか。

ボタンにカーソルを合わせたときにふわっと色が変わる。

ページを開いたときに文字がすっと浮かび上がる。

こうした動きはCSSだけで作れます。

この記事ではtransitionとanimationの使い分けを整理したうえで、コピペしてすぐ使える見本を10パターン紹介します。

実際に動くプレビューを置いているので、見て選んでそのままコピーしてください。

transitionとanimationの違い

最初にここを押さえておくと、あとの作業がとても楽になります。

ざっくり言うと、transitionは「AからBへ変わるときの動き」を指定するものです。

マウスを乗せた、クリックした、といったきっかけが必要になります。

いっぽうanimationは「動きの流れそのもの」を作るものです。

きっかけがなくても勝手に動き出しますし、繰り返しもできます。

  • hoverで色が変わる、浮き上がる → transition
  • 読み込んだ瞬間にふわっと出る → animation
  • ずっとくるくる回り続ける → animation
  • 途中の細かい動きを指定したい → animation

迷ったら「きっかけがあるかどうか」で判断してみてください。

transitionの基本を10秒で

transitionは4つの値をまとめて書くだけです。

.button {
  background: #4a90d9;
  /* 何を / どれくらいの時間で / どんな速さで / いつから */
  transition: background 0.3s ease 0s;
}
 
.button:hover {
  background: #2a6fb8;
}

大事なのは、transitionは「変化する前」の状態に書くという点です。

hoverのほうに書いてしまうと、マウスを外したときの動きがカクッと消えてしまいます。

イージングで印象が変わる

3つめの値であるイージング(timing-function)は、動きの速度カーブを決めるものです。

同じ0.6秒でも、印象がかなり変わります。

下のエリアにマウスを乗せて(スマホはタップして)見比べてみてください。

この枠にマウスを乗せると動きます

linear
ease
ease-in-out
cubic-bezier

linearは一定の速さで、機械的な印象になります。

easeは最初が速く終わりがゆっくりで、いちばん自然に見えます。

いちばん下のcubic-bezierは、行きすぎてから戻る動きです。

ぽよんとした可愛らしさが出るので、ボタンなどで人気があります。

/* 行きすぎてから戻る、ぽよんとした動き */
transition: transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);

hoverで使えるtransition見本5つ

ここからは実際の見本です。

気に入ったものをコピーして、色やサイズだけ調整すれば使えます。

1. 色がふわっと変わるボタン

.btn-fade {
  display: inline-block;
  padding: 12px 32px;
  border-radius: 6px;
  background: #4a90d9;
  color: #fff;
  text-decoration: none;
  font-weight: bold;
  transition: background 0.3s ease, color 0.3s ease;
}
 
.btn-fade:hover {
  background: #1f4f80;
  color: #ffe9a8;
}

いちばん基本の形です。

複数のプロパティを動かすときは、カンマで区切って並べます。

2. ふわっと浮き上がるカード

ふわっと浮くカード 影も一緒に動かすのがコツ
.card-lift {
  padding: 20px;
  background: #fff;
  border-radius: 10px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}
 
.card-lift:hover {
  transform: translateY(-8px);
  box-shadow: 0 12px 24px rgba(0, 0, 0, 0.15);
}

浮き上がりを自然に見せるコツは、影も同時に大きくすることです。

位置だけ動かすと、平面的で不自然に見えてしまいます。

なお、位置を動かすときはtopやmarginではなくtransformを使ってください。

transformのほうが動作が軽く、カクつきにくくなります。

3. 下線が左から伸びるリンク

.link-underline {
  position: relative;
  display: inline-block;
  text-decoration: none;
  padding-bottom: 4px;
}
 
.link-underline::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 2px;
  background: #e5735a;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.3s ease;
}
 
.link-underline:hover::after {
  transform: scaleX(1);
}

widthを0から100%に変えても同じ見た目になります。

ただしscaleXのほうが動きがなめらかです。

transform-originを right にすれば、右から伸びる下線になります。

4. 画像がゆっくりズームする

画像の代わりの背景です
/* 親ではみ出しを隠すのがポイント */
.zoom-frame {
  overflow: hidden;
  border-radius: 10px;
}
 
.zoom-frame img {
  display: block;
  width: 100%;
  transition: transform 0.6s ease;
}
 
.zoom-frame:hover img {
  transform: scale(1.15);
}
<div class="zoom-frame">
 <img src="画像のURL" alt="サンプル画像">
</div>

ここでいちばん大事なのが、親要素のoverflow: hiddenです。

これがないと、拡大した画像が枠からはみ出してしまいます。

アイキャッチ付きの記事一覧に入れると、ぐっと今どきの見た目になります。

カード型の一覧デザインはCSSカードデザイン見本集でもまとめています。

5. 矢印がスッと右に動く

.btn-arrow {
  display: inline-block;
  padding: 12px 28px;
  border-radius: 999px;
  background: #333;
  color: #fff;
  text-decoration: none;
  transition: background 0.3s ease;
}
 
.btn-arrow:hover {
  background: #e5735a;
}
 
.btn-arrow .arrow {
  display: inline-block;
  margin-left: 8px;
  transition: transform 0.3s ease;
}
 
.btn-arrow:hover .arrow {
  transform: translateX(6px);
}
<a href="#" class="btn-arrow">
 続きを読む
 <span class="arrow">→</span>
</a>

親にhoverしたときに、中の要素を動かすパターンです。

「進む感じ」が伝わるので、記事一覧のリンクと相性がいいです。

ボタンそのもののデザインはCSSボタンデザイン見本集にまとめています。

@keyframesで動かすアニメーション見本5つ

ここからはanimationの出番です。

まず@keyframesで動きの流れを作り、それを要素に割り当てます。

なお下のプレビューは、動きが分かるように繰り返し再生しています。

コード側は1回だけ再生する形になっているので、そのままコピーして大丈夫です。

6. ふわっと表示されるフェードイン

ふわっと表示されます
@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}
 
.fade-in {
  animation: fadeIn 0.8s ease forwards;
}

最後のforwardsは「終わった状態のまま止まる」という意味です。

これを書き忘れると、動きが終わった瞬間に元に戻って消えてしまいます。

フェードインでいちばん多いつまずきポイントです。

7. 下からすっと出るスライドイン

下からすっと出てきます
@keyframes slideUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
 
.slide-up {
  animation: slideUp 0.6s ease forwards;
}

フェードインに動きを足しただけですが、印象がぐっと良くなります。

見出しや画像に使うと、ページ全体が丁寧に見えます。

複数の要素に順番に出したいときは、delayをずらします。

/* 0.15秒ずつ遅らせて、順番に出す */
.slide-up:nth-child(1) { animation-delay: 0s; }
.slide-up:nth-child(2) { animation-delay: 0.15s; }
.slide-up:nth-child(3) { animation-delay: 0.3s; }

8. ゆらゆら揺れるアイコン

🔔
@keyframes wiggle {
  0%, 100% { transform: rotate(-8deg); }
  50%      { transform: rotate(8deg); }
}
 
.wiggle {
  display: inline-block;
  /* 揺れの支点を下寄りにする */
  transform-origin: 50% 90%;
  animation: wiggle 1.2s ease-in-out infinite;
}

transform-originで回転の支点を変えているのがポイントです。

初期値の中央のままだと、その場でくるくるするだけになります。

支点を下にすると、ベルが揺れているような動きになります。

ずっと揺れていると気が散るので、注目させたい1か所だけに使ってください。

9. くるくる回るローディング

@keyframes spin {
  to { transform: rotate(360deg); }
}
 
.spinner {
  display: inline-block;
  width: 40px;
  height: 40px;
  border: 4px solid #e0e6ec;
  /* 上だけ色を変えて、回転が見えるようにする */
  border-top-color: #4a90d9;
  border-radius: 50%;
  animation: spin 0.9s linear infinite;
}

画像を使わずに、枠線だけで作れるローディングです。

4辺のうち上だけ色を変えることで、回っているのが分かります。

回転はlinearで一定にするほうが自然に見えます。

10. ぽよんと弾むバウンス

ここをタップ
@keyframes bounce {
  0%, 100% { transform: translateY(0); }
  40%      { transform: translateY(-14px); }
  60%      { transform: translateY(-6px); }
}
 
.bounce {
  display: inline-block;
  animation: bounce 1.4s ease-in-out infinite;
}

60%のところで少しだけ跳ね返しを入れているのがコツです。

上がって下がるだけだと、ボールが弾む感じが出ません。

申し込みボタンなど、押してほしい場所に効きます。

スクロールしたら動かしたいとき

「画面に入ってきたタイミングでふわっと出したい」という要望はとても多いです。

これまではJavaScriptが必要でしたが、CSSだけで書ける方法が登場しました。

@keyframes scrollFadeIn {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
 
.scroll-fade {
  animation: scrollFadeIn linear both;
  /* 自分が画面に入ってくる動きに合わせて再生する */
  animation-timeline: view();
  /* 下から20%入った時点で始まり、40%手前で終わる */
  animation-range: entry 20% cover 40%;
}
 
/* 未対応ブラウザでは何も起きずに普通に表示される */
@supports not (animation-timeline: view()) {
  .scroll-fade { animation: none; }
}

ただしanimation-timelineは対応ブラウザがまだ限られます

Chromeやモダンなブラウザでは動きますが、環境によっては何も起きません。

そのため、動かなくても困らない場面だけで使うのが安全です。

上のコードのように@supportsで囲っておけば、未対応でも普通に表示されるので崩れません。

お問い合わせボタンなど、必ず見せたい要素には使わないでください。

動きが苦手な人への配慮も忘れずに

画面の動きで気分が悪くなる方がいます。

そういった方は、OS側で「視差効果を減らす」という設定をオンにしています。

CSSではその設定を読み取れるので、次の3行を書いておくだけで配慮できます。

/* 動きを減らす設定の人には、アニメーションを止める */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

追加CSSの最後にそのまま貼っておけば大丈夫です。

ほとんどの人には何の影響もありません。

それでいて、必要な人にはきちんと届く。

コストがほぼゼロなので、入れておいて損はないです。

動かないときのチェックポイント

コピペしたのに動かない。

そんなときは、だいたい次のどれかです。

transitionを:hoverのほうに書いている

transitionは変化する前の状態に書きます。

:hoverに書くと、マウスを外したときの動きがなくなります。

display: none を動かそうとしている

displayはtransitionが効かないプロパティです。

消したり出したりしたいときは、opacityとvisibilityを組み合わせます。

.panel {
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s ease, visibility 0.3s ease;
}
 
.panel.is-open {
  opacity: 1;
  visibility: visible;
}

インライン要素にtransformを使っている

spanなどのインライン要素には、transformが効きません。

display: inline-block を足せば動くようになります。

既存WordPressテーマのスタイルが優先されている

既存WordPressテーマ(当サイト使用のSANGO)のボタンやリンクには、もともとtransitionが設定されています。

そのため、自分で書いた指定が上書きされないことがあります。

その場合は独自のクラス名を付けて、そのクラスに対して指定してください。

それでも効かないときは !important を付けます。

ただし他のテーマでは不要なケースが多いので、まずはクラス名を分ける方法から試してみてください。

CSSをWordPressに追加する方法

この記事のCSSは、外観→カスタマイズ→追加CSSに貼り付ければすぐ使えます。

ただし量が増えてきたら、別の管理方法のほうが楽になります。

追加CSS、子テーマ、ブロックスタイルなどの違いはWordPressにCSSを追加する方法でまとめています。

どこに書けばいいか迷ったら、先にそちらを読んでみてください。

まとめ

最後にもう一度だけ整理します。

  • きっかけがある動きはtransition、自動で動くならanimation
  • transitionは変化する前の状態に書く
  • 位置やサイズはtransformで動かすと軽い
  • フェードインにはforwardsを忘れずに
  • prefers-reduced-motionへの配慮も入れておく

動きは足しすぎると読みにくくなります。

1ページに1つか2つ、見せたい場所だけに使うくらいがちょうどいいです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA



reCaptcha の認証期間が終了しました。ページを再読み込みしてください。