displayプロパティは離散値なので普通はアニメーションできない。
.element {
transition: opacity 1s;
}
.element.hidden {
opacity: 0;
display: none;
}
上のようにしてhiddenクラスをトグルしてもアニメーションしない。
しかし以下のようにするとアニメーションする。
.element {
transition: opacity 1s, display 1s allow-discrete;
@starting-style {
opacity: 0;
}
}
.element.hidden {
opacity: 0;
display: none;
}
表示から非表示のアニメーションは transition
でdisplayに対して設定している allow-discrete
が影響する。
これは離散値のアニメーションが有効になる設定。
display: none
と content-visibility: hidden
だけ特別で、アニメーションが終わってから非表示になる。
それ以外のプロパティは50%アニメーションしてから切り替わる。
非表示から表示のアニメーションは @starting-style
が影響する。
これはレンダリングされた瞬間の設定。
したがって display: none
が外れた瞬間は opacity: 0
から始まる。
参考