interpolate-size
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。
interpolate-size は CSS のプロパティで、アニメーションおよびトランジションを行うときに、<length-percentage> 値と、auto、fit-content、max-content などの内在サイズ値との間で行うことができます。
このプロパティは通常、 width や height を、 <length-percentage> とそのコンテンツのフルサイズの間(つまり、「閉じた」と「開いた」状態、あるいは「非表示」と「表示」状態の間)でアニメーションさせる場合に使用します。 transform など、ボックスモデル以外の CSS プロパティをアニメーション化する場合、これは実行可能な解決策ではありません。
メモ:
interpolate-size で選択された動作は、ウェブ全体で既定で有効にすることはできません。これは、多くのサイトでは、スタイルシートが、内在サイズ値はアニメーションできないと仮定して使用されているためです。これを既定で有効にすると、いくつかの下位互換性の課題が発生します(関連する CSS WG の議論を参照してください)。
構文
/* キーワード値 */
interpolate-size: allow-keywords;
interpolate-size: numeric-only;
/* グローバル値 */
interpolate-size: inherit;
interpolate-size: initial;
interpolate-size: revert;
interpolate-size: revert-layer;
interpolate-size: unset;
値
allow-keywords-
<length-percentage>値と内在サイズ値の間の補間処理を有効にし、 2 つの間のアニメーションを可能にします。 numeric-only-
既定の動作では、内在サイズ値は補間処理できません。
解説
interpolate-size: allow-keywords を設定すると、<length-percentage> 値と内在サイズ値の間の補間処理が可能になります。2 つの内在サイズ値間のアニメーションは有効にならないことに注意してください。アニメーションの一方の端は <length-percentage> でなければなりません。
interpolate-size の値は継承されるため、文書ルートで設定することで、文書全体に対して内在サイズ値への(または内在サイズ値からの)アニメーションを有効にすることができます。
:root {
interpolate-size: allow-keywords;
}
スコープを制限したい場合は、関連するコンテナー要素で設定します。次の例では、<main> およびその子孫に対してのみ、内在サイズの補間処理を有効にしています。
main {
interpolate-size: allow-keywords;
}
メモ:
関数 calc-size() の返値も補間処理の対象となります。事実上、プロパティ値に calc-size() を含めると、選択範囲に interpolate-size: allow-keywords が自動的に適用されます。ただし、 interpolate-size は上記のように継承されるため、ほとんどの場合、内在サイズのアニメーションを有効にするにはこの方法を使用することをお勧めします。 calc-size() は、計算も要求される場合にのみ、内在サイズのアニメーションを有効にするために使用しましょう。
補完可能な値
現在、アニメーションに次の固有の値を指定することができます。
automin-contentmax-contentfit-contentcontent(flex-basisを使用してサイズ設定されたコンテナーの場合)
公式定義
| 初期値 | numeric-only |
|---|---|
| 適用対象 | すべての要素 |
| 継承 | あり |
| 計算値 | 指定通り |
| アニメーションの種類 | アニメーション不可 |
形式文法
interpolate-size =
numeric-only |
allow-keywords
例
>基本的な interpolate-size の使用
この例では、文書に interpolate-size: allow-keywords を設定して、内在サイズを含むアニメーションを有効にする方法を示します。このデモでは、キャラクターのバッジ/「名前タグ」が機能し、その上にカーソルを置いたりフォーカスを合わせたりすると、そのキャラクターに関する情報が表示されます。情報の表示は、設定した長さから max-content への height のトランジションによって処理されます。
HTML
HTML には、キーボードのフォーカスを受け取ることができるように tabindex="0" が設定された単一の <section> 要素が含まれています。この <section> には、<header> および <main> 要素が含まれており、それぞれの要素には、それぞれの子コンテンツが含まれています。
<section tabindex="0">
<header>
<h2>Tanuki</h2>
</header>
<main>
<p>Tanuki is the silent phantom of MDN.</p>
<ul>
<li><strong>Height</strong>: 3.03m</li>
<li><strong>Weight</strong>: 160kg</li>
<li><strong>Tech Fu</strong>: 7</li>
<li><strong>Bad Jokes</strong>: 9</li>
</ul>
</main>
</section>
CSS
CSS では、まず interpolate-size: allow-keywords を :root に設定して、文書全体に対して有効にします。
:root {
interpolate-size: allow-keywords;
}
次に、<section> の height を 2.5rem に、overflow を hidden に設定して、既定では <header> だけが表示されるようにし、状態変化時に <section> の height を 1 秒かけてアニメーションさせる transition を指定します。最後に、<section> の height を :hover および :focus に max-content に設定します。
section {
height: 2.5rem;
overflow: hidden;
transition: height ease 1s;
}
section:hover,
section:focus {
height: max-content;
}
簡潔にするため、残りの CSS は省略しています。
結果
<section> にカーソルを当てたり、キーボードでフォーカスを当てたりしてみてください。その領域がアニメーションで全高まで拡大し、すべてのコンテンツが表示されます。
仕様書
| Specification |
|---|
| CSS Values and Units Module Level 5> # interpolate-size> |
ブラウザーの互換性
Loading…
関連情報
calc-size()- Animate to height: auto; (and other intrinsic sizing keywords) in CSS (developer.chrome.com, 2024)