このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

interpolate-size

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。

interpolate-sizeCSS のプロパティで、アニメーションおよびトランジションを行うときに、<length-percentage> 値と、autofit-contentmax-content などの内在サイズ値との間で行うことができます。

このプロパティは通常、 widthheight を、 <length-percentage> とそのコンテンツのフルサイズの間(つまり、「閉じた」と「開いた」状態、あるいは「非表示」と「表示」状態の間)でアニメーションさせる場合に使用します。 transform など、ボックスモデル以外の CSS プロパティをアニメーション化する場合、これは実行可能な解決策ではありません。

メモ: interpolate-size で選択された動作は、ウェブ全体で既定で有効にすることはできません。これは、多くのサイトでは、スタイルシートが、内在サイズ値はアニメーションできないと仮定して使用されているためです。これを既定で有効にすると、いくつかの下位互換性の課題が発生します(関連する CSS WG の議論を参照してください)。

構文

css
/* キーワード値 */
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 の値は継承されるため、文書ルートで設定することで、文書全体に対して内在サイズ値への(または内在サイズ値からの)アニメーションを有効にすることができます。

css
:root {
  interpolate-size: allow-keywords;
}

スコープを制限したい場合は、関連するコンテナー要素で設定します。次の例では、<main> およびその子孫に対してのみ、内在サイズの補間処理を有効にしています。

css
main {
  interpolate-size: allow-keywords;
}

メモ: 関数 calc-size() の返値も補間処理の対象となります。事実上、プロパティ値に calc-size() を含めると、選択範囲に interpolate-size: allow-keywords が自動的に適用されます。ただし、 interpolate-size は上記のように継承されるため、ほとんどの場合、内在サイズのアニメーションを有効にするにはこの方法を使用することをお勧めします。 calc-size() は、計算も要求される場合にのみ、内在サイズのアニメーションを有効にするために使用しましょう。

補完可能な値

現在、アニメーションに次の固有の値を指定することができます。

公式定義

初期値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> 要素が含まれており、それぞれの要素には、それぞれの子コンテンツが含まれています。

html
<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 に設定して、文書全体に対して有効にします。

css
:root {
  interpolate-size: allow-keywords;
}

次に、<section>height2.5rem に、overflowhidden に設定して、既定では <header> だけが表示されるようにし、状態変化時に <section>height を 1 秒かけてアニメーションさせる transition を指定します。最後に、<section>height:hover および :focusmax-content に設定します。

css
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

ブラウザーの互換性

関連情報