@initialは、初期状態を設定できるCSSの新機能。(※プロパティの初期値を設定するinitialとは異なる)
例えば、現在のCSSではtransitionでdisplayは機能しないが、CSSの新機能を使用すると、CSSだけで表示・非表示のアニメーションを実装できるようになる。
@initialは仕様が確定している状態ではない(2023/4/27現在)。前述したようにinitialプロパティと混同しやすいなど懸念事項があるため、変更される可能性もある。現在@initialが動作するブラウザは、Chrome Canaryのみとなっている。
使用例:チェックボックスで要素の表示/非表示
以下の例は、チェックボックスをオンにすると、要素がdisplay: none;からdisplay: block;にトランジションするデモである。オフにすると非表示となる。
@initialでアニメーション化前の状態を設定することが重要なポイント。
.display-on-check {
opacity: 0;
display: none;
/* opacityとdisplayの両方を設定 */
transition: opacity 0.5s, display 0.5s;
}
/* チェックしたときのアクティブな状態 */
:checked + .display-on-check {
opacity: 1;
display: block;
}
/* 初期状態を設定 */
@initial {
:checked + .display-on-check {
opacity: 0;
}
}
使用例:要素のポップオーバー
:popoverと@initialを使用したポップオーバー。あるアイコンをタップすると、それぞれのポップオーバーが表示される。
- :popover-openと@initialを使用して、オープンする前の初期状態のスタイルを設定する
- :popover-open内で、オープン状態を設定する
- ベースとなる要素で、アニメーション先を設定する
.settings-popover {
&:popover-open {
/* 初期状態を設定 */
@initial {
transform: translateY(20px);
opacity: 0;
}
/* オープン状態 */
transform: translateY(0);
opacity: 1;
}
/* オープン後、クローズ状態 */
transform: translateY(-50px);
opacity: 0;
transition: transform 0.5s, opacity 0.5s, display 0.5s;
}
【参考】
https://coliss.com/articles/build-websites/operation/css/css-transition-display.html