CSS 关联参数模块第 1 级

W3C 首次公开工作草案

有关本文档的更多详细信息
此版本:
https://www.w3.org/TR/2026/WD-css-link-params-1-20260714/
最新发布版本:
https://www.w3.org/TR/css-link-params-1/
编辑草案:
https://drafts.csswg.org/css-link-params/
历史记录:
https://www.w3.org/standards/history/css-link-params-1/
反馈:
CSSWG 问题 仓库
编辑:
Tab Atkins-BittnerGoogle
Daniel HolbertMozilla
Jonathan WattMozilla
建议编辑此规范:
GitHub 编辑器

摘要

本规范引入了一种将 CSS 值传递到链接资源(例如 SVG 图像)中的方式,使这些值可以在目标资源中 用作 CSS 自定义环境变量。 这样便可轻松复用“模板化”的 SVG 图像,使其能够轻松适配站点的主题颜色等, 而无需修改源 SVG。

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

本文档的状态

本节描述本文档在发布时的状态。 当前 W3C 出版物列表 以及本技术报告的最新修订版 可在 W3C 标准和草案索引中找到。

本文档由 CSS 工作组 使用推荐标准 流程发布为首次公开工作草案。 发布为首次公开工作草案 并不表示获得 W3C 及其成员的认可。

本文档是一份草案, 随时可能由其他文档更新、取代 或废止。 除作为尚在进行中的工作外,不应以其他方式引用本文档。

请通过 在 GitHub 中提交议题(首选)来发送反馈, 并在标题中包含规范代码“css-link-params”,如下所示: “[css-link-params] …评论摘要…”。 所有议题和评论都会被归档。 或者,也可以将反馈发送到(已归档的)公共邮件列表 www-style@w3.org

本文档受 2025 年 8 月 18 日的 W3C 流程 文档约束。

本文档由一个依据 W3C 专利政策运作的工作组编写。 W3C 维护一份 与该工作组交付成果有关的所有专利披露的公开列表; 该页面还包含披露专利的说明。 任何确切知晓某项专利并认为该专利 包含必要权利要求的个人, 都必须依照 W3C 专利政策 第 6 节披露相关信息。

1. 简介

SVG 可以使用 CSS 设置样式, 当其内联用于 HTML 中时, 此功能会非常有用。 例如,只需对 SVG 图标应用一条 :hover 规则, 更改其 fill 属性, 便可根据用户是否将鼠标悬停在图标上,使其呈现不同的颜色。

当 SVG 以不允许外部页面中的选择器或 CSS 继承 应用于它的方式引用时 (例如在 HTML 中通过 imgiframe 嵌入), 此功能便会丧失。 更改此类“外部”SVG 图像显示方式的唯一方法 是制作多个图像, 并更改所引用的图像。 由于需要下载新资源,这会导致页面出现延迟, 并且无法使用 CSS 过渡等动态效果。

CSS 链接参数 是一种在“外部”资源上设置 CSS 自定义环境变量的方式, 可以通过 CSS 属性 或 URL 上的特殊片段方案进行设置。 这使“外部”SVG 图像能够获得“内联”SVG 图像所具有的 一部分有限但强大的可定制能力。

链接参数是一个 由 <dashed-ident> 名称 和任意(可能为空的)<declaration-value> 值组成的对。

例如,可以编写一个使用链接参数的 SVG 图像, 从而允许动态更改其颜色, 如下所示:
<svg>
  <path fill="env(--color, black)" d="..." />
</svg>

默认情况下,它会用黑色填充其形状, 因为指定的后备颜色是黑色。 但链接 参数可以通过多种方式定制颜色:

<img src="image.svg#param(--color,green)">
img {
  link-parameters: param(--color, green);
}
.foo {
  background-image: url("image.svg", param(--color, green));
}

2. 设置链接参数

外部资源可以附带一个链接参数列表, 其中每个条目都由作为键的 <dashed-ident> 和作为值的(可能为空的)<declaration-value> 组成。

可以通过三种方式指定链接参数

如果通过多种方式指定, 所有链接 参数都会按照以下顺序附加到外部资源的单个列表中:

  1. 元素上的 link-parameters 属性(如适用)

  2. param() URL 片段标识符

  3. param() <url-modifier>,位于 url()

如果存在多个名称相同的链接 参数, 则使用列表中的最后一个。

如何在链接资源中访问链接 参数 将在下一节 § 3 使用链接参数中定义。

名称: link-parameters
值: none | <param()>#
初始值: none
适用于: 所有元素和伪元素
继承:
百分比: 不适用
计算值: 与指定值相同
规范顺序: 按语法
动画类型: 离散

link-parameters 属性是在元素本身上设置链接参数的一种方式 (如果该元素表示外部资源, 例如 HTML imgiframe), 也可在元素上指定的所有外部 CSS 资源上设置链接参数 (例如背景图像等)。 其值为:

none

未指定任何链接 参数

<param()>#

由一个或多个链接参数组成的列表。

param() 函数指定一个链接参数, 其键为 <dashed-ident>, 值为 <declaration-value>?。 (如果省略 <declaration-value>, 则表示空值。) 其语法如下:

<param()> = param( <dashed-ident> , <declaration-value>? )

2.2. 在 URL 中

可以在用于引用外部资源的 URL 的片段中 使用一种特殊的“片段标识符”。 SVG 文档现有“片段标识符”的若干示例可在 SVG 1.1 规范中找到。

SVG 参数片段标识符的语法为:

param( <dashed-ident> , <declaration-value>? )

(使用 CSS 值定义语法;TODO 为其定义实际的解析器)。

例如,要将 SVG 图像的 env(--text-color) 自定义环境变量 设置为蓝色, 可以使用如下 URL 引用该图像: “http://example.com/image.svg#param(--text-color,blue)”。

可以通过向 URL 附加多个 param() 片段标识符, 将多个链接 参数传递给图像。 当它们相互组合或与其他“片段标识符”组合时, 每个值都用一个 & 字符分隔, 与 URL 的查询参数相同。

例如,如果上一个示例中的图像还使用了 env(--bg-color), 则可以使用如下 URL 引用它: “http://example.com/image.svg#param(--text-color,blue)&param(--bg-color,white)”, 从而同时设置 env(--text-color)env(--bg-color)

注意:空格以及某些其他在 CSS 语法中 可能有效的字符, 严格来说在 URL 中无效。 在某些上下文中, 可能需要转义这些字符才能形成有效的 URL。 不过,在大多数情况下, 例如 HTML 的 a 元素或 CSS 的 url() 函数, 空格是可接受的,无需转义。

2.3. 通过 CSS url() 函数设置

通过 CSS 引用外部资源时, 可以在 url() 函数中 使用 param() 函数。 但一种常见用例是传入页面自身自定义 属性的值; 例如,页面可能使用 --primary-color 自定义属性, 并希望 SVG 图像与其匹配。 但是,无法将 CSS 中自定义 属性的值整合到传递给 url() 函数的 URL 中。

为实现这一点, param() 是一种 有效的 <url-modifier>。 所有指定为 <url-modifier>param() 都会像 link-parameters 一样定义链接参数

例如, 如果站点使用 --primary-color 自定义属性为其元素设置主题, 并希望使用 env(--color) 的 SVG 背景反映该主题, 则可以编写:
.foo {
  background-image: url(
    "http://example.com/image.svg"
    param(--color, var(--primary-color))
  );
}

3. 使用 链接参数

当外部资源链接指定了一个或多个链接参数时, 如果链接资源能够理解 CSS (例如 SVG 或 HTML 文档), 那么这些链接参数 会以其名称和值为该资源建立全局自定义环境变量, 可在样式表中通过 env() 函数访问。

例如,如果 SVG 图像希望公开一个 --color 参数, 可以像这样使用它:
<svg>
  <g style="fill: env(--color);">
    <path d="..." />
  </g>
</svg>
通常最好让 SVG 图像即使在未提供任何参数时也能使用, 方法是为每个自定义属性提供“默认值”。 有多种方法可以做到这一点。
  1. 在每个 env() 函数中提供一个后备值,例如 fill: env(--color, blue)

  2. 如果需要大量使用 env(), 以至于为每个单独的 env() 提供后备值很麻烦, 则将自定义环境变量存储在根元素的自定义属性中, 并指定默认值, 如下所示:

    :root {
      --color: env(--color, blue);
    }
    

    在此示例中,如果通过链接参数提供了 --colorvar(--color) 将包含其值。 否则,它将包含默认的蓝色值。 无论哪种情况,都可以在样式表中无条件地使用 var(--color), 因为可以确定它始终有值。

隐私考虑

本规范未引入新的隐私考虑。

安全考虑

本规范引入了一种向链接资源传递信息的新方式, 这些信息可能来自恶意来源。

虽然没有为此通道建立明确的握手机制, 但使用 env() 获取这些信息, 可以最大限度地降低链接资源 因这些信息而感到意外的可能性。 页面存在安全漏洞的唯一可能情况 是其样式以某种方式使用了一个未知的 env(), 默认情况下,这只会导致属性无效, 并且可以在开发者工具中看到。

任何恶意信息也只能影响 资源明确选择接受的各个 CSS 属性。

一致性

文档约定

一致性要求通过描述性断言和 RFC 2119 术语的组合来表达。本文档规范性部分中的关键词“必须”、 “不得”、“要求”、“应”、“不应”、“应该”、“不应该”、 “推荐”、“可以”和“可选”,应按照 RFC 2119 中的说明进行解释。 但是,为了便于阅读,这些词在本规范中并非全部以大写 字母显示。

除明确标记为非规范性的章节、示例和注释外, 本规范的所有文本均为规范性文本。[RFC2119]

本规范中的示例以“例如”等词语引入, 或通过 class="example" 与规范性文本分隔, 如下所示:

这是一个信息性示例。

信息性注释以“注意”一词开头,并通过 class="note" 与规范性文本分隔,如下所示:

注意,这是一条信息性注释。

警示是采用特殊样式以引起特别注意的规范性章节,并通过 <strong class="advisement"> 与其他规范性文本分隔,如下所示: UA 必须提供可访问的替代方案。

一致性类别

本规范定义了 三种一致性类别:

样式表
一个 CSS 样式表
呈现器
解释样式表语义并呈现 使用这些样式表的文档的 UA
创作工具
编写样式表的 UA

如果一个样式表中使用本模块所定义语法的所有语句 均符合通用 CSS 语法以及本模块所定义各项功能的 各自语法,则该样式表符合本规范。

如果呈现器除了按照适用规范中的定义解释样式表外, 还通过正确解析本规范定义的所有功能 并相应地呈现文档来支持这些功能, 则该呈现器符合本规范。但是,如果 UA 因设备限制 而无法正确呈现文档, 并不会使该 UA 不符合规范。(例如,不要求 UA 在单色显示器上呈现颜色。)

如果创作工具编写的样式表在语法上符合 通用 CSS 语法以及本模块中各项功能的各自语法, 并满足本模块中所述样式表的所有其他一致性要求, 则该创作工具符合本规范。

部分实现

为了使作者能够利用向前兼容的解析规则 指定后备值,CSS 呈现器必须 将其不具备可用支持级别的任何 @ 规则、属性、属性值、关键词 和其他语法结构视为无效(并酌情 忽略)。特别是,用户代理不得在一个 多值属性声明中选择性地忽略不支持的组件值,同时接受支持的值: 如果任何值被视为无效 (不支持的值必须如此),CSS 要求忽略整个声明。

不稳定功能和专有功能的实现

为了避免与未来稳定的 CSS 功能发生冲突, CSSWG 建议在实现 CSS 的不稳定功能和专有扩展遵循最佳实践

非实验性实现

规范达到候选推荐标准阶段后, 即可进行非实验性实现,实现者应该 为任何能够证明已按照规范正确实现的 CR 级功能 发布不带前缀的实现。

为了建立并维持 CSS 在各种实现之间的互操作性, CSS 工作组要求非实验性 CSS 呈现器 在发布任何 CSS 功能的不带前缀实现之前, 向 W3C 提交实现报告(以及必要时提交该实现报告所使用的 测试用例)。提交给 W3C 的测试用例 须由 CSS 工作组审查和修正。

有关提交测试用例和实现报告的更多信息, 可在 CSS 工作组的网站上找到: https://www.w3.org/Style/CSS/Test/。 问题应发送至 public-css-testsuite@w3.org 邮件列表。

索引

本规范定义的 术语

通过引用定义的 术语

参考文献

规范性参考文献

[CSS-ENV-1]
CSS 环境变量模块第 1 级。2025 年 9 月 23 日。首次公开工作草案。URL:https://www.w3.org/TR/css-env-1/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin。CSS 语法模块第 3 级。2021 年 12 月 24 日。候选推荐标准草案。URL:https://www.w3.org/TR/css-syntax-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad。CSS 值与单位 模块第 3 级。2024 年 3 月 22 日。候选推荐标准草案。URL:https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad。CSS 值与单位 模块第 4 级。2024 年 3 月 12 日。工作草案。URL:https://www.w3.org/TR/css-values-4/
[CSS-VARIABLES-1]
Tab Atkins Jr.。用于层叠 变量的 CSS 自定义属性模块第 1 级。2022 年 6 月 16 日。候选推荐标准。URL:https://www.w3.org/TR/css-variables-1/
[FILL-STROKE-3]
Elika Etemad; Tab Atkins Jr.。CSS 填充与描边 模块第 3 级。2017 年 4 月 13 日。首次公开工作草案。URL:https://www.w3.org/TR/fill-stroke-3/
[HTML]
Anne van Kesteren; 等。HTML 标准。 现行标准。URL:https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner。用于 RFC 中 指示要求级别的关键词。1997 年 3 月。当前最佳实践。URL:https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.。选择器第 4 级。2026 年 1 月 22 日。工作草案。URL:https://www.w3.org/TR/selectors-4/
[URL]
Anne van Kesteren。URL 标准。现行标准。 URL:https://url.spec.whatwg.org/

非规范性参考文献

[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley; Lea Verou。CSS 颜色模块 第 4 级。2026 年 6 月 18 日。候选推荐标准草案。URL:https://www.w3.org/TR/css-color-4/

属性索引

名称 初始值 适用于 继承 百分比 动画类型 规范顺序 计算值
link-parameters none | <param()># none 所有元素和伪元素 不适用 离散 按语法 与指定值相同