トランジション(変化の滑らかさ)

transitiontransition-durationtransition-timing-functiontransition-delay

CSSトランジションは、プロパティの値が変化するときに滑らかなアニメーションを加えます。ホバーやフォーカスなどの状態変化を自然に見せるための基本テクニックです。

デモ:タイミング関数の比較(ホバーしてみてください)

ease
デフォルト
linear
一定速度
ease-in
ゆっくり始まる
ease-out
ゆっくり終わる
ease-in-out
両端がゆっくり
cubic-bezier
バネ効果

デモ:transition-delay(ホバーすると色変化が遅延)

ホバーすると移動はすぐ、背景色の変化は 0.4秒 遅れて起きます

delay: 0.4s

デモ:複数プロパティのトランジション

ホバー!

background・transform・border-radius・box-shadow をそれぞれ異なるタイミングでトランジション

コード例

/* 基本的なトランジション */
.button {
  background: #6366f1;
  transition: background 0.3s ease;
}
.button:hover {
  background: #ec4899;
}

/* shorthand: property duration timing-function delay */
.card {
  transition: transform 0.3s ease-out 0s;
}

/* 複数プロパティを個別に指定 */
.element {
  transition:
    background 0.4s ease,
    transform  0.3s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.4s ease;
}

/* すべてのプロパティに適用(パフォーマンス注意) */
.all-props {
  transition: all 0.3s ease;
}

/* タイミング関数の種類 */
.ease         { transition-timing-function: ease; }
.linear       { transition-timing-function: linear; }
.ease-in      { transition-timing-function: ease-in; }
.ease-out     { transition-timing-function: ease-out; }
.ease-in-out  { transition-timing-function: ease-in-out; }
.spring       { transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1); }

/* 遅延 */
.delayed {
  transition: background 0.3s ease 0.5s; /* 0.5秒後に開始 */
}

比較:タイミング関数

動き用途
ease始めと終わりが緩やか(デフォルト)汎用的なホバーエフェクト
linear一定速度ローディングバー、連続アニメーション
ease-inゆっくり始まり速くなる要素が画面外に消える時
ease-out速く始まりゆっくり終わる要素が出現する時(最も自然)
ease-in-out両端がゆっくりスライドイン/アウト、モーダル
cubic-bezier()完全カスタム制御バネ効果、オーバーシュート
steps(n)ステップ刻みで変化スプライトアニメーション

NEW@starting-style と transition-behavior: allow-discrete(2023)

従来のCSSトランジションは display: none から display: block への変化をアニメーションできませんでした。@starting-style を使うと、要素が最初に表示された瞬間(DOMに追加された時、または display: none から変化した時)のトランジション開始状態を定義できます。

/* display: none → block のトランジション (Chrome 117+, Firefox 129+) */
.dialog {
  display: none;
  opacity: 0;
  transform: translateY(-20px);
  transition: opacity 0.3s ease, transform 0.3s ease,
              display 0.3s allow-discrete; /* allow-discrete が必要! */
}

.dialog.open {
  display: block;
  opacity: 1;
  transform: translateY(0);
}

/* display: none のときの「トランジション前」の状態を定義 */
@starting-style {
  .dialog.open {
    opacity: 0;
    transform: translateY(-20px);
  }
}

/* transition-behavior の設定 */
.element {
  transition: all 0.3s ease;
  transition-behavior: allow-discrete; /* display, overlay など離散値のアニメーションを許可 */
}

Chrome 117+, Firefox 129+, Safari 17.4+ でサポート。Popover API や dialog 要素と組み合わせると強力です。

🤖 AIプロンプトテンプレート

CSSのtransitionプロパティを使ったスムーズなアニメーション実装例をReact + Tailwind CSSで作成してください。

要件:
- ease / linear / ease-in / ease-out / ease-in-out / cubic-bezier のタイミング関数をホバーで比較するデモ
- transition-delayを使って複数プロパティが時間差で変化するアニメーションデモ
- 複数プロパティ(background / transform / border-radius / box-shadow)を異なるタイミングでトランジションするカードUI
- ホバー時にcubic-bezierでバネ効果(オーバーシュート)を演出するボタン
- @starting-styleと transition-behavior: allow-discreteを使ったdisplay: noneからのフェードインデモ
- Tailwind CSSのtransitionユーティリティ(transition / duration / ease)を活用したコンポーネント

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。