<use>

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

* 此特性的某些部分可能存在不同级别的支持。

<use> 元素用于获取 SVG 文档中的节点,并在别处复制它们。其效果等同于将这些节点深拷贝到一个不会被暴露的 DOM 中,然后将它们粘贴到 <use> 元素所在的位置,非常像克隆的 <template> 元素。

使用语境

分类图形元素、图形引用元素、结构元素
允许内容可包含任意数量、任意顺序的下列元素
动画元素
描述性元素

属性

href

指向需要被复制的元素/片段的 URL。关于常见陷阱的详细信息,请参阅使用说明
值类型<URL>默认值:无;可否动画

xlink:href 已弃用

一个指向需要被复制的元素/片段的 <IRI> 引用。如果 hrefxlink:href 同时存在,将使用 href 属性的值。
值类型<IRI>默认值:无;可否动画

警告: 从 SVG 2 开始,xlink:href 属性已被废弃,推荐使用 href。更多信息请参见 xlink:href 页面。

x

应用于 <use> 元素的额外最终偏移变换的 x 坐标。
值类型<coordinate>默认值0可否动画

y

应用于 <use> 元素的额外最终偏移变换的 y 坐标。
值类型<coordinate>默认值0可否动画

width

<use> 元素的宽度。
值类型<length>默认值0可否动画

height

<use> 元素的高度。
值类型<length>默认值0可否动画

注意: widthheight<use> 元素没有影响,除非被引用的元素具有 viewBox —— 也就是说,它们仅在 <use> 引用 <svg><symbol> 元素时才有效。

注意: 从 SVG2 开始,xywidthheight几何属性,这意味着这些特性也可以作为该元素的 CSS 属性来使用。

DOM 接口

该元素实现了 SVGUseElement 接口。

示例

下面的示例展示了如何使用 <use> 元素来绘制具有不同填充和描边颜色的圆。在最后一个圆中,stroke="red" 将被忽略,因为描边已经在 myCircle 上设置了。

html
<svg viewBox="0 0 30 10" xmlns="http://www.w3.org/2000/svg">
  <circle id="myCircle" cx="5" cy="5" r="4" stroke="blue" />
  <use href="#myCircle" x="10" fill="blue" />
  <use href="#myCircle" x="20" fill="white" stroke="red" />
</svg>

用法说明

如果 <use>引用的元素上已经定义了相应的属性,那么 <use> 上的大多数属性都会被忽略。(这与 CSS 样式属性会覆盖层叠中“较早”设置的属性不同)。只有 <use> 元素上的 xywidthheighthref 属性,在被引用元素已经定义了相应属性的情况下,可能会产生一些影响(将在后面描述)。然而,任何其他未在被引用元素上设置的属性都将应用于 <use> 元素。

由于克隆的节点不会被暴露出来,因此在使用 CSS<use> 元素及其克隆的后代设置样式时必须小心。除非使用 CSS 继承显式请求,否则不保证 CSS 属性会被克隆的 DOM 继承。

出于安全原因,浏览器可能会对 <use> 元素应用同源策略,并可能拒绝加载 href 属性中的跨域 URL。目前没有为 <use> 元素设置跨域策略的已定义方法。

通过 <use> 从外部文件加载资源

你可以通过 <use> 元素从外部 SVG 文件加载节点,方法是指定文件路径,后跟一个指向要加载节点 id 的 URL 片段。

html
<svg>
  <use href="../assets/my-svg.svg#my-fragment"></use>
</svg>

在过去,URL 片段总是必需的,即使你只想加载整个 SVG 文档。在这种情况下,id 会被包含在 SVG 根元素上。

html
<svg xmlns="http://www.w3.org/2000/svg" id="my-fragment">
  <circle cx="150" cy="100" r="80" fill="green" />
</svg>

然而,现代实现已经更新,如果你想加载整个外部文档,可以不带 URL 片段来引用它(并且 SVG 文档根元素上不再需要 id)。

html
<svg>
  <use href="../assets/my-svg.svg"></use>
</svg>

请查看浏览器兼容性表格以了解浏览器支持情况。

通过 <use> 从数据 URI 加载资源

出于安全原因,不推荐在 href 属性中使用数据 URI 加载资源。这适用于 <use href="data:..." 以及使用 setsetAttribute 方法设置 href 的情况。

同样,请查看浏览器兼容性表格以了解浏览器支持情况。

规范

规范
Scalable Vector Graphics (SVG) 2
# UseElement

浏览器兼容性