CSS 函数与混入模块

W3C 首次公开工作草案

关于本文件的更多信息
此版本:
https://www.w3.org/TR/2025/WD-css-mixins-1-20250515/
最新发布版本:
https://www.w3.org/TR/css-mixins-1/
编辑草案:
https://drafts.csswg.org/css-mixins/
历史记录:
https://www.w3.org/standards/history/css-mixins-1/
反馈:
CSSWG 问题仓库
编辑:
Miriam E. Suzanne特邀专家
Tab Atkins-BittnerGoogle
为本规范建议修改:
GitHub 编辑器

摘要

本模块定义了作者自定义函数的能力,其作用类似于带参数的自定义属性。作者可以充分利用 CSS 的数值和条件规则的强大功能。 本模块还定义了 CSS 规则混入的雏形,允许将带参数的整块属性替换插入到其他规则中。

CSS 是一种用于描述结构化文档(如 HTML 和 XML)在屏幕、纸张等媒介上渲染方式的语言。

本文档状态

本节描述了本文档在发布时的状态。 当前 W3C 发布的技术文档列表及本技术报告的最新修订版, 可在 W3C 标准与草案索引 https://www.w3.org/TR/ 查阅。

本文档由CSS 工作组首次公开工作草案的形式 通过推荐标准流程发布。 作为首次公开工作草案发布, 并不代表 W3C 及其成员的认可。

本文是草稿文档, 可能随时被更新、替换或废弃。 除非作为工作进展引用,否则不宜引用本文件。

欢迎通过在 GitHub 提交 issue(推荐) 提供反馈,标题中请包含规格代码“css-mixins”,如: “[css-mixins] …评论摘要…”。 所有问题和评论都会被归档。 也可发送到(归档地址)公共邮件列表 www-style@w3.org

本文件受2023年11月3日 W3C 流程文档的约束。

本文件由遵循W3C 专利政策的工作组产生。 W3C 维护了与该组成果相关的专利披露公开列表; 页面还包含披露专利的说明。 任何个人如果确实知晓某项专利且认为其包含必要权利要求, 必须根据W3C 专利政策第6节进行信息披露。

1. 简介

本节为非规范性内容。

注意: 当前,本规范仅定义了自定义函数, 它们作用于 CSS 值级别。 预计未来还会定义“混入”(mixin), 即作用于样式规则级别的函数。

自定义属性赋予作者极大的能力, 可以在一个地方定义有用且有时很复杂的值, 然后在样式表中多次复用。 这些值可以在文档中变化, 或根据媒体查询或其他条件而变化, 使其非常灵活和响应式。

然而,这些值在定义时是固定的, 只能通过完全覆盖其先前定义来更改: --shadow: 2px 2px var(--shadow-color) 的声明 其 --shadow-color 值来自于声明该属性的元素, 并且后续对子元素上的 --shadow-color 的更改 并不会影响 --shadow 的值; 它们仍然使用定义 --shadow 时的阴影颜色。 这常常让大量使用复合变量的作者感到困惑。

自定义函数为作者带来了与自定义属性 相同的能力, 但可参数化: 它们具有与 自定义属性 定义相同的灵活性和条件性, 但可以在使用点从其他自定义属性 (或显式作为参数)获取值。 例如,与 --shadow 自定义属性相比, 可以定义 --shadow() 自定义函数, 如下所示:

@function --shadow(--shadow-color <color> : inherit) {
  /* 如果未传递 --shadow-color 参数,
     或未能成功解析为 <color>,
     则尝试使用元素上的 --shadow-color 属性 */

  /* var(--shadow-color) 指的是参数 --shadow-color,
     而不是自定义属性,
     但依然可以像平常一样使用后备值 */
  result: 2px 2px var(--shadow-color, black);
}

.foo {
  --shadow-color: blue;
  box-shadow: --shadow(); /* 生成蓝色阴影 */
  /* 或直接这样 */
  box-shadow: --shadow(blue);
}

2. 定义自定义函数

可以将自定义函数 视为一种高级自定义属性, 它不是用单一固定值替换, 而是根据函数参数和调用时的自定义属性值计算其替换值。 与 var() 语法 用于自定义属性替换不同,自定义函数通过 <dashed-function> 语法调用, 允许传递额外的参数值。

可以这样定义一个简单的自定义函数用于取反某个值:
@function --negative(--value) {
  result: calc(-1 * var(--value));
}

然后,可以在某个声明中通过 --negative() 调用该函数:

html {
  --gap: 1em;
  padding: --negative(var(--gap));
  /* 或直接传值,如: */
  padding: --negative(1em);
}

<dashed-function> 是一种任意替换函数, 类似于 var()。 它们出现在属性值中时, 解析时会被视为有效, 只会在计算值阶段才会实际求值和解析, 即在任意替换发生后。

2.1. @function 规则

@function 规则定义了一个自定义函数, 由名称、 参数列表函数体, 以及可选的由语法定义描述的返回类型组成。

每个函数参数包含一个名称(<custom-property-name>); 可选的参数类型,由语法定义描述; 以及可选的默认值

<@function> = @function <function-token> <function-parameter>#? )
  [ returns <css-type> ]?
{
  <declaration-rule-list>
}

<function-parameter> = <custom-property-name> <css-type>? [ : <declaration-value> ]?
<css-type> = <syntax-component> | <type()>
<type()> = type( <syntax> )

2.1.1. 函数前言

<function-token> 产生式 必须以两个连字符(U+002D HYPHEN-MINUS)开头, 类似于 <dashed-ident>, 否则定义无效。

最终自定义函数的名称由 <function-token> 的名称给出, 可选的函数参数<function-parameter> 的值给出 (默认为空集合), 可选的返回类型由紧跟returns关键字的 <css-type> 给出 (默认为 type(*))。

如果<css-type>函数参数返回类型可以用单个 <syntax-component> 表达, 则 type() 函数可以省略:
@function --foo(--a <length>) { /* ... */ }
@function --foo(--a <color>) { /* ... */ }
@function --foo(--a <length>+) { /* ... */ }

但如果<syntax> 需要<syntax-combinator>,则必须用 type() 包裹:

@function --foo(--a type(<number> | <percentage>)) { /* ... */ }

@function 规则的名称是树作用域名称。 如果同名下存在多个 @function, 则级联层级更高的获胜, 同一层内后定义的获胜。

如果函数参数包含同一个 <custom-property-name> 多次, 则该 @function 规则无效。

2.1.2. 函数体

@function 规则的主体接受条件分组规则, 如 @media。 另外,还接受以下描述符:

未知描述符会被视为无效并忽略, 但不会导致 @function 规则本身无效。

2.2. result 描述符

名称: result
适用规则: @function
值: <declaration-value>?
初始值: n/a(见正文)

result 描述符 定义了由其 @function 规则定义的自定义函数 求值的结果。 使用 var() 函数, 可以引用函数参数局部变量, 以及通过 <dashed-function> 形式调用的其它 自定义函数

result 描述符本身没有类型, 但其 解析后的值会在 替换 <dashed-function> 时进行类型检查。

2.3. 参数与局部变量

本节为非规范性内容。

自定义函数函数体内部, var() 函数可以访问局部变量(即在 函数体中定义的自定义属性), 函数参数 (传递给函数的值,或设为默认值), 以及调用点(元素或另一个 自定义函数)定义的 自定义属性

在上述列表中,前面的内容会“覆盖”同名的后面内容——如果有一个名为 --foo局部变量,那么 var(--foo) 会被该 局部变量 替换, 而不是参数或者外部定义的自定义属性。 但其他值仍可以访问: 将 --foo 局部变量设置为 initial 时,会解析为 --foo 参数, 设置为 inherit 时, 则解析为调用点的 --foo 自定义属性。

一个自定义函数可以访问调用栈上层函数的局部变量函数参数
@function --outer(--outer-arg) {
  --outer-local: 2;
  result: --inner();
}
@function --inner() returns <number> {
  result: calc(var(--outer-arg) + var(--outer-local));
}
div {
  z-index: --outer(1); /* 3 */
}

同样,自定义属性也是隐式可用的:

@function --double-z() returns <number> {
  result: calc(var(--z) * 2);
}
div {
  --z: 3;
  z-index: --double-z(); /* 6 */
}

函数参数会“遮蔽”自定义属性局部变量则会“遮蔽”两者:

@function --add-a-b-c(--b, --c) {
  --c: 300;
  result: calc(var(--a) + var(--b) + var(--c));
  /* 使用调用点自定义属性的 --a,
     函数参数的 --b,
     以及局部变量的 --c */
}
div {
  --a: 1;
  --b: 2;
  --c: 3;
  z-index: --add-a-b-c(20, 30); /* 321 */
}

3. 使用自定义函数

类似于自定义属性的值 可以通过 var() 替换到其他属性值中一样, 自定义函数的求值结果 也可以通过 <dashed-function> 替换到属性值中。

<dashed-function> 是一种函数式表示法,其函数名以两个连字符(U+002D HYPHEN-MINUS)开头。 它的参数语法为:

<dashed-function> = --*( <declaration-value>#? )

<dashed-function> 只能在允许 var() 的地方使用。

如果一个属性包含一个或多个 <dashed-function>, 那么整个属性的语法在解析时应被视为有效。 在计算值阶段, 每个 <dashed-function> 必须先被替换,然后再与属性的语法进行校验。

注意:自定义函数体内,var() 可能的解析结果 与 <dashed-function> 用于元素上的解析结果不同。 详见 § 3.1 自定义函数的求值

<dashed-function> 会在某种上下文中被求值: 可以是在元素上的属性值 (或最终视为元素属性的描述符, 如 @keyframes), 也可以是在另一个自定义函数体中的描述符上, 此时作用于一个“假想”元素。 无论哪种情况都会形成一个调用上下文, 其中包含包含 <dashed-function> 的属性或描述符名称, 以及该属性/描述符要应用到的元素(或“假想”元素)。

调用上下文<dashed-function>自定义函数内部 嵌套求值时, 调用上下文根元素 就是 调用上下文 栈中的真实元素。

替换一个 dashed function dashed function, 以及参数列表 arguments
  1. function 为通过 dashed function 的名称作为树作用域引用得到的结果。 如果没有该名称,则返回保证无效值

  2. arguments 中的每个 arg替换任意替换函数, 并用结果替换 arg

    注意: 这可能导致部分(或全部)参数变为保证无效值, 此时会触发默认值(如有)。

  3. 如果 dashed function 正在被替换到元素上的属性中, 则令 calling context 为包含该元素和属性的调用上下文

    否则,若被替换到“假想元素”的描述符上, 且在求值另一个自定义函数时, 则 calling context 为包含该“假想元素”和描述符的调用上下文

  4. 对自定义函数求值, 使用 functionargumentscalling context, 并返回求值结果的等效标记序列

可以通过大括号 {} 将带逗号的值整体作为单个参数传递:
@function --max-plus-x(--list, --x) {
  result: calc(max(var(--list)) + var(--x));
}
div {
  width: --max-plus-x({ 1px, 7px, 2px }, 3px); /* 10px */
}
下例中,--foo() 自身与自身形成了循环:
@function --foo(--x) {
  result: --foo(10);
}

同样,--bar() 也与自身形成了循环, 即使局部变量 --x 并未被 result 调用:

@function --bar() {
  --x: --bar();
  result: 1;
}

但下例中,--baz() 并未与自身循环, 因为我们从未在 @media 规则内求值 result 声明:

@function --baz(--x) {
  @media (unknown-feature) {
    result: --baz(42);
  }
  result: 1;
}
下例中函数 --baz() 并未形成循环: 尽管 var(--x)var(--y) 出现在函数体中, 它们分别指向函数参数局部变量自定义属性 --x--y 都引用了 --baz(),但这没关系: 这些 自定义属性 并未在 --baz() 内部被引用。
@function --baz(--x) {
  --y: 10px;
  result: calc(var(--x) + var(--y));
}

div {
  --x: --baz(1px);
  --y: --baz(2px);
  width: var(--x);  /* 11px */
  height: var(--y); /* 12px */
}

3.1. 自定义函数的求值

自定义函数的求值本质上是, 假设其函数体是应用于一个假想元素的样式规则, 按常规解析样式, 然后返回该假想元素上的 result 描述符的值。 这个假想元素“继承”了所有自定义属性的值, 就像它是其调用上下文的子元素一样, 但其函数参数会覆盖同名的“继承”自定义属性。

对自定义函数求值 custom function, 给定一个调用上下文 calling context 和一个 CSS 值列表 arguments, 返回一个 CSS 值:
  1. substitution context 为一个包含 «"function", custom function» 的替换上下文

    注意: 由于树作用域, 相同的函数名可能多次出现在栈上, 但指向不同的自定义函数。 因此,自定义函数本身会被包含在替换上下文中,而不仅仅是其名称。

  2. substitution context 进行保护,直至本算法结束。 如果 substitution context 被标记为循环, 则返回保证无效值

  3. 如果 arguments 的数量大于 custom function函数参数的数量, 返回保证无效值

  4. registrations 为一个初始为空的自定义属性注册表集合。

  5. 对于 custom function 的每个函数参数, 创建一个以参数名为名、参数类型为语法、inherit 标志为 true、无初始值的自定义属性注册表, 并将注册项加入 registrations

  6. 如果 custom function返回类型, 创建一个名为 "return"(违反常规注册名规则)、语法为 返回类型、inherit 标志为 false、无初始值的自定义属性注册表, 并将注册项加入 registrations

  7. argument rule 为一个初始为空的样式规则

  8. 对于 custom function 的每个函数参数

    1. arg valuearguments 中对应参数的值, 如果没有对应参数,则为保证无效值

    2. default value 为参数的默认值

    3. argument rule 添加一个自定义属性,其名称为参数名, 值为 first-valid(arg value, default value)

  9. 使用 custom functionargument stylesregistrationscalling context 解析函数样式。 令 argument styles 为结果。

  10. body rulecustom function函数体, 以样式规则形式。

  11. 对于 registrations 中的每个自定义属性注册表, 设置其初始值为 argument styles 中的对应值, 设置语法为通用语法定义, 并将包含该属性名和属性值的自定义属性前置到 body rule

  12. 使用 custom functionbody ruleregistrationscalling context 解析函数样式。 令 body styles 为结果。

  13. 如果 substitution context 被标记为循环替换上下文, 返回保证无效值

    注意: 嵌套的任意替换函数可能会在步骤2之后某处将 substitution context 标记为循环, 例如在解析 result 时。

  14. 返回 body stylesresult 属性的值。

解析函数样式, 给定自定义函数 custom function, 样式规则 rule, 一组自定义属性注册表 registrations, 以及调用上下文 calling context, 返回一组计算样式:
  1. 创建一个“假想元素” el,其作为 calling context 的元素的子元素。el无特征的, 只适用自定义属性result 描述符。

  2. rule 应用于 el指定值阶段, 并进行如下修改:

  3. 计算 el 上所有自定义属性result “属性”的计算值, 详见 CSS Properties and Values API 1 § 2.4 计算值阶段行为, 并结合上一步的变更, 以及如下内容:

    • 除对自定义属性的引用(正常使用 el 上的值) 和数字/百分比(在自定义属性中保持未解析)外, 所有通常会引用被样式化元素的值 现在都引用 calling context根元素

      注意: 例如属性中的 attr(), 或规则中的 @container 查询。

  4. 返回 el 的样式。

    注意: 这里只会用到自定义属性result 描述符。

4. 自定义函数的执行模型

与 CSS 其他部分一样,自定义函数遵循声明式模型。

局部变量描述符 和 result 描述符 可以以任意顺序出现, 并且可以多次出现。 如果发生这种情况,则后出现的声明会覆盖先前的声明。

@function --mypi() {
  result: 3;
  result: 3.14;
}

--mypiresult 描述符的值为 3.14

@function --circle-area(--r) {
  result: calc(pi * var(--r2));
  --r2: var(--r) * var(--r);
}

局部变量 描述符可以出现在被引用之前或之后。

4.1. 条件规则

出现在 @function 内的条件分组规则 会变成嵌套分组规则, 但有额外限制, 只有 @function 内允许的描述符才能出现在 嵌套分组规则 内。

条件分组规则@function 内会 正常处理, 相当于在条件为真时将规则内容插入到 条件分组规则 所在位置, 否则该位置视为空。

@function --suitable-font-size() {
  result: 16px;
  @media (width > 1000px) {
    result: 20px;
  }
}

如果媒体查询条件为真,result 描述符的值为 20px, 否则为 16px

注意由于执行模型, 在 @function 中无法实现“提前返回”:
@function --suitable-font-size() {
  @media (width > 1000px) {
    result: 20px;
  }
  result: 16px;
}

上述例子中,result 描述符的值始终为 16px

局部变量 也可以在条件规则内使用:
@function --suitable-font-size() {
  --size: 16px;
  @media (width > 1000px) {
    --size: 20px;
  }
  result: var(--size);
}

5. CSSOM

5.1. CSSFunctionRule 接口

CSSFunctionRule 接口表示一个 @function 规则。

[Exposed=Window]
interface CSSFunctionRule : CSSGroupingRule {
  readonly attribute CSSOMString name;
  sequence<FunctionParameter> getParameters();
  readonly attribute CSSOMString returnType;
};
name类型为 CSSOMString,只读
自定义函数的名称。
returnType类型为 CSSOMString,只读
自定义函数的返回类型, 以语法字符串形式表示。 如果 自定义函数没有返回类型, 则返回 "type(*)"
dictionary FunctionParameter {
  required CSSOMString name;
  required CSSOMString type;
  CSSOMString? defaultValue;
};
name
函数参数的名称。
type
参数类型, 以语法字符串表示, 如果 参数没有类型,则为 "type(*)"
defaultValue
函数参数的默认值, 如果该参数没有默认值则为 `null`。

虽然声明可以直接在 @function 规则中指定, 但在 CSSOM 中不会以这种方式表示。 相反,连续的声明片段 会如同被包裹在 CSSFunctionDeclarations 规则中一样出现。

注意: 这同样适用于 @function 规则中的“前置”声明, 即那些没有跟在其他嵌套规则后面的声明。

@function --bar() {
  --x: 42;
  result: var(--y);
  @media (width > 1000px) {
    /* ... */
  }
  --y: var(--x);
}

上述内容在 CSSOM 中表现为:

@function --bar() {
  /* CSSFunctionDeclarations { */
    --x: 42;
    result: var(--y);
  /* } */
  @media (width > 1000px) {
    /* ... */
  }
  /* CSSFunctionDeclarations { */
    --y: var(--x);
  /* } */
}
序列化一个 CSSFunctionRule, 返回以下内容的拼接结果:
  1. 字符串 "@function",后跟一个空格(U+0020)。

  2. 序列化标识符 操作,作用于 自定义函数名称, 后跟一个左括号(U+0028)。

  3. 对每个 自定义函数参数执行 序列化函数参数, 用 ", "(逗号 U+002C,后跟一个空格 U+0020)连接。

  4. 一个右括号(U+0029)。

  5. 如果 自定义函数返回类型, 且该 返回类型 不是 通用语法定义("*"):

    • 一个空格(U+0020), 后跟字符串 "returns", 再后跟一个空格(U+0020)。

    • 对该类型执行 序列化 CSS 类型, 后跟一个空格(U+0020)。

  6. 一个左花括号(U+007B),后跟一个空格(U+0020)。

  7. 对 cssRules 中的每条规则执行序列化 CSS 规则, 过滤掉空字符串, 用一个空格(U+0020)连接所有结果。

    注意: 序列化 CSS 规则 在序列化空的 CSSFunctionDeclarations 规则时可以返回空字符串。

  8. 一个空格(U+0020),后跟一个右花括号(U+007D)。

序列化函数参数, 返回以下内容的拼接结果:
  1. 序列化标识符 操作,作用于 函数参数名称。

  2. 如果 函数参数类型, 且该 类型 不是 通用语法定义

  3. 如果 函数参数默认值

    • 一个冒号(U+003A), 后跟一个空格(U+0020), 再后跟对该值执行 序列化 CSS 值 的结果。

序列化 CSS 类型, 返回以下内容的拼接结果:
  1. 如果 <css-type> 由单个 <syntax-component> 组成, 则返回对应的语法字符串

  2. 否则, 返回以下内容的拼接:

    • 字符串 "type(", 即 "type" 后跟一个左括号(U+0028)。

    • 对应的语法字符串

    • 字符串 ")", 即一个右括号(U+0029)。

5.2. CSSFunctionDeclarations 接口

CSSFunctionDeclarations 接口表示 声明@function 规则内连续出现的一段。

[Exposed=Window]
interface CSSFunctionDescriptors : CSSStyleDeclaration {
  attribute [LegacyNullToEmptyString] CSSOMString result;
};

[Exposed=Window]
interface CSSFunctionDeclarations : CSSRule {
  [SameObject, PutForwards=cssText] readonly attribute CSSFunctionDescriptors style;
};
style 属性 必须为该规则返回一个 CSSFunctionDescriptors 对象, 包含以下属性:
computed flag

未设置

readonly flag

未设置

declarations

该规则中声明的声明,按指定顺序排列。包括所有局部变量

parent CSS rule

this

owner node

Null

CSSFunctionDeclarations 规则与 CSSNestedDeclarations 类似,序列化时表现为其声明块直接序列化一样。

6. 隐私注意事项

本规范定义的结构完全在 CSS 内部定义和使用; 不会暴露任何新信息。

7. 安全注意事项

目前没有针对本规范提出安全相关问题。

一致性

文档约定

一致性要求通过描述性断言与 RFC 2119 术语的组合表达。本规范规范性部分中的关键词 “MUST”(必须)、“MUST NOT”(不得)、“REQUIRED”(必需)、“SHALL”(应)、“SHALL NOT”(不应)、“SHOULD”(应当)、“SHOULD NOT”(不应当)、“RECOMMENDED”(建议)、“MAY”(可以)和 “OPTIONAL”(可选)应按照 RFC 2119 的说明进行解释。不过,为了可读性,本规范未将这些词全部大写。

本规范的所有文本均为规范性内容,除非明确标记为非规范性、示例或注释。[RFC2119]

本规范中的示例以“例如”开头,或用 class="example" 设置,以区别于规范性文本,例如:

这是一个信息性示例。

信息性注释以 “注” 开头,并用 class="note" 区分于规范性文本,例如:

注:这是一个信息性注释。

建议内容为规范性部分,采用特殊样式强调,并用 <strong class="advisement"> 区分,例如: UA 必须提供可访问的替代方案。

一致性类别

本规范定义了三类一致性对象:

样式表
一个 CSS 样式表
渲染器
一个 UA,负责解释样式表语义并渲染 使用这些样式表的文档。
编辑工具
一个 UA,用于编写样式表。

如果样式表中所有使用本模块定义语法的语句都符合通用 CSS 语法及本模块中各特性的单独语法,该样式表即被认为符合本规范。

渲染器符合本规范的条件是,在按照相关规范解释样式表的基础上,还能正确解析本规范定义的所有特性,并相应地渲染文档。但由于设备限制导致 UA 无法正确渲染文档,不会被视为不符合规范。(例如,UA 不要求在单色显示器上渲染颜色。)

编辑工具符合本规范的条件是,其编写的样式表在语法上符合通用 CSS 语法和本模块各特性的单独语法,并满足本模块描述的关于样式表的所有其他一致性要求。

部分实现

为了让作者可以利用前向兼容解析规则指定回退值,CSS 渲染器必须将所有不支持的 at-规则、属性、属性值、关键字及其他语法结构视为无效(并适当忽略)。特别地,用户代理不得在同一个多值属性声明中选择性地忽略不支持的组件值而保留支持的值:如果任何值被视为无效(不支持的值必须如此),CSS 要求整个声明被忽略。

不稳定与专有特性的实现

为避免与未来稳定的 CSS 特性冲突,CSS 工作组建议遵循最佳实践来实现不稳定特性和专有扩展

非实验性实现

一旦规范进入候选推荐(CR)阶段,就可以进行非实验性实现,且实现者应发布任何 CR 级特性的非前缀实现,只要能证明其实现符合规范。

为建立和维护 CSS 在各实现间的互操作性,CSS 工作组要求非实验性 CSS 渲染器在发布任何 CSS 特性的非前缀实现前,向 W3C 提交实现报告(如有必要,还需提交用于该报告的测试用例)。提交给 W3C 的测试用例将由 CSS 工作组审查和修订。

关于提交测试用例和实现报告的更多信息,请参见 CSS 工作组网站 https://www.w3.org/Style/CSS/Test/。 如有疑问,请发邮件至 public-css-testsuite@w3.org 邮件列表。

索引

本规范定义的术语

引用定义的术语

参考文献

规范性引用

[CSS-ANIMATIONS-1]
David Baron 等人。CSS 动画 1 级。2023年3月2日。WD。网址:https://www.w3.org/TR/css-animations-1/
[CSS-CASCADE-5]
Elika Etemad;Miriam Suzanne;Tab Atkins Jr.。CSS 层叠与继承 5 级。2022年1月13日。CR。网址:https://www.w3.org/TR/css-cascade-5/
[CSS-CONDITIONAL-3]
Chris Lilley;David Baron;Elika Etemad。CSS 条件规则模块 3 级。2024年8月15日。CRD。网址:https://www.w3.org/TR/css-conditional-3/
[CSS-NESTING-1]
Tab Atkins Jr.;Adam Argyle。CSS 嵌套模块。2023年2月14日。WD。网址:https://www.w3.org/TR/css-nesting-1/
[CSS-PROPERTIES-VALUES-API-1]
Tab Atkins Jr.;Alan Stearns;Greg Whitworth。CSS 属性与值 API 1 级。2024年3月26日。WD。网址:https://www.w3.org/TR/css-properties-values-api-1/
[CSS-SCOPING-1]
Tab Atkins Jr.;Elika Etemad。CSS 作用域模块 1 级。2014年4月3日。FPWD。网址:https://www.w3.org/TR/css-scoping-1/
[CSS-SYNTAX-3]
Tab Atkins Jr.;Simon Sapin。CSS 语法模块 3 级。2021年12月24日。CRD。网址:https://www.w3.org/TR/css-syntax-3/
[CSS-VALUES-4]
Tab Atkins Jr.;Elika Etemad。CSS 值与单位模块 4 级。2024年3月12日。WD。网址:https://www.w3.org/TR/css-values-4/
[CSS-VALUES-5]
Tab Atkins Jr.;Elika Etemad;Miriam Suzanne。CSS 值与单位模块 5 级。2024年11月11日。WD。网址:https://www.w3.org/TR/css-values-5/
[CSS-VARIABLES-1]
Tab Atkins Jr.。CSS 级联变量自定义属性模块 1 级。2022年6月16日。CR。网址:https://www.w3.org/TR/css-variables-1/
[CSSOM-1]
Daniel Glazman;Emilio Cobos Álvarez。CSS 对象模型(CSSOM)。2021年8月26日。WD。网址:https://www.w3.org/TR/cssom-1/
[RFC2119]
S. Bradner。用于 RFC 的需求级别关键词。1997年3月。最佳当前实践。网址:https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad;Tab Atkins Jr.。选择器 4 级。2022年11月11日。WD。网址:https://www.w3.org/TR/selectors-4/
[WEBIDL]
Edgar Chen;Timothy Gu。Web IDL 标准。Living Standard。网址:https://webidl.spec.whatwg.org/

补充性引用

[CSS-CONDITIONAL-5]
Chris Lilley 等人。CSS 条件规则模块 5 级。2024年11月5日。WD。网址:https://www.w3.org/TR/css-conditional-5/

属性索引

未定义属性。

@function 描述符

名称 初始值
result <declaration-value>? n/a(见正文)

IDL 索引

[Exposed=Window]
interface CSSFunctionRule : CSSGroupingRule {
  readonly attribute CSSOMString name;
  sequence<FunctionParameter> getParameters();
  readonly attribute CSSOMString returnType;
};

dictionary FunctionParameter {
  required CSSOMString name;
  required CSSOMString type;
  CSSOMString? defaultValue;
};

[Exposed=Window]
interface CSSFunctionDescriptors : CSSStyleDeclaration {
  attribute [LegacyNullToEmptyString] CSSOMString result;
};

[Exposed=Window]
interface CSSFunctionDeclarations : CSSRule {
  [SameObject, PutForwards=cssText] readonly attribute CSSFunctionDescriptors style;
};