transition でなめらかに変化させる — 1行で印象が変わる
ホバーで色が「パッ」と変わるか「ふわっ」と変わるか。この差を作るのが transition です。書き方はほぼ1行。やりすぎない基準も添えます。
ボタンにマウスを乗せたとき、色が瞬時に切り替わると少し安っぽく見えます。0.2秒かけて変えるだけで、印象がぐっと良くなります。
書き方は1行
.btn {
background: #0f6fd1;
/* 変化に何秒かけるか */
transition: background 0.2s;
}
.btn:hover {
background: #0b5aad;
}大事なのは、transition を「ふだんの状態」のほうに書くことです。:hover のほうに書くと、乗せたときだけなめらかになり、離すときは瞬時に戻る不自然な動きになります。
2つのボタンにマウスを乗せてみてください。下だけがなめらかに変わります。0.2s を 1s にすると、遅すぎる感じが分かります。
時間の目安
- 0.15〜0.2秒 … 色や透明度。ほとんどの場面はこれ
- 0.3秒 … 位置や大きさの変化。少し長めがちょうどいい
- 0.5秒以上 … 待たされている感じが出る。特別な演出以外では避ける
迷ったら0.2秒です。速すぎると効果が分からず、遅いとストレスになります。
複数まとめて変化させる
カンマで区切れば複数指定できます。all と書けば全部が対象になりますが、意図しないものまで変化して重くなることがあるので、対象を書くほうが安全です。
translateY の数字を大きくすると、持ち上がる量が増えます。transition の対象を減らすと、どれが効いているか分かります。
変化しないプロパティもある
display は変化させられません。display: none から block へは、途中の状態が存在しないためです。「ふわっと出したい」場合は、opacity(透明度)と visibility を組み合わせるか、高さを変化させます。
動かすときは、transform と opacity を使うのが基本です。この2つはブラウザが効率よく処理できるため、なめらかに動きます。width や top を変化させると、環境によってはカクつきます。
動きを減らしたい人への配慮
画面の動きで気分が悪くなる人がいます。OSには「動きを減らす」設定があり、CSSからその設定を読み取れます。次の指定を入れておくと、その設定の人にはアニメーションが止まります。
@media (prefers-reduced-motion: reduce) {
* {
transition-duration: 0.01ms !important;
animation-duration: 0.01ms !important;
}
}3行で済むうえ、誰にも不利益がありません。習慣として入れておくことをおすすめします。