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()
は、計算も要求される場合にのみ、内在サイズのアニメーションを有効にするために使用しましょう。
補完可能な値
現在、アニメーションに次の固有の値を指定することができます。
auto
min-content
max-content
fit-content
content
(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)