Movatterモバイル変換


[0]ホーム

URL:


  1. 開発者向けのウェブ技術
  2. CSS
  3. リファレンス
  4. プロパティ
  5. contain-intrinsic-size

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

View in EnglishAlways switch to English

contain-intrinsic-size

Baseline 2023
Newly available

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

contain-intrinsic-sizeCSS一括指定プロパティで、要素がサイズ抑制の対象である場合に、ブラウザーがレイアウトに使用する要素のサイズを設定します。

構成要素のプロパティ

このプロパティは以下の CSS プロパティの一括指定です。

構文

css
/* キーワード値 */contain-intrinsic-size: none;/* <length> 値 */contain-intrinsic-size: 1000px;contain-intrinsic-size: 10rem;/* 幅 | 高さ */contain-intrinsic-size: 1000px 1.5em;/* auto <length> */contain-intrinsic-size: auto 300px;contain-intrinsic-size: auto none;/* auto 幅 | auto 高さ */contain-intrinsic-size: auto 300px auto 4rem;/* グローバル値 */contain-intrinsic-size: inherit;contain-intrinsic-size: initial;contain-intrinsic-size: revert;contain-intrinsic-size: revert-layer;contain-intrinsic-size: unset;

contain-intrinsic-size プロパティには以下の値を指定することができます。

none

この要素には、指定された方向の内在サイズがない。

<length>

この要素には、指定された方向に<length> が指定されている。

auto [<length> | none]

「通常レンダリングされる」要素サイズが存在し、その要素がそのコンテンツをスキップする場合(例えば、それがオフスクリーンである場合)、記憶された値です。キーワードnone は、<length> の代わりに使用することができます。0px で修正された長さがnone と異なる動作をする場合(段組みやグリッドレイアウトなど)に使用します。

キーワード、長さ、またはauto [<length> | none] のペアで指定された場合、その値は幅と高さの両方に適用されます。

長さの値を 2 つ指定することができ、幅と高さの順に適用されます。auto [<length> | none] のペアを 2 つ指定した場合は、最初のペアが幅に適用され、2 つ目が高さに適用されます。

解説

このプロパティは、contain: sizecontent-visibility のような、サイズ格納を発生させる要素の横に並んだプロパティとして一般的に適用されます。

サイズ抑制は、ユーザーエージェントが要素をあたかも固定されたサイズを持っているかのようにレイアウトできるようにし、実際のサイズを決定するために子要素の再描画を避けることによって不必要なリフローを防ぎます(それによって使い勝手を向上させます)。既定では、サイズ抑制は要素をコンテンツがないものとして扱い、コンテンツに幅や高さがない場合と同様にレイアウトを折りたたむ可能性があります。contain-intrinsic-size プロパティを使用すると、レイアウトに使用するサイズとして適切な値を指定することができます。

auto <length> 値では、要素が(子要素とともに)「通常レンダリングされる」場合の要素のサイズを指定することができ、要素がコンテンツをスキップするときに代わりに指定した長さを使用できるようにします。これにより、content-visibility: auto を持つオフスクリーン要素は、開発者が要素のサイズを正確に推定することなく、サイズ抑制の恩恵を受けることができます。子要素がレンダリングされる場合、記憶された値は使用されません(サイズの抑制が有効な場合、<length> は使用されません)。

グリッドレイアウトや段組みレイアウトでは、明示的にサイズを指定すると、暗黙的なコンテンツベースの高さとは異なる扱いを受けます。要素は、単にその高さまでコンテンツで満たされた場合とは大幅に異なるレイアウトになるかもしれません。auto none 値を指定すると、記憶された値がない場合に要素をcontain-intrinsic-size: none にフォールバックし、コンテンツがないかのようにレイアウトすることができます。グリッドレイアウトや段組みレイアウトでは、コンテナーそのものが親要素からはみ出す可能性があり、予期しないページレイアウトになる可能性があるため、内在サイズとして 0px を設定するよりも常に推奨されます。

公式定義

初期値一括指定の次の各プロパティとして
適用対象elements for which size containment can apply
継承なし
パーセント値一括指定の次の各プロパティとして
計算値一括指定の次の各プロパティとして
アニメーションの種類一括指定の次の各プロパティとして

形式文法

contain-intrinsic-size =
[[auto|from-element]?[none|<length [0,∞]>]]{1,2}
この構文はCSS Box Sizing Module Level 4 による最新の標準を反映しています。すべてのブラウザーがすべての部分を実装しているわけではありません。サポート情報についてはブラウザーの互換性を参照してください。

内在サイズに auto 値のペアを使用

この例では、正確な内在サイズと誤った内在サイズの両方の推定値を持つ要素が縦方向に多数表示されるレイアウトを使用して、contain-intrinsic-size: auto <length>contain-intrinsic-size: auto none を示します。content-visibility: auto を使用することは、要素が画面外にあるときにレンダリングをスキップするので、このプロパティはcontain-intrinsic-size と組み合わせてレンダリングパフォーマンスを改善し、再フローを最小化するのに適した方法です。

contain-intrinsic-size: auto 500px の値のペアは、要素が画面外にあり、ページがレイアウトされているときに、500px を要素の「プレースホルダー」サイズ(幅と高さ)として使用するようにブラウザーに指示します。ユーザーが要素までスクロールして表示される必要があるとき、ブラウザーは要素とそのコンテンツの実際のサイズを計算します。プレースホルダーと計算されたサイズの間に差がある場合、サイドバーの位置の変更を伴う新しいレイアウトが強制される可能性があります。

ブラウザーが要素の実際のサイズ情報を保有しますと、要素が再び画面外にスクロールしたときにこのサイズを記憶し、プレースホルダーの値の代わりに記憶されたサイズをレイアウト計算に使用します。好ましいことは、ブラウザーがそのサイズを計算するために要素のコンテンツを繰り返しレンダリングする必要がないことであり、コンテンツが複雑であったり、ネットワークリソースや JavaScript に依存していない場合に特に有用です。

HTML

html
<div>  <div>    <p>      このブラウザーは      <code>contain-intrinsic-size: auto &lt;length&gt;</code>      に対応していません。    </p>  </div>  <div>    <p>Item one</p>  </div>  <div>    <p>Item two</p>  </div>  <div>    <p>Item three</p>  </div>  <div>    <p>Item four</p>  </div>  <div>    <p>      このブラウザーは      <code>contain-intrinsic-size: auto none</code>      に対応していません。    </p>  </div>  <div>    <p>Item five</p>  </div>  <div>    <p>Item six</p>  </div></div>

CSS

div,p {  padding: 1rem;  margin-bottom: 1rem;  font-size: 2rem;  font-family: sans-serif;}code {  background-color: lightgray;  padding: 0.25rem;  border-radius: 0.25rem;}#container {  width: 90%;  height: 80%;}.auto-length,.auto-length.none {  display: none;}#auto-length-note,#auto-none-note {  display: block;  padding: 0;}#auto-length-note p,#auto-none-note p {  padding: 0.5rem;  width: 100%;  height: max-content;  font-size: 1rem;  line-height: 1.5rem;  background-color: tomato;}@supports (contain-intrinsic-size: auto none) {  .auto-length.none {    display: block;  }  #auto-none-note {    display: none;  }}@supports (contain-intrinsic-size: auto 500px) {  .auto-length {    display: block;  }  #auto-length-note {    display: none;  }}
css
p {  height: 500px;  width: 500px;  border: 4px dotted;  background: lightblue;}.auto-length {  content-visibility: auto;  contain-intrinsic-size: auto 500px;  background-color: linen;  outline: 4px dotted blue;}.large-intrinsic-size {  /* Setting an inaccurate intrinsic size for the element */  contain-intrinsic-size: auto 5000px;  background-color: lightgray;  outline: 4px dotted red;}.small {  /* This element is a lot smaller than expected */  height: 100px;  width: 100px;}.none {  background-color: papayawhip;  contain-intrinsic-size: auto none;  outline: 4px dotted red;}

結果

  • 最初の 2 つのボックスは、実際のサイズに一致する内在サイズを持っているため、それらが表示されると、レイアウトは再計算されますが、スクロールバーやスクロール位置は変化しません。

  • 3 つ目と 4 つ目のボックスは内在サイズが大きいので、ブラウザーが計算した初期レイアウトは大きすぎます。これらのボックスを小さくすることで、大幅なレイアウト変更を余儀なくされる点に達したときに一目でわかるようにしました。

    3 つ目と 4 つ目のボックスがスクロールして表示されると、サイズが再計算され、ボックスとその親の高さがいくつか低くなります。効果としては、スクローラーがページの下にジャンプし(実質的に推定よりもボックス内をスクロールしたことになります)、ページ全体の高さが推定よりも低くなるため、スクローラーが長くなります。

  • 最後のボックスはauto none を持っているため、推定サイズはゼロです。スクロールして表示されるとき、要素とその親のサイズはより大きく再計算されるので、スクローラーはサイズが小さくなり、バーの上に移動されます。

content-visibility: auto を使用すると、次に表示する時刻のために要素の実際のレンダリングサイズが保存されるため、下までスクロールした後、その後スムーズに上下にスクロールすることができます。

内在サイズの設定

この例では、要素のcontain-intrinsic-sizecontent-visibilitycontain を変更し、さまざまな設定の効果を監視するために使用することができる選択リストを提供します。

CSS

css
#contained_element {  border: 2px solid green;  width: 120px;}.child_element {  border: 1px solid red;  background: blue;  height: 50px;  width: 150px;}

JavaScript

下記のコードでは、選択されたオプションに基づいて、格納する要素にスタイルを追加したり、スタイルを除去したりしています。

js
const containedElement = document.querySelector("#contained_element");const intrinsicSizeSelector = document.querySelector(  "#contain_intrinsic_size_selector",);const containSelector = document.querySelector("#contain_selector");const contentVisibilitySelector = document.querySelector(  "#content_visibility_selector",);containedElement.style["contain-intrinsic-size"] =  intrinsicSizeSelector.options[intrinsicSizeSelector.selectedIndex].text;containedElement.style["contain"] =  containSelector.options[containSelector.selectedIndex].text;containedElement.style["content-visibility"] =  contentVisibilitySelector.options[    contentVisibilitySelector.selectedIndex  ].text;intrinsicSizeSelector.addEventListener("change", () => {  containedElement.style["contain-intrinsic-size"] =    intrinsicSizeSelector.options[intrinsicSizeSelector.selectedIndex].text;});containSelector.addEventListener("change", () => {  containedElement.style["contain"] =    containSelector.options[containSelector.selectedIndex].text;});contentVisibilitySelector.addEventListener("change", () => {  containedElement.style["content-visibility"] =    contentVisibilitySelector.options[      contentVisibilitySelector.selectedIndex    ].text;});

HTML

HTML は 2 つのボタン、content-visibility プロパティによって抑制されるコンテナー要素を定義しています。

html
<p>  <label for="contain_intrinsic_size_selector">contain-intrinsic-size:</label>  <select>    <option>none</option>    <option>40px 130px</option>    <option>auto 40px auto 130px</option></select  >;<br />  <label for="contain_selector">contain:</label>  <select>    <option>none</option>    <option>size</option>    <option>strict</option></select  >;<br />  <label for="content_visibility_selector">content-visibility:</label>  <select>    <option>visible</option>    <option>auto</option>    <option>hidden</option></select  >;</p><div>  <div></div></div>

結果

セレクターを使用して、指定されたスタイルをdiv 要素に格納します。content-visibilityvisible またはauto の場合、contain-intrinsic-size を変更しても何も変わらないことに注意してください。しかし、コンテンツが非表示の場合、contain-intrinsic-sizenone にすると、子要素にサイズがないかのように親要素を折りたたみます。

仕様書

Specification
CSS Box Sizing Module Level 4
# propdef-contain-intrinsic-size

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2026 Movatter.jp