此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always 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.

CSS 简写属性 contain-intrinsic-size 定义了元素受尺寸局限时浏览器用于布局的元素尺寸。

属性构成

此属性为下列 CSS 属性的简写属性:

语法

css
/* 关键词值 */ contain-intrinsic-width: none; /* <length> 值 */ contain-intrinsic-size: 1000px; contain-intrinsic-size: 10rem; /* 宽度 | 高度 */ contain-intrinsic-size: 1000px 1.5em; /* auto <length> */ contain-intrinsic-size: auto 300px; /* auto 宽度 | auto 高度 */ contain-intrinsic-size: auto 300px auto 4rem; /* 全局值 */ contain-intrinsic-size: inherit; contain-intrinsic-size: initial; contain-intrinsic-size: revert; contain-intrinsic-size: unset; 

取值

可为元素指定下列值中的一个或两个。若指定两值,则第一个值应用于宽度,第二个应用于高度。若指定一值,则同时应用于宽度和高度。

none

元素在所给方向上无固有尺寸。

<length>

元素在所给方向上具有指定尺寸(<length>)。

auto <length>

若存在“正常渲染”的元素尺寸且元素正在跳过其内容(例如在屏外时),则为此尺寸的记忆值;否则为指定的 <length>

描述

此属性的应用常常伴随如 contain: sizecontent-visibility 等可触发尺寸局限的要素。

尺寸局限允许用户代理将元素视为具有固定尺寸进行布局。由此避免为确定实际尺寸而重渲子元素,阻止不必要的重排(进而改善用户体验)。尺寸局限默认将元素视为不包含内容,且可按与内容无宽度或高度相同的方式折叠布局。contain-intrinsic-size 允许作者为布局所用的宽度指定合适的值。

auto <length> 值允许元素“被正常渲染”(包括其子元素)后存储其尺寸,再在元素不包含任何内容时使用此尺寸而非指定长度。由此允许有 content-visibility: auto 的屏外元素无需开发者精确估计元素尺寸即可受益于尺寸局限。在子元素渲染时,不使用记忆值(若启用尺寸局限,则将使用 <length>)。

形式定义

初始值该简写所对应的每个属性:
适用元素可应用尺寸局限的元素
是否是继承属性
Percentages该简写所对应的每个属性:
计算值该简写所对应的每个属性:
动画类型该简写所对应的每个属性:

形式语法

contain-intrinsic-size = 
[ auto? [ none | <length> ] ]{1,2}

示例

设置固有尺寸

此示例提供了可用于修改元素的 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 代码定义了两个按钮和一个通过 content-visibility 属性受局限的包含元素。

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

结果

使用选项将所给样式应用于包含元素 div。注意到当 content-visibilityvisibleauto 时,改变 contain-intrinsic-size 不会产生区别。然而若内容被隐藏,none 值的 contain-intrinsic-size 使子元素被视为无尺寸且使父元素被折叠。

规范

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

浏览器兼容性

参见