ホームページ >ウェブフロントエンド >CSSチュートリアル >#TIL: 表示テーブルとインラインはコンテナ クエリと互換性がありません

#TIL: 表示テーブルとインラインはコンテナ クエリと互換性がありません

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-23 12:17:10711ブラウズ

研究メモ: コンテナクエリとテーブル表示モードの間の競合

#TIL: Display table and inline are incompatible with container queries

最近、Web コンポーネントで問題が発生しました。画面の幅に応じてテーブル内のいくつかの列を非表示にする必要があります。

テーブルの 2 番目と 3 番目の列 (ヘッダーとセルを含む) を非表示にする必要があるとします。CSS コードは次のとおりです:

<code class="language-css">:is(th, td):is(:nth-child(2), :nth-child(3)) {
    display: none;
}</code>

コンテナ クエリを使用して、狭い画面 (600 ピクセル未満) でのみこれらの列を非表示にしてみました:

<code class="language-css">table { /* 这部分不起作用 */
  container-type: inline-size;
}

/* 窄屏幕下隐藏第二列和第三列 */
:is(td, th):is(:nth-child(2), :nth-child(3)) {
  @container (width < 600px) {
    display: none;
  }
}</code>

ただし、このコードは機能しません。その理由は、コンテナー クエリは特定の display 値とのみ互換性があるためです:

<code>- block
- inline-block
- flex
- inline-flex
- grid
- inline-grid
- flow-root</code>

互換性のない display 値には、inlinecontentsnone、およびテーブル関連のすべての display 値: tabletable-row-grouptable-header-grouptable-footer-grouptable-rowtable-celltable-column-grouptable-columntable-caption

回避策は、テーブルの親要素にコンテナ クエリを適用することです。私のテーブルは Web コンポーネント内にあり、Web コンポーネントのデフォルトの display 値は inline です。 この問題を解決するには、コンポーネントの display 属性を block に変更します:

<code class="language-css">:host {
  container-type: inline-size;
  display: block;
}

/* 窄屏幕下隐藏第二列和第三列 */
:is(td,th):is(:nth-child(2),:nth-child(3)) {
  @container (width < 600px) {
    display: none;
  }
}</code>

私のスタイルは Shadow DOM にあり、コンテナー クエリのスコープは Shadow DOM によって制限されているため、コード内で :host セレクターが使用されています。 Light DOM を使用する場合は、コンポーネントのハイフンでつながれたタグ名を使用できます。 このアプローチでは、テーブルのセマンティクスは破壊されません。

以上が#TIL: 表示テーブルとインラインはコンテナ クエリと互換性がありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。