container-type

Baseline 2023 *
Newly available

Since February 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

* Some parts of this feature may have varying levels of support.

要素はクエリーコンテナーを確立するのに、 container-type という CSS プロパティを使用することができます。 container-type は、コンテナークエリーで使用されるコンテナーコンテキストの種類を定義するために使用されます。利用できるコンテナーコンテキストは次のとおりです。

  • サイズ: 最大または最小サイズ、アスペクト比、方向などの一般的なサイズまたはインラインサイズの条件に基づいて、コンテナーの子に CSS ルールを選択的に適用できるようにします。
  • スクロール状態: コンテナーが途中までスクロールされているスクロールコンテナーであるかどうか、コンテナーがスクロールスナップコンテナーにスナップされているスナップターゲットであるかどうかなどのスクロール状態の条件に基づいて、コンテナーの子に CSS ルールを選択的に適用できるようにします。

メモ: container-type および container-name プロパティを使用すると、自動的に style 値と layout 値が contain プロパティに適用されます。

構文

css
/* キーワード値 */
container-type: normal;
container-type: size;
container-type: inline-size;
container-type: scroll-state;

/* 2 つの値 */
container-type: size scroll-state;

/* グローバル値 */
container-type: inherit;
container-type: initial;
container-type: revert;
container-type: revert-layer;
container-type: unset;

container-type プロパティは、以下のリスト内の 1 つの値、または 2 つの値(そのうちの 1 つは scroll-state で、もう 1 つは inline-size または size)を指定できます。言い換えれば、要素は、サイズクエリーコンテナー、スクロール状態クエリーコンテナー、その両方、またはどちらでもないものとして設定できます。

inline-size

コンテナーのインライン軸上のサイズクエリー用のクエリーコンテナーを確立します。 要素にレイアウト、スタイル、インラインサイズ抑制を適用します。

インラインサイズ抑制が要素に適用されます。要素のインラインサイズは、子要素を無視して単独で計算することができます (CSS コンテナーの使用を参照してください)。

normal

この要素はコンテナーサイズクエリーのクエリーコンテナーではありませんが、コンテナースタイルクエリーのクエリーコンテナーであることに変わりはありません。

scroll-state

コンテナーのスクロール状態クエリー用のクエリコンテナーを設定します。この場合、要素のサイズは単独で計算されず、抑制は適用されません。

size

インラインおよびブロックの両方の寸法で コンテナーサイズクエリーのためのクエリー コンテナーを確立します。 コンテナーにレイアウト抑制、スタイル抑制、サイズ抑制を適用します。

サイズ抑制は、インライン方向とブロック方向の両方で要素に適用されます。要素のサイズは、子要素を無視して単独で計算できます。

公式定義

初期値normal
適用対象すべての要素
継承なし
計算値指定通り
アニメーションの種類

形式文法

container-type = 
normal |
[ [ size | inline-size ] || scroll-state ]

解説

コンテナークエリーを使用すると、コンテナーに対して実行される条件付きクエリーに基づいて、コンテナー内にスタイルを選択的に適用することができます。 @container アットルールは、コンテナーに対して実行されるテスト、およびクエリーの返値が true の場合にコンテナーのコンテンツに適用されるルールを指定するために使用されます。

コンテナークエリーは、要素をサイズまたはスクロール状態のコンテナー、あるいはその両方として定義する container-type プロパティを持つ要素に対してのみ実行されます。

コンテナーサイズクエリー

コンテナーサイズクエリーを使用すると、最大または最小のサイズ、アスペクト比、向きなどのサイズ条件に基づいて、コンテナーの子孫に CSS ルールを選択的に適用することができます。

サイズコンテナーには、さらにサイズ抑制が適用されます。これにより、要素がそのコンテンツからサイズ情報を取得できなくなります。これは、無限ループを避けるためにコンテナークエリーにとって重要です。そうしないと、コンテナークエリー内の CSS ルールによってコンテンツのサイズが変更され、その結果、クエリーの評価が false になり、親要素のサイズが変更され、その結果、コンテンツのサイズが変更され、クエリーの評価が再び true になり、というように無限ループに陥ってしまいます。この連鎖は、無限ループとして繰り返されます。

コンテナーのサイズは、親要素の全幅に拡大するブロックレベル要素など、コンテキストによって設定するか、明示的に定義する必要があります。コンテキストによるサイズや明示的なサイズを利用できない場合、サイズが抑制されている要素は折りたたまれます。

コンテナースクロール状態クエリー

コンテナースクロール状態クエリーを使用すると、次のようなスクロール状態の条件に基づいて、コンテナーの子要素に CSS ルールを選択的に適用することができます。

  • コンテナーのコンテンツが部分的にスクロールされているかどうか。
  • コンテナーがスクロールスナップコンテナーにスナップされているスナップターゲットであるかどうか。
  • コンテナーが position: sticky によって位置指定され、スクロールコンテナーの境界に貼り付いているかどうか。

最初のケースでは、クエリーの対象となるコンテナーはスクロールコンテナーそのものです。他の 2 件の場合、クエリーの対象となるコンテナーは、親スクロールコンテナーのスクロール位置の影響を受ける要素です。

インラインサイズ抑制の確立

次の HTML の例には、画像、タイトル、テキストを持つカード部品があります。

html
<div class="container">
  <div class="card">
    <h3>Normal card</h3>
    <div class="content">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
      tempor incididunt ut labore et dolore magna aliqua.
    </div>
  </div>
</div>

<div class="container wide">
  <div class="card">
    <h3>Wider card</h3>
    <div class="content">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
      tempor incididunt ut labore et dolore magna aliqua.
    </div>
  </div>
</div>

コンテナーコンテキストを作成するには、要素に container-type プロパティを追加します。以下は、 inline-size 値を使用してコンテナーのインライン軸のコンテナーコンテキストを作成しています。

css
.container {
  container-type: inline-size;
  width: 300px;
  height: 120px;
}

.wide {
  width: 500px;
}

コンテナークエリーを @container アットルールで書くと、コンテナーの横幅が 400px を超える場合に、コンテナーの要素にスタイルが適用されます。

css
@container (min-width: 400px) {
  .card {
    display: grid;
    grid-template-columns: 1fr 2fr;
  }
}

仕様書

Specification
CSS Conditional Rules Module Level 5
# container-type

ブラウザーの互換性

関連情報