CSS transitionとは?基本と使い方を解説

CSSでアニメーションを実装する方法のひとつに、transitionがあります。
transitionを使うと、要素の色や大きさ、位置などを滑らかに変化させることができ、ボタンのホバー時やメニューの表示など、さまざまな場面で活用されています。
この記事では、CSS transitionの基本から使い方、よく使うプロパティ、実践例までをわかりやすく解説します。
Contents
CSS transitionとは
CSS transitionとは、CSSプロパティの変化を一定時間かけて滑らかに変化させる機能です。
例えば、マウスを乗せた瞬間にボタンの色が切り替わるのではなく、0.3秒かけて徐々に変化させることができます。
transitionを使うことで、サイトに自然な動きを加えられます。
transitionを使わない場合
button {
background-color: #3498db;
}
button:hover {
background-color: #e74c3c;
}ホバーした瞬間に色が切り替わります。
transitionを使った場合
button {
background-color: #3498db;
transition: background-color 0.3s;
}
button:hover {
background-color: #e74c3c;
}0.3秒かけて滑らかに色が変化します。
transitionの基本構文
transitionの基本構文は以下の通りです。
transition: プロパティ 時間;例です。
.box {
transition: background-color 0.5s;
}この場合、background-colorの変化が0.5秒かけて行われます。
transitionを構成する4つのプロパティ
transitionは以下の4つの要素で構成されています。
- transition-property
- transition-duration
- transition-timing-function
- transition-delay
まとめて記述することもできます。
transition: background-color 0.3s ease 0s;transition-property
変化させるプロパティを指定します。
.box {
transition-property: background-color;
}複数指定することも可能です。
.box {
transition-property: background-color, width;
}すべての変化を対象にする場合はallを指定します。
.box {
transition-property: all;
}ただし、不要なプロパティまでアニメーション対象になるため、必要なものだけ指定する方が管理しやすくなります。
transition-duration
変化にかかる時間を指定します。
.box {
transition-duration: 0.5s;
}1秒なら以下のように記述します。
.box {
transition-duration: 1s;
}単位は秒を表す秒(s)またはミリ秒を表すmsです。
transition-timing-function
変化の速度を指定します。
linear
一定速度で変化します。
.box {
transition-timing-function: linear;
}ease
最初と最後がゆっくりになり、途中が速くなります。
.box {
transition-timing-function: ease;
}ease-in
ゆっくり始まります。
.box {
transition-timing-function: ease-in;
}ease-out
最後に向かってゆっくりになります。
.box {
transition-timing-function: ease-out;
}ease-in-out
最初と最後がゆっくりになります。
.box {
transition-timing-function: ease-in-out;
}transition-delay
アニメーション開始までの待ち時間を指定します。
.box {
transition-delay: 0.5s;
}0.5秒後に変化が始まります。
まとめて記述する方法
一般的には、省略形でまとめて記述します。
.box {
transition: background-color 0.3s ease;
}複数のプロパティを指定することも可能です。
.box {
transition: background-color 0.3s ease,
transform 0.3s ease;
}よく使うtransitionの実例
ボタンの色を変える
<button class="button">送信</button>.button {
background-color: #3498db;
color: #fff;
padding: 12px 24px;
border: none;
transition: background-color 0.3s;
}
.button:hover {
background-color: #2980b9;
}拡大するボタンを作る
<button class="button">送信</button>.button {
padding: 12px 24px;
transition: transform 0.3s;
}
.button:hover {
transform: scale(1.1);
}transformについて詳しく知りたい場合は、「CSS transformとは?translate・scale・rotateの使い方を解説」も参考になります。
画像を少し拡大する
<div class="image">
<img src="image.jpg" alt="">
</div>.image {
overflow: hidden;
}
.image img {
width: 100%;
transition: transform 0.3s;
}
.image img:hover {
transform: scale(1.05);
}スムーズに透明度を変える
<div class="box"></div>.box {
width: 200px;
height: 200px;
background-color: #3498db;
opacity: 1;
transition: opacity 0.3s;
}
.box:hover {
opacity: 0.5;
}transitionでアニメーションできる主なプロパティ
よく利用されるものは次の通りです。
- color
- background-color
- opacity
- width
- height
- margin
- padding
- border-radius
- transform
一方で、displayのようにアニメーションできないプロパティもあります。
display: none;
display: block;この切り替えはtransitionでは滑らかに変化しません。
transitionとanimationの違い
| 項目 | transition | animation |
|---|---|---|
| 発動条件 | 状態の変化 | 自動再生可能 |
| 繰り返し | 基本的にしない | 可能 |
| 複雑な動き | 不向き | 得意 |
| 記述量 | 少ない | 多い |
ボタンのホバーやメニュー表示などの簡単な動きにはtransitionが向いています。
複雑なアニメーションを作りたい場合は、「CSSアニメーションの基本と使い方を解説」が参考になります。
transitionを使う際の注意点
allの多用は避ける
transition: all 0.3s;便利ですが、意図しないプロパティまでアニメーション対象になることがあります。
必要なプロパティのみ指定する方が保守しやすくなります。
durationがないと動かない
以下はアニメーションが発生しません。
.box {
transition: background-color;
}時間を指定する必要があります。
.box {
transition: background-color 0.3s;
}displayには使えない
要素の表示・非表示には、opacityやheightを組み合わせる方法がよく利用されます。
まとめ
CSS transitionは、プロパティの変化を滑らかにするための機能です。
基本的な構成は次の4つです。
- transition-property
- transition-duration
- transition-timing-function
- transition-delay
ボタンや画像、メニューなどに自然な動きを加えることで、見やすく操作しやすいWebサイトを作れます。
まずは、背景色や拡大縮小など簡単なアニメーションから試してみると、transitionの仕組みを理解しやすくなります。

