SVG g defs symbol use元素使用详解

SVG 意为可缩放矢量图形(Scalable Vector Graphics),SVG 使用 XML 格式定义图像。

g表示分组元素,将多个元素 设置为组,实现多个元素如:平移、旋转之类的整体操作;

defs实现元素定义,定义的元素不直接显示在画板上,通过use重用desf、g、symbol定义的元素,实现元素重用;

symbol 兼具<g>的分组功能和<defs>初始不可见的特性,同时可使用viewbox与preserveAspectRatio,在虚拟坐标系中实现图形绘制。

备注:在绘制svg图形时,若未定义viewbox,当图形大小超过绘制面板大小时,绘制的图形直接被截取,但使用viewbox后,画板将按照viewbox定义的边界进行缩放,确保图形能够完整绘制到画板上;

g元素示例:

 <svg xmlns="http://www.w3.org/2000/svg" version="1.1"
        width="300" height="200">
    <g id="group" fill="red" transform="translate(50)rotate(110)">
      <rect x="10" y="10" width="100" height="100" />
      <rect x="120" y="10" width="100" height="100" />
    </g>
  </svg>

使用use复用g示例:

<svg xmlns="http://www.w3.org/2000/svg"  version="1.1">
    <g id="group" fill="red" >
      <rect x="10" y="10" width="100" height="100"/>
    </g>
    <use id="one" x="0" y="110" xlink:href="#group"/>
    <use id="two" x="0" y="220" xlink:href="#group" stroke="black" stroke-width="2"/>
  </svg>

备注:在use中使用xlink:href 属性引用相关待复用元素ID,use中x、y坐标是相对于原图形定义的初始坐标的位移坐标,相当于使用了transform="translate(x,y)"

defs示例:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <defs>
      <rect
            id="defs"
            x="90" y="110"
            width="100" height="100" />
    </defs>
  
    <use id="ant"
         transform="translate(0 110) rotate(10 0 0)"
         fill="red"
         xlink:href="#defs" />
    <rect id="rect"
          fill="blue"
          x="90" y="220"
          width="110" height="110"
          transform="rotate(10 0 110)"
          fill-opacity="0.5" />
  </svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="400">
    <defs>
        <g id="ShapeGroup">
            <rect x="50" y="50" width="100" height="100" fill="#69C" stroke="red" stroke-width="2"/>
            <circle cx="100" cy="100" r="40" stroke="#00f" fill="none" stroke-width="5"/>
        </g>
    </defs>
    <use xlink:href="#ShapeGroup" transform="translate(-10,0) scale(0.5)"/>
    <use xlink:href="#ShapeGroup" transform="translate(10,10) scale(1)"/>
    <use xlink:href="#ShapeGroup" transform="translate(50,60) scale(1.5)"/>
</svg>

symbol示例:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <symbol id="symbol" viewBox="0 0 250 250">
      <rect x="90" y="110" width="100" height="100" />
    </symbol>
  
    <use id="ant"
         transform="translate(0 110) rotate(10 0 0)"
         fill="red"
         xlink:href="#symbol" />
    <rect id="rect"
          fill="blue"
          x="90" y="220"
          width="110" height="110"
          transform="rotate(10 0 110)"
          fill-opacity="0.5" />
  
  </svg>

 

SVG(Scalable Vector Graphics)是一种基于 XML 的矢量图形格式,而 defs 元素SVG 中的一个重要元素,用于定义可重复使用的图形元素或属性。下面是对 svg defs 的详细解释: 1. 定义:defs 元素SVG 的一个容器元素,用于存放可重复使用的图形元素或属性定义。它不会直接呈现任何图形,而是被其他 SVG 元素引用。 2. 用途:defs 元素主要用于定义共享的图形元素,以便在整个 SVG 文档中重复使用。通过将这些图形元素放在 defs 中,可以减少代码的冗余,并提高可维护性。 3. 嵌套规则:defs 元素可以包含各种 SVG 元素,如路径、文本、图像等。它可以被放置在 SVG元素或其他容器元素中,以便在需要的时候引用。 4. 引用方式:要引用 defs 中的图形元素或属性,可以使用使用 <use> 元素。通过在 <use> 元素中指定 xlink:href 属性,并指向 defs 中定义的元素,就可以在文档中使用这些定义的图形元素。 5. 示例:以下是一个使用 defs 元素定义和引用共享图形元素的示例: ```html <svg width="200" height="200"> <defs> <circle id="myCircle" cx="50" cy="50" r="40" fill="red" /> </defs> <use xlink:href="#myCircle" /> </svg> ``` 在上述示例中,定义了一个圆形元素,并将其放在 defs 中,然后使用 <use> 元素引用了这个圆形元素。这样就可以在 SVG 中重复使用这个圆形元素,而不需要重复定义。 总结:svg defs 元素SVG 中的一个容器元素,用于定义可重复使用的图形元素或属性。通过将图形元素放在 defs 中,并使用 <use> 元素引用,可以在整个 SVG 文档中重复使用这些定义的元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值