CSS コンテナクエリ(@container)

実装: arm/v1/src/os_lib/css/container_query.rs(純粋モジュール・条件評価) + arm/v1/src/os_lib/css/parser.rs(@container の解析・保持) + arm/v1/src/os_lib/css/cascade.rs(カスケード時の動的評価) 試験: arm/v1/tests/src/test_container_query.rs(23 件)

変更前の状態

@container は未知のアットルールとして丸ごと破棄されていた (parser.rs の continue)。中のスタイルは一切適用されず、 コンテナクエリを使うページは指定が全部落ちた状態で描画されていた。

方針: 解析時に評価して落とさない

@media と同じく、条件はルールへタグ付けして保持し、 カスケードのたびに動的評価する。

これは 2026-07-24 の失敗に基づく。当時 @media を解析時に静的評価して ブロックごと捨てていたため、CSS 解析が走った一度きりの時点の ウィンドウ幅に永久固定され、モバイルファースト CSS のナビゲーションが 消えたままになった(ページが白紙同然になる一因)。 コンテナクエリは基準がコンテナ寸法で、レイアウトが決まるまで 値が分からないぶん、静的評価の害は @media より大きい。

不変条件

対応構文

既知の制約(重要)

コンテナ寸法は現在ビューポート寸法で代用している。

カスケードはレイアウトより前に、しかもツリー全体へ一度だけ走る構造の ため、「この要素にとっての問い合わせコンテナ」の寸法を要素ごとに 与えられない。CONTAINER_HINT_W/_H(layout/values.rs)を用意して あるが、現状レイアウト側から要素ごとに設定する経路は無く、 0 のときはビューポート寸法へフォールバックする。

結果として @container は実質 @media と同じ挙動になる。

CSS 仕様どおりにするには、カスケードを要素ごとにコンテナ寸法つきで 呼べるようにする(=レイアウト後に再カスケードする 2 パス化)改修が要る。 container-type プロパティの解釈も未実装。

それでも「ブロックごと破棄して指定が全部落ちる」よりは、 一般的なケースで正しく当たる現状の方が実害が小さいと判断した。