1. 程式人生 > >SVG g defs symbol use元素使用詳解

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>