interpolate-sizeとcalc-size()のアニメーションの仕方と使い分け
CSSアニメーションの鬼門に、height: auto
のトランジションがうまくできない問題がある。
calc-size()
以前紹介したheight:0→autoをトランジションするでは、Experimentalなcalc-size()という関数をつかって実現していた。
.panel {
transition: height .5s;
height: 0;
&.expanded {
height: calc-size(auto);
/**
* 固定値を使うことでトランジションできるが、内包するコンテンツによってはスタイルが崩れる
* height: 500px;
*
* そもそもトランジションしない
* height: auto;
*/
}
}
内在サイズを数値に変換した結果を返す関数で、calc-size(auto)
を500px
のように実際の値を計算し、トランジションを可能にしていた。ただし、計算を伴うので複数要素への適用や頻繁な状態変更にはパフォーマンスの懸念があった。
interpolate-size
interpolate-sizeプロパティは、アニメーションやトランジションを行うときに、実際のheightなどのサイズとauto、fit-content、max-content などの内在サイズを補間するために使用する。
※interpolate…[動]補完する、内挿する
取りうる値は以下の2つ。
allow-keywords
: length と 内在サイズの間の補間処理を有効にするnumeric-only
: (初期値)補間処理をしない
:root {
interpolate-size: allow-keywords;
}
.panel {
transition: height .5s;
height: 0;
&.expanded {
height: auto;
}
}
デモ
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.