少し前から主要ブラウザで「@starting-style」がサポートされたので、CSSでフェードの設定をする方法を改めて確認してみます。
サンプルコード
以下のようなHTMLを用意して、.pulldownにホバーすると.pulldown_bodyがフェードインで表示されるという例を試してみます。
<div class="pulldown"> <div class="pulldown_head">ホバーで表示</div> <div class="pulldown_body">コンテンツ内容</div> </div>
まずはうまくいかない例で、transitionを使った実装をしてみます。
.pulldown_body { display: none; opacity: 0; transition: opacity 500ms; } .pulldown:hover .pulldown_body { display: block; opacity: 1; }
transitionでopacityのアニメーションの設定をしていますが、この場合はフェードになりません。
うまくいかない場合のデモページ
transitionではなく@keyframesを使った形にすると、フェードのアニメーションにできます。
.pulldown_body { display: none; } .pulldown:hover .pulldown_body { display: block; animation: fadein 500ms 1; } @keyframes fadein { 0% { opacity: 0; } 100% { opacity: 1; } }
@starting-style
最後が@starting-styleを使用する方法で、chromeはバージョン117(2023年9月)、Safariはバージョン17.5(2024年5月)、Firefoxはバージョン129(2024年8月)からのサポートと主要なブラウザではサポートされています。
ただ注意点として、記事作成時点ではForefoxでdisplay: none;からのアニメーションには対応していないとなっているものの、Firefoxのバージョン133で試している限りだとアニメーションされている?ようなので、そのあたりの確認などは必要そうです。
@starting-styleを使って設定を行ってみます。
.pulldown_body { display: none; opacity: 0; transition: opacity 500ms; } .pulldown:hover .pulldown_body { display: block; opacity: 1; @starting-style { opacity: 0; } }
@starting-styleはtransitionの対象要素の開始時のスタイルを設定できます。
上記の場合、開始時のスタイルをopacity: 0;としているため、フェードのアニメーションが行われるようになります。
@starting-styleで実装するデモページ
コメントが承認されるまで時間がかかります。