CSSFunctionDeclarations
CSSFunctionDeclarations 接口是 CSS 对象模型的一部分,它表示 @function 主体中包含的连续 CSS 声明块。
这可以包括 CSS 自定义属性,以及 @function 主体内的 results 描述符的值,但不包括像 @media 这样的 at-rules 块,即使它们可能包含在内。在声明集中间插入的这样一个块会导致主体内容被拆分成单独的 CSSFunctionDeclarations 对象,正如我们在 多个 CSSFunctionDeclarations 演示中所看到的。
实例属性
此接口还继承了 CSSRule 的属性。
CSSFunctionDeclarations.style只读 实验性-
返回一个
CSSFunctionDescriptors对象,该对象表示@function主体中可用的描述符。
示例
基本的 CSSFunctionDeclarations 用法
在此示例中,我们定义了一个 CSS 自定义函数,然后使用 CSSOM 访问其声明。
CSS
我们的 CSS 使用 @function at-rule 定义了一个自定义函数。该函数名为 --lighter(),它输出输入颜色的浅色版本。--lighter() 接受两个参数,一个 <color> 和一个 <number>。它返回一个使用 相对颜色语法创建的 oklch() 颜色;输入颜色被转换为 oklch() 颜色,并且其亮度通道根据输入数字增加。
@function --lighter(--color <color>, --lightness-adjust <number>: 0.2) returns
<color> {
--someVar: 100;
result: oklch(from var(--color) calc(l + var(--lightness-adjust)) c h);
}
我们在函数中还包含了一个局部的 自定义属性 --someVar,虽然它没有被使用,但它说明了当 @function 主体中存在多个连续声明时会发生什么。
JavaScript
我们的脚本首先通过 HTMLStyleElement.sheet 获取对附加到我们文档的样式表的引用,然后通过 CSSStylesheet.cssRules 获取对样式表中唯一规则(即 CSSFunctionRule)的引用。
然后,我们使用 cssRules[0] 访问表示函数内唯一连续声明块的 CSSFunctionDeclarations 对象,通过 CSSFunctionDeclarations.style 访问其描述符信息,然后访问描述符长度和样式信息。所有这些信息都会被记录到控制台。
// Get a CSSFunctionRule
const cssFunc = document.getElementById("css-output").sheet.cssRules[0];
// Accessing CSSFunctionDeclarations and CSSFunctionDescriptors
console.log(cssFunc.cssRules[0]); // CSSFunctionDeclarations
console.log(cssFunc.cssRules[0].style); // CSSFunctionDescriptors
console.log(cssFunc.cssRules[0].style.length);
console.log(cssFunc.cssRules[0].style.result);
最值得注意的是
length属性等于2,因为描述符文本有两个部分(--someVar: 100;和result: oklch(from var(--color) calc(l + var(--lightness-adjust)) c h);)。result属性等于@function主体的result描述符,即oklch(from var(--color) calc(l + var(--lightness-adjust)) c h)。
多个 CSSFunctionDeclarations
在此示例中,我们展示了一个 @media at-rule 插入到声明集中间会如何生成两个 CSSFunctionDeclarations 对象。
CSS
我们的 CSS 展示了一个来自规范的 @function 示例 --bar(),它并没有什么实际作用,但包含了一个被 @media 块分隔的声明集。
@function --bar() {
--x: 42;
result: var(--y);
@media (width > 1000px) {
/* ... */
}
--y: var(--x);
}
JavaScript
我们的脚本首先通过 HTMLStyleElement.sheet 获取对附加到我们文档的样式表的引用,然后通过 CSSStylesheet.cssRules 获取对样式表中唯一规则(即 CSSFunctionRule)的引用。
然后,我们访问 CSSGroupingRule.cssRules,并将其值记录到控制台。这将返回一个包含三个对象的 CSSRuleList 对象:
- 一个
CSSFunctionDeclarations对象,表示--x: 42;result: var(--y);部分。 - 一个
CSSMediaRule对象,表示@mediaat-rule。 - 第二个
CSSFunctionDeclarations对象,表示--y: var(--x);部分。
// Get a CSSFunctionRule
const cssFunc = document.getElementById("css-output").sheet.cssRules[0];
// Accessing both CSSFunctionDeclarations
console.log(cssFunc.cssRules);
然后,我们将每个 CSSFunctionDeclarations 对象的详细信息记录到控制台——对象本身、其 style 属性中包含的 CSSFunctionDescriptors 对象,以及 CSSFunctionDescriptors.result 属性。
console.log(cssFunc.cssRules[0]); // First CSSFunctionDeclarations
console.log(cssFunc.cssRules[0].style); // CSSFunctionDescriptors
console.log(cssFunc.cssRules[0].style.result);
console.log(cssFunc.cssRules[2]); // Second CSSFunctionDeclarations
console.log(cssFunc.cssRules[2].style); // CSSFunctionDescriptors
console.log(cssFunc.cssRules[2].style.result);
在第二种情况下,result 返回一个空字符串,因为第二个声明部分不包含 result 描述符。
规范
| 规范 |
|---|
| CSS 函数与混入模块 # the-function-declarations-interface |
浏览器兼容性
加载中…