前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一篇文章带你了解SVG <use> 元素

一篇文章带你了解SVG <use> 元素

作者头像
前端进阶者
发布2021-01-22 10:33:44
3.7K0
发布2021-01-22 10:33:44
举报
文章被收录于专栏:前端进阶交流

SVG <use>元素可以重用SVG文档中其他位置(包括 <g>元素和 <symbol>元素)的SVG形状。可以在 <defs>元素内部(使形状直到使用之前不可见)或外部定义重用形状。

一、简单案例分析

示例

代码语言:javascript
复制
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Document</title>
  </head>
  <body style="background-color: aqua;">

    <svg width="500" height="100" style="fill: #FF0000;">
      <defs>
        <g id="shape">
          <rect x="0" y="0" width="50" height="50" ></rect>
          <circle cx="0" cy="0" r="50"></circle>
        </g>
      </defs>

      <use xlink:href="#shape" x="50" y="50"></use>
      <use xlink:href="#shape" x="200" y="50"></use>

      <circle cx="50" cy="50" r="5" style="fill:#0000ff;"></circle>
      <circle cx="200" cy="50" r="5" style="fill:#0000ff;"></circle>

    </svg>

  </body>

</html>

这个实例显示了在<defs>元素中定义的<g>元素。这使得<g>不可见,除非被<use>元素引用。

在引用<g>元素之前,必须通过其ID属性对其设置ID。<use>元素通过其xlink:href属性。注意属性值中ID前面的#。

<use>元素通过其x和y属性指定在何处显示重复使用的形状。请注意,<g>元素内部的形状位于0,0。这样做是因为它们的位置已添加到<use>元素中指定的位置。

运行后图像效果:

蓝点圆点不是示例的一部分。添加它们是为了显示两个 <use> 元素的 x 和 y。

二、在defs元素外使用形状

<use>元素可以重用SVG图像中任何位置元素,只要该形状具有唯一值的id属性即可。

示例

代码语言:javascript
复制
<svg width="500" height="110">
      <g id="shape2">
        <rect x="0" y="0" width="50" height="50" />
      </g>
      <use xlink:href="#shape2" x="200" y="50" />
      <circle cx="200" cy="50" r="5" style="fill:#0000ff;" />
</svg>

本示例定义了一个<g>元素,其中包含一个<rect>元素。然后,它通过<use>元素重用<g>元素(包括嵌套的<rect>元素)。

运行后图像效果:

同时显示了原始形状及其重用版本。之所以发生这种情况,是因为未在<defs>元素或<symbol>元素内定义要重用的形状(<g>元素)。因此它是可见的。

同样,蓝色圆点显示<use>元素的坐标。

三、设置CSS样式

如果原始形状上没有设置CSS样式,则可以在重用形状时设置CSS样式。只需指定要在<use>元素的style属性内设置的样式。这是一个示例:

代码语言:javascript
复制
<svg width="500" height="110">

      <g id="shape3">
        <rect x="0" y="0" width="50" height="50" />
      </g>

      <use xlink:href="#shape3" x="100" y="50" style="fill: #00ff00;" />
      <use xlink:href="#shape3" x="200" y="50" style="stroke: #00ff00; fill: none;" />

</svg>

原始形状上没有设置style属性。然后将使用默认样式(通常为黑色)进行渲染。

四、总结

本文基于SVG基础,介绍了<use>如何重用SVG文档中其他位置,设置CSS样式。通过案例分析,运行效果的展示 ,能够更直观的,更具有看到在实际项目中应用。

欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

代码很简单,希望对你学习有帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端进阶学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简单案例分析
  • 二、在defs元素外使用形状
  • 三、设置CSS样式
  • 四、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档