transitionを:hoverがついたセレクタで指定してもいいのか?
ChatGPT先生に教えてもらったこと。自身の学習用。
技術的には可能ですが、通常は避けたほうが良い場合が多いです。その理由を以下に説明します。
1. 通常の使い方
transitionは、要素に直接設定するのが基本です。
.close {
transition: opacity 0.3s ease, transform 0.3s ease;
}
こうすると、この要素に対するすべての状態変化(ホバーや他のスタイル変更)がトランジションの対象になります。
2.:hoverセレクタで指定する場合
技術的には次のように書くことができます:
ul.menu li:hover ul.close {
transition: opacity 0.3s ease, transform 0.3s ease;
}
このように書きますと、hover状態になったときだけトランジションが適用されます。ホバー解除時にはtransition適用されず、元の状態に即座に戻ります。
なぜ通常は避けるべきですか?
トランジションが限定的になる
:hoverセレクタ内でtransitionを指定すると、ホバー中のスタイル変更にのみトランジションが適用され、ホバー解除時にはトランジションがなくなります。これが
意図的な場合には問題ありませんが、スタイル全体で継続性を宣告することがあります。保守性が低くなる
他のセレクタ(例、:focusJavaScriptを使ったクラス変更)でも同じ動作を再現したい場合、スタイルをもう一度書いても万が一、コードが冗長になります。
どんな場合:hoverに書いていいの?
以下のような状況では問題はありません:
特定の場所にだけトランジションを適用したい
例: ホバー時のみスムーズなアニメーションが必要で、キャンセル時は即座に消したい。
他のセレクタと重複しない特定の動作を制御したい
例: ホバー解除後に別のスタイルが適用されるようにしたい。
推奨される使い方
通常は、トランジションは要素自体に設定し、状態(:hoverや:focus)では変化プロパティを指定します。
.close {
transition: opacity 0.3s ease, transform 0.3s ease;
opacity: 0;
transform: scaleY(0);
}
ul.menu li:hover ul.close {
opacity: 1; transform: scaleY(1);
}
こうすることで、一貫した動作が得られます。
まとめ
transitionを:hoverセレクタで指定するのは技術的に可能ですが、通常は避けるべきです。
理由: 他の状態変更と統一しにくく、コードが冗長になりがちです。
状態ごとの変化を管理したい場合には、要素をtransition設定し、状態に応じてプロパティを変更する方が保守性が高いです。
この記事が気に入ったらサポートをしてみませんか?